+100
+230
/JavierLuna
blog.thequietdeveloper.com
@javierlunamolina
Pathfinding
Grafos 101
Se componen de:
¿Os suena? ¡Claro que sí!
Aplicándolo a videojuegos..
Dibujamos los nodos
Los conectamos con aristas
¡Habemus grafo!
Solución obvia...
Pero no para la máquina
YOU ARE HERE
Dijkstra algorithm: Exists
My CPU:
pip install networkx
import networkx as nx
from networkx.algorithms.shortest_paths.weighted import dijkstra_path
from networkx.algorithms.shortest_paths.a_star import astar_path
G = nx.Graph()
G.add_node(1) # Los nodos pueden ser cualquier objeto hasheable
G.add_node(2)
G.add_node(3)
G.add_edge(1, 2)
G.add_edge(2, 3)
dijkstra_path(G, 1, 3)
def heuristic(possible_node, solution):
return abs(possible_node - solution)
astar_path(G, 1, 3, heuristic)
Zero-sum
Un juego de suma de ceros es aquel en el que la ganancia de un jugador se equilibra con la pérdida del otro, y viceversa.
En resumen: "Si yo gano tú pierdes"
Empezamos la partida
Pongo mi X
X
Minmax
Minmax-vision
Minmax
Nuestro turno (IA): max
Turno oponente: min
X
O
O
Nuestro tablero
O
X
X
X
X
X
O
O
O
Generación
X
X
X
O
O
O
O
X
X
X
O
O
O
O
X
X
X
O
O
O
O
+ 10
Generación
X
X
X
O
O
O
O
X
X
X
O
O
O
O
X
X
X
O
O
O
O
X
X
- 10
Nuestro turno (max)
+10
+10
-10
-10
-10
Max
Min
Max
Su turno (min)
+10
+10
-10
-10
-10
Max
Min
Max
+10
Nuestro turno (max)
+10
+10
-10
-10
-10
Max
Min
Max
+10
-10
-10
Solución
+10
+10
-10
-10
-10
Max
Min
Max
+10
-10
-10
+10
X
X
X
O
O
O
O
Esto no escala :(
X
X
X
O
O
O
O
Heurísticas al rescate: No evalúes todo el árbol
Hmmm...
HMMMMM...
Estos...CREO... que pintan bien
NEAT
"NeuroEvolution of Augmenting Topologies"
Algoritmos genéticos
Algoritmos genéticos
NEAT bird
Inputs:
Output: Volar/No volar
Fitness: Número de tuberías que hemos atravesado
+100
???