public async Task <SolutionSearchResult> SolveAsync(Board initialBoard, EAlgorithm algorithm, EHeuristicFunction heuristicFunction, CancellationToken cancellationToken) { return(await Task.Run(() => { return Solve(initialBoard, algorithm, heuristicFunction, cancellationToken); }, cancellationToken)); }
public SolutionSearchResult Solve(Board kInitialBoard, EAlgorithm eAlgorithmOption, EHeuristicFunction eHeuristicFunctionOption, CancellationToken kCancellationToken) { EightPuzzleProblem kProblem = new EightPuzzleProblem(kInitialBoard); ISearch <EightPuzzleState> kSearch = CreateSearch(kInitialBoard, eAlgorithmOption, eHeuristicFunctionOption); Stopwatch kStopwatch = new Stopwatch(); kStopwatch.Start(); List <EightPuzzleState> kResult = kSearch.Search(kProblem, kCancellationToken).ToList(); kStopwatch.Stop(); return(new SolutionSearchResult(kResult.Any(), kResult, kStopwatch.Elapsed)); }
private ISearch <EightPuzzleState> CreateSearch(Board kInitialBoard, EAlgorithm eAlgorithmOption, EHeuristicFunction eHeuristicFunctionOption) { switch (eAlgorithmOption) { case EAlgorithm.A_STAR: return(new AStarSearch <EightPuzzleState>(GetHeuristicFunction(kInitialBoard, eHeuristicFunctionOption))); case EAlgorithm.RECURSIVE_BEST_FIRST_SEARCH: return(new RecursiveBestFirstSearch <EightPuzzleState>(GetHeuristicFunction(kInitialBoard, eHeuristicFunctionOption))); case EAlgorithm.ITERATIVE_DEEPENING_SEARCH: return(new IterativeDeepeningSearch <EightPuzzleState>()); case EAlgorithm.BREADTH_FIRST_SEARCH: return(new BreadthFirstSearch <EightPuzzleState>()); default: throw new ArgumentOutOfRangeException(nameof(eAlgorithmOption), eAlgorithmOption, null); } }
private void radioButtonAlgorithm_CheckedChanged(object sender, EventArgs e) { if (radioButtonABase.Checked) { algorithmType = EAlgorithm.Base; return; } if (radioButtonAInit.Checked) { algorithmType = EAlgorithm.Weight; return; } if (radioButtonAConstr.Checked) { algorithmType = EAlgorithm.Constriction; return; } }