Example #1
0
        // Resuelve el puzle, en su configuración actual, utilizando la estrategia introducida como parámetro
        public List <Operator> Solve(SlidingPuzzle initialSetup, SlidingPuzzleSolver.Strategy strategy)
        {
            // Construimos el problema a partir del puzle que nos llega, que actúa como configuración inicial
            // No se indica función de coste de paso, con lo que se utilizará la que viene por defecto
            Problem problem = new Problem(initialSetup, aoFunction, tModel, gTest);

            // Se crea la búsqueda según la estrategia escogida
            Search search = null;

            switch (strategy)
            {
            case Strategy.BFS: search = new BreadthFirstSearch(); break;                // Por defecto se usa un GraphSearch

            case Strategy.DFS: search = new DepthFirstSearch(new GraphSearch()); break; // Por defecto se usa un GraphSearch
                // ... hay cabida para otras estrategias
            }

            // Se realiza la búsqueda sobre el problema
            List <Operator> operators = search.Search(problem);

            // Al terminar, se guardan las métricas resultantes
            metrics = search.GetMetrics();

            return(operators);
        }
Example #2
0
        /*
         * // Para copiar el puzle con el que este trabajando otro resolutor... raro
         * public SlidingPuzzleSolver(SlidingPuzzleSolver copyBoard) : this(copyBoard.getPuzle()) {
         *
         * }
         */


        // A ver si esto tiene que estar aquí o puede ser otra cosa (en el propio SlidingPuzzleManager)
        public List <Operator> Solve(SlidingPuzzle setup, SlidingPuzzleSolver.Strategy strategy)
        {
            // Construimos el problema a partir del puzle.
            //Pieza a pieza (el puzle tal cual será el initialSetup -lo mismo debería sacar el array-)



            //Aquí construimos el problema en base al puzle actual (la CONFIGURACIÓN del puzle actual), que no me gusta como es porque es el puzle con unas pocas cosas por encima!!! El dominio de problema no es un objeto
            Problem problem = new Problem(setup, oFunction, rFunction, goalTest); //Me molaría más que el problema no sea el solver, sino el puzle... pero bueno, quizá sea PROBLEM lo que debería llamarse el solver
            //public Problem(Object initialSetup, OperatorsFunction operatorsFunction, ResultFunction resultFunction, GoalTest goalTest)

            // AQUÍ CREARÍAMOS LA ESTRATEGIA, EL TIPO DE BÚSQUEDA, pidiéndole que use búsqueda de coste uniforme por ejemplo. Y lo llamamos

            Search search = null;

            switch (strategy)
            {
            case Strategy.BFS: search = new BreadthFirstSearch(); break;                //por defecto te crea un GraphSearch, no hay que meterle nada

            case Strategy.DFS: search = new DepthFirstSearch(new GraphSearch()); break; // NO ENTIENDO PORQUE ESTE CONSTRUCTOR NO TE HACE NADA POR DEFECTO, Y SOY YO QUE LE ESTOY METIENDO UN GRAPHSEARCH
                // ...
            }
            List <Operator> operators = search.Search(problem);

            metrics = search.GetMetrics();

            return(operators); // Deberíamos devolver también las métricas, seguramente
        }