private static void SolvePrzesuwanka(IList <IFringe <Node <byte[, ]> > > fringes, int problemSize) { Console.WriteLine("Przesuwanka {0} x {0}", problemSize); var przesuwanka = new Przesuwanka(problemSize); foreach (var fringe in fringes) { var watch = System.Diagnostics.Stopwatch.StartNew(); var node = TreeSearchWithQueue <byte[, ]> .Search(przesuwanka, fringe); watch.Stop(); if (node == null) { Console.WriteLine("Solution not found"); } else { Console.WriteLine("Solution:"); PrintTable(node.NodeState); var trace = node.ListOfNodes; Console.WriteLine("Number of steps: " + trace.Count); } var elapsedMs = watch.ElapsedMilliseconds; Console.WriteLine("\nUsed fringe: " + fringe.GetName()); Console.WriteLine("Time elapsed [ms]: " + elapsedMs); Console.WriteLine(new String('-', 40)); Console.WriteLine("\n"); } }
public void TestContstructorMethod() { byte[][] initial = new byte[3][] { new byte[] { 1, 0, 2 }, new byte[] { 3, 4, 5 }, new byte[] { 6, 7, 8 } }; byte[][] goal = new byte[3][] { new byte[] { 0, 1, 2 }, new byte[] { 3, 4, 5 }, new byte[] { 6, 7, 8 } }; Przesuwanka.Przesuwanka przesuwanka = new Przesuwanka.Przesuwanka(); }
public static void DisplaySolution(Przesuwanka przesuwanka, Node <byte[, ]> result, TimeSpan stoper) { Console.Beep(); Console.WriteLine(); showState(przesuwanka.InitialState); if (result == null) { Console.WriteLine("\nBrak rozwiązań!"); } else { Console.WriteLine("Rozwiązanie:"); showState(result.StateOfNode); Console.WriteLine("Czas poszukiwania rozwiązania: " + stoper); //zmienna z czasem); Console.WriteLine("Liczba kroków do znalezienia rozwiązania: " + przesuwanka.CountOfSteps); Console.WriteLine("\nLiczba kroków rozwiązania: " + result.StepsForSolution); Console.WriteLine("---------------------------------------------------------------------------"); przesuwanka.CountOfSteps = 0; } }
private static void Main() { Console.WriteLine("Podaj wymiar przesuwanki: "); var size = byte.Parse(Console.ReadLine()); Console.WriteLine("Podaj wymiar ilość przelosowań: "); var numberOfMixes = byte.Parse(Console.ReadLine()); byte[,] initial = { { 1, 8, 2 }, { 0, 4, 3 }, { 7, 6, 5 }, }; //var problemPrzesuwanka = new Przesuwanka(size,initial); var problemPrzesuwanka = new Przesuwanka(size, numberOfMixes); problemPrzesuwanka.showState(problemPrzesuwanka.InitialState); Node <byte[, ]> result; Stopwatch stoper = new Stopwatch(); TimeSpan elapsed = new TimeSpan(); Console.WriteLine("\nRozwiązywanie za pomocą BestFirstSearch (ilość płytek na złej pozycji)..."); var priorityQueueSolution = new PriorityQueueFringe <Node <byte[, ]> >(); stoper.Start(); result = TreeSearch <byte[, ]> .TreeSearchMethod(problemPrzesuwanka, priorityQueueSolution, Method.PriorityQueue); stoper.Stop(); elapsed = stoper.Elapsed; DisplaySolution(problemPrzesuwanka, result, elapsed); stoper.Reset(); Console.WriteLine( "\nRozwiązywanie za pomocą A* (ilość płytek na złej pozycji + odległość Manhattan dla każdej płytki od pozycji, gdzie powinna się znajdować + ilość kroków, im ich mniej tym stan jest bardziej obiecujący)..."); var AStarSolution = new PriorityQueueFringe <Node <byte[, ]> >(); stoper.Start(); result = TreeSearch <byte[, ]> .TreeSearchMethod(problemPrzesuwanka, AStarSolution, Method.AStar); stoper.Stop(); elapsed = stoper.Elapsed; DisplaySolution(problemPrzesuwanka, result, elapsed); stoper.Reset(); Console.WriteLine("\nRozwiązywanie za pomocą Stosu..."); var stackSolution = new StackFringe <Node <byte[, ]> >(); //DFS stoper.Start(); result = TreeSearch <byte[, ]> .TreeSearchMethod(problemPrzesuwanka, stackSolution, Method.Stack); stoper.Stop(); elapsed = stoper.Elapsed; stoper.Reset(); DisplaySolution(problemPrzesuwanka, result, elapsed); Console.WriteLine("\nRozwiązywanie za pomocą kolejki..."); var queueSolution = new QueueFringe <Node <byte[, ]> >(); //BFS stoper.Start(); result = TreeSearch <byte[, ]> .TreeSearchMethod(problemPrzesuwanka, queueSolution, Method.Queue); stoper.Stop(); elapsed = stoper.Elapsed; DisplaySolution(problemPrzesuwanka, result, elapsed); stoper.Reset(); }
private static void SolveProblems() { #region Cities initialization #region Cities initialization var Oradea = new City("Oradea", new Point(15, 59)); var Zerind = new City("Zerind", new Point(11, 51)); var Arad = new City("Arad", new Point(7, 43)); var Timisoara = new City("Timisoara", new Point(8, 29)); var Lugoj = new City("Lugoj", new Point(21, 23)); var Mehadia = new City("Mehadia", new Point(21, 15)); var Drobeta = new City("Drobeta", new Point(21, 7)); var Sibiu = new City("Sibiu", new Point(29, 37)); var Rimnicu = new City("Rimnicu Vilcea", new Point(33, 29)); var Craiova = new City("Craiova", new Point(37, 5)); var Fagaras = new City("Fagaras", new Point(47, 36)); var Pitesti = new City("Pitesti", new Point(50, 20)); var Giurgiu = new City("Giurgiu", new Point(60, 2)); var Bucharest = new City("Bucharest", new Point(65, 13)); var Neamt = new City("Neamt", new Point(66, 52)); var Urziceni = new City("Urziceni", new Point(75, 17)); var Iasi = new City("Iasi", new Point(78, 47)); var Vaslui = new City("Vaslui", new Point(85, 35)); var Hirsova = new City("Hirsova", new Point(89, 17)); var Eforie = new City("Eforie", new Point(95, 7)); #endregion #region Adding neighbours Oradea.AddNeighbour(Zerind, 71); Oradea.AddNeighbour(Sibiu, 151); Zerind.AddNeighbour(Oradea, 71); Zerind.AddNeighbour(Arad, 75); Arad.AddNeighbour(Zerind, 75); Arad.AddNeighbour(Sibiu, 140); Arad.AddNeighbour(Timisoara, 118); Timisoara.AddNeighbour(Arad, 118); Timisoara.AddNeighbour(Lugoj, 111); Lugoj.AddNeighbour(Timisoara, 111); Lugoj.AddNeighbour(Mehadia, 70); Mehadia.AddNeighbour(Lugoj, 70); Mehadia.AddNeighbour(Drobeta, 75); Drobeta.AddNeighbour(Mehadia, 75); Drobeta.AddNeighbour(Craiova, 120); Sibiu.AddNeighbour(Arad, 140); Sibiu.AddNeighbour(Oradea, 151); Sibiu.AddNeighbour(Fagaras, 99); Sibiu.AddNeighbour(Rimnicu, 80); Rimnicu.AddNeighbour(Sibiu, 80); Rimnicu.AddNeighbour(Pitesti, 97); Rimnicu.AddNeighbour(Craiova, 146); Craiova.AddNeighbour(Drobeta, 120); Craiova.AddNeighbour(Rimnicu, 146); Craiova.AddNeighbour(Pitesti, 138); Fagaras.AddNeighbour(Sibiu, 99); Fagaras.AddNeighbour(Bucharest, 211); Pitesti.AddNeighbour(Rimnicu, 97); Pitesti.AddNeighbour(Bucharest, 101); Pitesti.AddNeighbour(Craiova, 138); Giurgiu.AddNeighbour(Bucharest, 90); Bucharest.AddNeighbour(Pitesti, 101); Bucharest.AddNeighbour(Fagaras, 211); Bucharest.AddNeighbour(Urziceni, 85); Bucharest.AddNeighbour(Giurgiu, 90); Neamt.AddNeighbour(Iasi, 87); Urziceni.AddNeighbour(Bucharest, 85); Urziceni.AddNeighbour(Vaslui, 142); Urziceni.AddNeighbour(Hirsova, 98); Iasi.AddNeighbour(Neamt, 87); Iasi.AddNeighbour(Vaslui, 92); Vaslui.AddNeighbour(Iasi, 92); Vaslui.AddNeighbour(Urziceni, 142); Hirsova.AddNeighbour(Urziceni, 98); Hirsova.AddNeighbour(Eforie, 86); Eforie.AddNeighbour(Hirsova, 86); #endregion List <City> cities = new List <City> { Oradea, Zerind, Arad, Timisoara, Lugoj, Mehadia, Drobeta, Sibiu, Rimnicu, Craiova, Fagaras, Pitesti, Giurgiu, Bucharest, Neamt, Urziceni, Iasi, Vaslui, Hirsova, Eforie }; #endregion var przesuwankaInitial = Przesuwanka.MakeInitialState(3); SolveProblem <byte[, ]>(String.Format("Przesuwanka {0} x {0}", przesuwankaInitial.GetLength(0)), new Przesuwanka(przesuwankaInitial), PrintTable); var queensInitial = NQueens.MakeInitialState(8); SolveProblem <byte[]>(String.Format("{0} queens problem", queensInitial.Length), new NQueens(queensInitial), PrintTable); SolveProblem <City>("Romania map problem", new RomaniaMap(Arad, Bucharest, cities), city => Console.WriteLine(city.Name), PrintTrace); }