private static void CheckResultsOptimality() { int iterations = 4; int optimalBfsLenghtCount = 0; int optimalAStarLenghtCount = 0; var pathLengthCalculator = new PathLengthCalculator(); Parallel.For(0, iterations, _ => { Board board = new RandomBoardGenerator().Generate(Board.FinalBoard, 1000); var bfsResult = new BfsSolver().Solve(board); var aStarResult = new AStarSolver().Solve(board); var optimalResult = new AStarWithoutLoopsSolver().Solve(board); int bfsResultLenght = pathLengthCalculator.CalculatePathLenght(bfsResult.FinalState); int aStarResultLenght = pathLengthCalculator.CalculatePathLenght(aStarResult.FinalState); int optimalResultLenght = pathLengthCalculator.CalculatePathLenght(optimalResult.FinalState); if (bfsResultLenght == optimalResultLenght) { Interlocked.Increment(ref optimalBfsLenghtCount); } if (aStarResultLenght == optimalResultLenght) { Interlocked.Increment(ref optimalAStarLenghtCount); } }); Console.WriteLine($"Iterations: {iterations}"); Console.WriteLine($"Optimal results from BFS: {optimalBfsLenghtCount}"); Console.WriteLine($"Optimal results from AStar: {optimalAStarLenghtCount}"); }
private static void CheckSolver(ISolver solver, int boardRandomisation = 1000) { RandomBoardGenerator randomBoardGenerator = new RandomBoardGenerator(); Board startBoard = randomBoardGenerator.Generate(Board.FinalBoard, boardRandomisation); EightPuzzleResult result = solver.Solve(startBoard); new StatePrinter().Print(result.FinalState); Console.WriteLine($"Total visited nodes: {result.VisitedNodesCount}"); }