Upload
others
View
16
Download
0
Embed Size (px)
Citation preview
Índice de Contenidos :.[Contenido] 1. Intro 2. Rutas 3. Grupos 4. Apuntando 5.Juego
Sesión 5 :: Transp. 2
Introducción :: 1Arquitectura:: 1.1
Máquina de Estados Finitos:: 1.2 Sistemas de Reglas :: 1.3
Búsqueda de Rutas:: 2Algoritmo A*:: 2.1
Movimiento de Grupos :: 3Boids :: 3.1
Apuntando al objetivo :: 4Propuesta de trabajo :: 5
Inteligencia Artificial en los juegos :.
Movimiento de masa
Acciones Simples
Indivíduos, Actitudes
Búsqueda de rutas
Razonamiento
Contenido [1. Intro] 2. Rutas 3. Grupos 4. Apuntando 5.Juego
Sesión 5 :: Transp. 3
Estructura del Sistema de IA :.Sistema de Sensores
INPUT
Memoria de Trabajo
Sistema de ActuadoresOUTPUT
Núcleo de Razonamientoy Análisis
Contenido [1. Intro] 2. Rutas 3. Grupos 4. Apuntando 5.Juego
Sesión 5 :: Transp. 4
Ténicas más habituales :.
Máquina de Estados Finitos (FSM)
Q0Q1
Q2
a0/oO
a1/o2
a0/o1
Componentes
Estado Transición Entrada Acción
Contenido [1. Intro] 2. Rutas 3. Grupos 4. Apuntando 5.Juego
Sesión 5 :: Transp. 5
Máquina de Estados Finitos :.
ESTADO=ID_INICIALENTRADA=Sensores()While not TERMINAR:
[ACTUALIZACION]ENTRADA=Sensores()
● Bucle principal:
● La actualización de la situación
● Captación de los ls sensores.
A={Conjunto de Estado Q, Alfabeto Entrada A,Estado inicial Q0 , Función de Transición F:QxA->Q ,Funcion de Accion S:QxA->O}
Contenido [1. Intro] 2. Rutas 3. Grupos 4. Apuntando 5.Juego
Sesión 5 :: Transp. 6
Máquina de Estados Finitos:.if ESTADO==ID_ESTADO:
[ACCIONES POR DEFECTO]if ENTRADA==ID_ENTRADA0:
[ACCIONES ESPECIFICAS]ESTADO=ID_SIGUIENTE
elsif ENTRADA==ID_ENTRADA1:[ACCIONES ESPECIFICAS]ESTADO=ID_SIGUIENTE
elsif ........................
elsif ESTADO==ID_ESTADO:[ACCIONES POR DEFECTO]if ENTRADA==ID_ENTRADA0:
[ACCIONES ESPECIFICAS]ESTADO=ID_SIGUIENTE
elsif ENTRADA==ID_ENTRADA1:[ACCIONES ESPECIFICAS]ESTADO=ID_SIGUIENTE
elsif ........................
● Una posible implementación de la fase de [ACTUALIZACION]
● Entrada será la salida de nuestro sistema de sensores
●ESTADO, En un principio tendrá el valor del estado inicial.
Contenido [1. Intro] 2. Rutas 3. Grupos 4. Apuntando 5.Juego
Sesión 5 :: Transp. 7
FSM Ejemplo :.
● Un enemigo está fuera en un espacio abierto y sin obstáculos.
● Tiene definidas unas localizaciones que patrulla cíclicamente.
● El enemigo se activa si cuando entras en línea de visión.
● Si te ve, cambia su forma de actuar.
● Lleva una espada.
● Si se estable un contacto , te exortará a pararte y te atacará
Contenido [1. Intro] 2. Rutas 3. Grupos 4. Apuntando 5.Juego
Sesión 5 :: Transp. 8
FSM Ejemplo :.
BuscarLoc
EstarLoc
PreparadoBatalla
Lucha
El jugador a muerto o no lo ve
El jugador a muerto o no lo ve
Visto
Dist>2
Dist<2
Localización alcan
zada
Al in
ead
o?
Contenido [1. Intro] 2. Rutas 3. Grupos 4. Apuntando 5.Juego
Sesión 5 :: Transp. 9
Sistemas de Reglas :.
Sistemas de Reglas (RS)
SI se puede verificar que
[...]ENTONCES
se hace [...]
HECHOSY
SENSORES
REGLAS
RAZONAMIENTO
Contenido [1. Intro] 2. Rutas 3. Grupos 4. Apuntando 5.Juego
Sesión 5 :: Transp. 10
Entornos simbólicos de reglas :.
Ver ClipsEntorno para Sistemas Expertos
(defrule <Nombre>(<antecedente 1>).................(<antecedente n>)=>(<consecuente 1>).................(<consecuente m>)
)
Interprete empotradoLenguaje de Script
Age of Empires
Contenido [1. Intro] 2. Rutas 3. Grupos 4. Apuntando 5.Juego
Sesión 5 :: Transp. 11
Búsqueda de Rutas:.
A
B¿ Como ir de A a B ?
Contenido 1. Intro [2. Rutas] 3. Grupos 4. Apuntando 5.Juego
Sesión 5 :: Transp. 12
Búsqueda de rutas A* :.
o
7
x
654321
7
0
654321
0 Objetivo
Ir de la casilla O (5,3)
a la casilla x (1,6) ¿Como conseguirlo ?
Con movimientos válidos
01
2
345
6
7
¿Vale cualquier solución?
NO
Contenido 1. Intro [2. Rutas] 3. Grupos 4. Apuntando 5.Juego
Sesión 5 :: Transp. 13
Bolsa de casillas Visitadas vacia
Bolsa de casillas No Visitadas con la posición inicial
Mientras no este vacia la Bolsa de No Visitados y no hemos llegado
Ordenar las casillas de No Visitadas según la valoración
Tomo la mejor casilla
La quito de No Visitadas
Si final entornces ya hemos terminado
Para todas las casillas a donde puedo llegar desde ésta
Si no están en visitados
Calcular su valor, indicar su ancestro
introducirlo en la Bolsa de No Visitadas
Algoritmo A* :.Contenido 1. Intro [2. Rutas] 3. Grupos 4. Apuntando 5.Juego
Sesión 5 :: Transp. 14
Construir una ruta:.
Inicio
Meta
n'
....
...n
Acc
ión
0A
cción 7
(x ,y )i i
(x ,y )m m
(x -1,y -1 )n' n'
(x ,y -1 )n' n'
8,63cmcamino
Contenido 1. Intro [2. Rutas] 3. Grupos 4. Apuntando 5.Juego
Sesión 5 :: Transp. 15
Valorar una ruta:.
Inicio Meta
9,77cm
10,07cmn
g(n)h(n)
20,19cmf(n)
n'n
....
8,83cmc(n',n)
g(n) g(n') c(n',n)= +
Contenido 1. Intro [2. Rutas] 3. Grupos 4. Apuntando 5.Juego
Sesión 5 :: Transp. 16
Ejemplo:.
X
O
g x1, y1,x2, y2=x1−x22y1−y2
2
h x1,y1, x2,y2=∣x1−x2∣∣y1−y2∣
f=g+h , g ,h
Contenido 1. Intro [2. Rutas] 3. Grupos 4. Apuntando 5.Juego
Sesión 5 :: Transp. 17
Ejemplo:.
X
7,0,7
Contenido 1. Intro [2. Rutas] 3. Grupos 4. Apuntando 5.Juego
Sesión 5 :: Transp. 18
Ejemplo:.
8'8,7'8,1 7'4,7'4,0 8'8,7'8,1
8'8,6'8,2 7'4,6'4,1 8'8,6'8,2
7'4,5'4,2 8'8,5'8,3
8'4,1'4,7 7'4,4'4,3 9'4,5'4,4
9,1,8 7,0,7 7,1,6 8,3,5 10'8,5'8,5
10'4,1'4,9 9,1,8 8'4,1'4,7 9'4,3'4,6 10'4,5'4,5
Contenido 1. Intro [2. Rutas] 3. Grupos 4. Apuntando 5.Juego
Sesión 5 :: Transp. 19
Ejemplo de implementación :.
Ver Busqueda.pyAlgoritmo de Búsqueda de Rutas
Class Nodo: def __init__(self,punto,g,h,f,padre=None): self.pos=punto self.g=g self.h=h self.f=f self.padre=padre self.id=self.genNum(self.pos)
● Nos centraremos primero en los Nodos que compondrán el árbol de búsqueda.
Contenido 1. Intro [2. Rutas] 3. Grupos 4. Apuntando 5.Juego
Sesión 5 :: Transp. 20
Ejemplo de implementación :.
class Nodo: def __init__(self,punto,g,h,f,padre=None): def genNum(self,pos): # Genera un def __cmp__(self,dat): # Establece un orden def strVal(self): def strPos(self): def __str__(self): def __repr__(self): def opciones(self,terreno,inicio,final): def ancestros(self):
Contenido 1. Intro [2. Rutas] 3. Grupos 4. Apuntando 5.Juego
Sesión 5 :: Transp. 21
Ejemplo de implementación :.
def opciones(self,terreno,inicio,final):LResult=[]for dx,dy in VectMov:
x,y=(self.pos[0]+dx),(self.pos[1]+dy)if not (x,y) in terreno:
g1=FuncG(inicio,(x,y))h1=FuncH((x,y),final)f1=FuncF(g1,h1)n=Nodo((x,y),g1,h1,f1,self)LResult.append(n)
return LResultdef menor(dic): m=dic.keys()[0] for (key,n) in dic.iteritems(): if n.f<dic[m].f: m=key return m
Contenido 1. Intro [2. Rutas] 3. Grupos 4. Apuntando 5.Juego
Sesión 5 :: Transp. 22
Ejemplo de implementación :.
Def BusquedaAEstrella(terreno,ini,fin): Visitados,NoVisitados={},{} n=Nodo(ini,0,FuncH(ini,fin),FuncH(ini,fin),None) NoVisitados[ini]=n terminado=0 while (len(NoVisitados.keys())>0) and (not terminado): casilla=menor(NoVisitados) n=NoVisitados[casilla] del(NoVisitados[casilla]) if n.pos==fin: terminado=1 break Visitados[n.pos]=n lOpciones=n.opciones(terreno,ini,fin) for m in lOpciones: if not Visitados.has_key(m.pos): NoVisitados[m.pos]=m
.......................
Contenido 1. Intro [2. Rutas] 3. Grupos 4. Apuntando 5.Juego
Sesión 5 :: Transp. 23
Movimiento de Grupos :.
Boids
Craig W.Reynolds (1990)
http://www.red3d.com/cwr/boidshttp://www.cse.unsw.edu.au/~conradp/boids/pseudocode.html
Contenido 1. Intro 2. Rutas [3. Grupos] 4. Apuntando 5.Juego
Sesión 5 :: Transp. 24
Las tres reglas:.
CohesiónSeparación
Alineamiento
Contenido 1. Intro 2. Rutas [3. Grupos] 4. Apuntando 5.Juego
Sesión 5 :: Transp. 25
Ejemplo de codificación :.
Codigo de Todd Warner: [email protected]
Lista de individuos con [ pt, vel, objNum ]
pt=[ x, y, z ]
vel=[ dx, dy, dz ]objNum
Contenido 1. Intro 2. Rutas [3. Grupos] 4. Apuntando 5.Juego
Sesión 5 :: Transp. 26
Ejemplo de codificación de las reglas:.
Codigo de Todd Warner: [email protected]
def Rule1(self, b): pc = [0.0, 0.0, 0.0] for each in self.theList: if b != each: pc = translate(pc, each[0])
fact = float(len(self.theList)) - 1.0 fact = 1.0/fact pc = scale(pc, fact)
pc = subVec(pc, b[0])fact = 1.0/100.0 # Proportionpc = scale(pc, fact)
return pc
Cohesión
Contenido 1. Intro 2. Rutas [3. Grupos] 4. Apuntando 5.Juego
Sesión 5 :: Transp. 27
Ejemplo de codificación de las reglas:.
Codigo de Todd Warner: [email protected]
def Rule2(self, b): c = [0.0, 0.0, 0.0] for each in self.theList: if b != each: diffPos = subVec(b[0], each[0]) dist = calcMagnitude(diffPos) if dist < NEIGHBOR_THRESH: c = subVec(c, diffPos) return c
Separación
Contenido 1. Intro 2. Rutas [3. Grupos] 4. Apuntando 5.Juego
Sesión 5 :: Transp. 28
Ejemplo de codificación de las reglas:.
Codigo de Todd Warner: [email protected]
def Rule3(self, b): pv = [0.0, 0.0, 0.0] for each in self.theList: if b != each: pv = translate(pv, each[1]) fact = float(len(self.theList)) - 1.0 fact = 1.0/fact pv = scale(pv, fact) fact = 1.0/8.0 pv = subVec(pv, b[1]) pv = scale(pv, fact) . return pv
Alineación
Contenido 1. Intro 2. Rutas [3. Grupos] 4. Apuntando 5.Juego
Sesión 5 :: Transp. 29
Ejemplo de codificación de las reglas:.
Codigo de Todd Warner: [email protected]
def MoveAll(self): self.r1Tog = self.ScatterLogic() for each in self.theList: vCntBias = scale(self.Rule1(each), float(self.r1Tog)) vBckOff = scale(self.Rule3(each), float(self.r3Tog)) vAvVBias = scale(self.Rule2(each), float(self.r2Tog)) vBound = self.BoundPosition(each) each[1] = translate(each[1], vCntBias) each[1] = translate(each[1], vBckOff) each[1] = translate(each[1], vAvVBias) each[1] = translate(each[1], vBound) each[1] = self.LimitVelocity(each) each[0] = translate(each[1], each[0])
Contenido 1. Intro 2. Rutas [3. Grupos] 4. Apuntando 5.Juego
Sesión 5 :: Transp. 30
Contenido 1. Intro 2. Rutas 3. Grupos [4. Apuntando] 5.Juego
Apuntando al objetivo:.
MiPos=[ x, z]
MiAng
ObjPos=[ x, z]
X=MiPos.x+cos(MiAng)*tZ=MiPos.z+cos(MiAng)*t
F(X,Z)=(X-MiPos.x)/cos(MiAng)- (Z-MiPos.z)/sin(MiAng)=0
- +
Sesión 5 :: Transp. 31
from math import *class Punto2:
def __init__(self,x,z):self.x,self.z=x,z
def girar(MiPos,MiAng,Ob):c,s=cos(MiAng),sin(MiAng)if (c==0):
c=0.001if (s==0):
s=0.001f=(Ob.x-MiPos.x)/c-(Ob.z-MiPos.z)/sif f>0:
return 1 # Derechaelsif f<0:
return -1 # Izquierdaelse:
return 0 # Ok
Contenido 1. Intro 2. Rutas 3. Grupos [4. Apuntando] 5.Juego
Apuntando al objetivo:.
Sesión 5 :: Transp. 32
En el espacio 3D:.
AngD-I
AngA-B
MiPos=[ x, y,z]
ObPos=[ x, y,z] X=cos(AngA-B)*cos(AngD-I)y=sin(AngA-B)z=cos(AngA-B)*sin(AngD-I)
fdw=[cos(AngD-I),0,sin(AngD-I)]fwd=fwd+MiPosup=[0,1,0]up=up+MiPosPlanoVert=[MiPos,fwd,up]
fdw=[cos(AngA-B)*cos(AngD-I),sin(AngA-B),cos(AngA-B)*sin(AngD-I)]fwd=fwd+MiPosleft=[cos(AngD-I+PI/2),0,sin(AngD-I+PI/2)]left=up+MiPosPlanoHoriz=[MiPos,fwd,left]
PlanoVert PlanoHoriz
Contenido 1. Intro 2. Rutas 3. Grupos [4. Apuntando] 5.Juego
Sesión 5 :: Transp. 33
Contenido 1. Intro 2. Rutas 3. Grupos 4. Apuntando [ 5.Juego]
Programamos algo?:.
● Un tablero 2D con parte inaccesibles
● Dos equipos uno verde y otro azul
● Equipo con unos componentes y un lider
● Se puede dirigir a un equipo hacia un lugar
● Si un componente está cerca del enemigo
● Persiguir y luchar
Con python y pygame?
Sesión 5 :: Transp. 34