public override CSPSolution Solve() { Console.WriteLine("Beginning arc consistency check"); _solverStopwatch = Stopwatch.StartNew(); // Do arc consistency checking to narrow the domains Queue <Arc> arcs = GetAllArcs(); try { DoArcConsistency(arcs); } catch (InvalidOperationException ioe) { Console.WriteLine(ioe.ToString()); } // Complete the solution with backtracking search BacktrackingSolver backtracker = new BacktrackingSolver(_grid); CSPSolution solution2 = backtracker.Solve(); _solverStopwatch.Stop(); return(CompleteSolve("Arc Consistency with Backtracking Search", solution2.SolutionGrid, _solverStopwatch.Elapsed, _procesesed, _iterations)); }
protected CSPSolution CompleteSolve(string name, SudokuGrid grid, TimeSpan elapsed, int processed, int iterations) { CSPSolution solution = new CSPSolution(); solution.AlgorithmName = name; solution.SolutionGrid = grid; solution.TimeElapsed = elapsed; solution.Processed = processed; solution.Iterations = iterations; return(solution); }
private static void PrintSolution(CSPSolution solution) { Console.WriteLine("-------------------------------------------------------"); Console.WriteLine($"Solution for {solution.AlgorithmName}"); Console.WriteLine($"Solved in {solution.TimeElapsed.TotalMilliseconds} ms"); Console.WriteLine($"Processed {solution.Processed} nodes"); if (solution.Iterations > 0) { Console.WriteLine($"Solved in {solution.Iterations} iterations"); } Console.WriteLine(); PrintGrid(solution.SolutionGrid); Console.WriteLine("-------------------------------------------------------"); }
static void Main(string[] args) { Console.WriteLine($"{args[0]} loaded"); bool quit = false; while (!quit) { SudokuGrid initialProblem = LoadGridFromFile(args[0]); Console.WriteLine(); Console.WriteLine("Choose an algorithm: ArcConsistency (ac), BacktrackingSearch (bts), or GradientDescent (gd)"); Console.WriteLine("Press Q to quit, or P to print the initial grid"); string choice = Console.ReadLine(); List <CSPSolver> problemSolvers = new List <CSPSolver>(); switch (choice.ToLower().Trim()) { case "print": case "p": PrintGrid(initialProblem); break; case "q": case "quit": quit = true; break; case "ac": case "arcconsistency": case "arc": problemSolvers.Add(new ArcConsistencySolver(initialProblem)); break; case "backtracking": case "bts": case "bt": case "backtrackingsearch": problemSolvers.Add(new BacktrackingSolver(initialProblem)); break; case "gradientdescent": case "gd": case "gradient": problemSolvers.Add(new GradientDescentSolver(initialProblem)); break; default: // just do the solution for all of them problemSolvers.Add(new ArcConsistencySolver(initialProblem)); problemSolvers.Add(new BacktrackingSolver(initialProblem)); problemSolvers.Add(new GradientDescentSolver(initialProblem)); break; } foreach (CSPSolver solver in problemSolvers) { CSPSolution solution = solver.Solve(); PrintSolution(solution); } } }