Bienvenido de nuevo.
Vamos a meternos de lleno y a seguir codificando con nuestro método de construcción del gráfico, que es
un poco más complejo que esto porque tenemos que construir esa estructura multiramificada de todos los nodos.
No es sólo una gran línea larga y para eso vamos a utilizar.
Así que espero que estéis al día en el uso de la recursividad porque es algo complicado de entender, pero
es un concepto de programación muy, muy potente.
Y básicamente es cuando un método se llama a sí mismo.
Y así terminas con todas estas versiones del método corriendo una encima de la otra en la memoria.
Y en algún momento tienes que volver a salir de ellos.
Pero te voy a enseñar cómo hacerlo, así que no te asustes.
Así que vamos a crear un gráfico privado de construcción bool y va a tomar nuestro nodo padre.
Así que la lista de padres del nodo de.
Y hojas.
Una lista de acciones g que son acciones utilizables.
Y nuestro diccionario con nuestro objetivo en un diccionario que es un recuerde que es una cadena int y que tendrá
objetivo.
De acuerdo.
Así que este es Bill Groff.
Así que lo primero que vamos a hacer es bool ruta encontrada.
Es igual a falso porque en este momento no hemos encontrado un camino y tenemos que llevar la cuenta de si lo hemos hecho
o no.
Entonces vamos a hacer un cuatro por cada una de nuestras acciones.
Así que para cada acción g, acción en acciones utilizables que estamos pasando.
Y creo que lo he escrito mal, pero voy a mantener la ortografía incorrecta.
Y ahora si la acción es realizable, dado el estado de los padres.
Entonces esta acción es definitivamente una de las que buscamos.
Así que en este punto, vamos a ir al diccionario.
String int del estado actual es igual a un nuevo diccionario de string int, pero se está copiando del estado
padre.
Así que la primera vez que entramos aquí, la lista de estados, recuerde que vienen desde el primer nodo y ese primer
nodo es el nodo de partida y tiene una lista de todos los estados del mundo en él.
Así que la primera vez que entramos en este estado actual va a estar lleno de los estados del
mundo.
Ahora la idea con el estado actual es que a medida que vamos a través de todas nuestras acciones y construir nuestra rama, es que hacemos un seguimiento
de todo lo que se está satisfaciendo y todas las condiciones que están cambiando a medida que estamos pasando.
Así que es como hacer una especie de prueba previa a través de la rama y porque este estado actual tiene todos los
estados que se van a lograr antes de llegar a esa acción, ayuda a coincidir con ellos a medida
que avanzamos.
De acuerdo.
Así que tenemos este es estado padre alcanzable, tenemos nuestra corriente y ahora vamos a crear un para
cada uno.
Par de valor de la clave, que será.
Empareja la cadena y el int.
Así que los valores clave de los efectos en el efecto de la acción.
Y entonces, si el estado actual no contiene la clave en la clave de punto de efectos.
Estado actual.
No añadas.
Una clave fija y un valor de punto fijo.
Así que ahora el estado actual va a tener no sólo el estado del mundo, pero también estamos añadiendo a ella
los efectos de la acción actual.
Y luego, a medida que avancemos, se añadirán los efectos de la siguiente acción y la siguiente.
Así que es mantener esa lista realmente larga.
Muy bien.
Así que vamos a terminar nuestro bucle for each allí.
Entonces vamos a ir nodo y nodo es igual a nuevo nodo.
Así que ahora creamos el siguiente nodo a lo largo y su padre y el coste del padre más el coste de la acción.
Así que el valor del costo aquí, se puede ver que estamos recibiendo cada costo de las acciones individuales.
Pero a medida que nos movemos por todos nuestros nodos, se acumula y así es como podemos hacerlo.
Obtenga el nodo más barato en la parte superior del código aquí y saber que hemos encontrado el plan con sólo mirar
el último nodo en el final.
Eso es lo más barato.
De acuerdo.
Y también vamos a establecer el estado actual aquí.
Así que estamos dando a nuestro nuevo nodo o pasar a lo largo de esta acumulación de estados y luego también la acción.
Y entonces si.
Objetivo alcanzado, que aún tenemos que escribir, donde vamos a hacer coincidir el objetivo que buscamos
con el estado actual.
Por lo tanto, en algún punto del estado actual, si hemos logrado nuestro objetivo, entonces estamos de hecho terminados.
Así que deja añadir nuestro nodo.
Y luego encontró el camino es igual a la verdad.
Ahora bien, si no hemos encontrado un camino.
Así que lo que hacemos es ir al siguiente nodo.
Así que hemos creado nuestro siguiente nodo a lo largo ya aquí.
Pero ahora lo que vamos a hacer es crear un subconjunto de las acciones utilizables para sacar la acción actual que ya tenemos
en nuestro nodo.
Así que, en primer lugar, lista G subconjunto de acciones.
Un subconjunto de la acción de clase, otro método que todavía estamos por escribir acciones utilizables.
Acción.
Y esto va a sacar de nuestras acciones utilizables la acción para la que ya hemos creado un nodo en nuestro gráfico, de modo que
a medida que avanzamos por las ramas, esta lista de acciones utilizables se hace cada vez más pequeña,
lo que significa que no se puede crear una ruta circular en cualquier lugar.
Así que no vas a terminar con una especie de círculo interminable en el que estás buscando
para crear un plan.
Bien, entonces bola encontrada y eso va a ser igual a gráfico de construcción.
Y aquí puedes ver nuestra llamada recursiva donde ahora enviamos a través del siguiente nodo.
Todavía le damos nuestras hojas, pero en lugar de las acciones utilizables, todos ellos sólo estamos enviando a través
de nuestro subconjunto y de nuevo, estamos enviando a través de la meta.
Así que como el gráfico de factura sigue siendo llamado una y otra vez, estamos enviando el siguiente nodo y luego el
siguiente nodo, el siguiente nodo que se han unido.
Y este conjunto de acciones utilizables que se va reduciendo en subconjunto.
Y en algún momento si se encuentra.
Resulta ser verdadero de esto entonces el camino encontrado es igual a verdadero.
Y eso luego termina fuera de lo común.
Y podemos terminar nuestro si nuestros cuatro h en la parte superior.
Y antes de terminar nuestro método podemos devolver encontrado.
Camino de vuelta.
A nuestro planificador.
Bien, esa es nuestra función recursiva.
Eso es hacer todo el trabajo para construir nuestro gráfico.
Sí.
La última cosa que tenemos que hacer en este archivo de código y prometo, bueno, no es la última cosa.
Es la última cosa que tienes que hacer por ahora, antes de que podamos empezar
a crear algo es declarar estos dos métodos para usted quiere objetivo alcanzado y subconjunto de acción, ¿verdad?
Así que vamos a poner eso aquí debajo.
Así que asegúrate de que sigues dentro de tu clase pero fuera del método anterior.
Así que esto va a ser nuestro objetivo bool privado logrado y va a utilizar el diccionario de nuevo.
Sorpresa, sorpresa int.
Ve y luego al diccionario.
Estado INT.
Y aquí para cada par clave-valor que será de nuevo nuestra cadena e int.
Una G en la portería.
Así que el bucle a través de todos nuestros objetivos y asegurarse de que existen en los efectos.
Así que si.
El Estado no contiene la clave.
Tecla de punto G.
Entonces devolveremos false.
De lo contrario, si llegamos hasta el final del bucle y la comprobación, entonces estamos devolviendo
verdadero que somos capaces de satisfacer todos los objetivos.
Así que ese es un objetivo conseguido directamente en cuanto a la comprobación.
Y luego necesitamos nuestro subconjunto de acciones aquí arriba, que se deshace de la acción actual que acabamos de asignar
a un nodo fuera de las acciones utilizables.
Así que esto de nuevo será un privado.
Y la lista de.
G.
Lista de subconjuntos de acciones.
G Acción.
Acciones y medidas.
Quítenme.
Así que esa será la acción por la que pasaremos.
Lo buscamos mientras hacemos un bucle, y luego nos deshacemos de él fuera de este caso particular
de la lista.
Así que va a ser la lista.
Acción G.
Subconjunto.
Es igual a la nueva lista.
Acción G.
Y luego para cada acción g a en las acciones que hemos pasado.
Si encontramos el que vamos a quitar, así que si o si no lo encontramos debería decir si no acción.
Punto es igual a quitarme.
Así que el que tenemos que dejar de lado, entonces como que lo estamos ignorando.
Si no, el subconjunto añade a y pondremos la acción ahí.
Entonces, después de que hayamos hecho nuestro bucle, simplemente devolveremos nuestro subconjunto y eso básicamente es eliminar esa
acción de las acciones utilizables.
Bien, te aliviará saber que por ahora hemos terminado con nuestro planificador G.
Justo a continuación podemos empezar a hacer algunas acciones y empezar a pulsar ese botón de reproducción en la unidad para ver
las cosas que funcionan y cómo funcionan y luego empezar a construir en él desde allí.