Índice de contenidosÍndice de contenidos :. [contenido] 1. intro 2. rutas 3. grupos 4. apuntando...

34

Upload: others

Post on 14-Aug-2021

4 views

Category:

Documents


0 download

TRANSCRIPT

Page 1: Índice de ContenidosÍndice de Contenidos :. [Contenido] 1. Intro 2. Rutas 3. Grupos 4. Apuntando 5.Juego Sesión 5 :: Transp. 2 Introducción :: 1
Page 2: Índice de ContenidosÍndice de Contenidos :. [Contenido] 1. Intro 2. Rutas 3. Grupos 4. Apuntando 5.Juego Sesión 5 :: Transp. 2 Introducción :: 1

Í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

Page 3: Índice de ContenidosÍndice de Contenidos :. [Contenido] 1. Intro 2. Rutas 3. Grupos 4. Apuntando 5.Juego Sesión 5 :: Transp. 2 Introducción :: 1

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 

Page 4: Índice de ContenidosÍndice de Contenidos :. [Contenido] 1. Intro 2. Rutas 3. Grupos 4. Apuntando 5.Juego Sesión 5 :: Transp. 2 Introducción :: 1

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 

Page 5: Índice de ContenidosÍndice de Contenidos :. [Contenido] 1. Intro 2. Rutas 3. Grupos 4. Apuntando 5.Juego Sesión 5 :: Transp. 2 Introducción :: 1

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 

Page 6: Índice de ContenidosÍndice de Contenidos :. [Contenido] 1. Intro 2. Rutas 3. Grupos 4. Apuntando 5.Juego Sesión 5 :: Transp. 2 Introducción :: 1

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 

Page 7: Índice de ContenidosÍndice de Contenidos :. [Contenido] 1. Intro 2. Rutas 3. Grupos 4. Apuntando 5.Juego Sesión 5 :: Transp. 2 Introducción :: 1

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 

Page 8: Índice de ContenidosÍndice de Contenidos :. [Contenido] 1. Intro 2. Rutas 3. Grupos 4. Apuntando 5.Juego Sesión 5 :: Transp. 2 Introducción :: 1

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 

Page 9: Índice de ContenidosÍndice de Contenidos :. [Contenido] 1. Intro 2. Rutas 3. Grupos 4. Apuntando 5.Juego Sesión 5 :: Transp. 2 Introducción :: 1

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 

Page 10: Índice de ContenidosÍndice de Contenidos :. [Contenido] 1. Intro 2. Rutas 3. Grupos 4. Apuntando 5.Juego Sesión 5 :: Transp. 2 Introducción :: 1

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 

Page 11: Índice de ContenidosÍndice de Contenidos :. [Contenido] 1. Intro 2. Rutas 3. Grupos 4. Apuntando 5.Juego Sesión 5 :: Transp. 2 Introducción :: 1

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 

Page 12: Índice de ContenidosÍndice de Contenidos :. [Contenido] 1. Intro 2. Rutas 3. Grupos 4. Apuntando 5.Juego Sesión 5 :: Transp. 2 Introducción :: 1

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 

Page 13: Índice de ContenidosÍndice de Contenidos :. [Contenido] 1. Intro 2. Rutas 3. Grupos 4. Apuntando 5.Juego Sesión 5 :: Transp. 2 Introducción :: 1

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 

Page 14: Índice de ContenidosÍndice de Contenidos :. [Contenido] 1. Intro 2. Rutas 3. Grupos 4. Apuntando 5.Juego Sesión 5 :: Transp. 2 Introducción :: 1

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 

Page 15: Índice de ContenidosÍndice de Contenidos :. [Contenido] 1. Intro 2. Rutas 3. Grupos 4. Apuntando 5.Juego Sesión 5 :: Transp. 2 Introducción :: 1

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 

Page 16: Índice de ContenidosÍndice de Contenidos :. [Contenido] 1. Intro 2. Rutas 3. Grupos 4. Apuntando 5.Juego Sesión 5 :: Transp. 2 Introducción :: 1

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 

Page 17: Índice de ContenidosÍndice de Contenidos :. [Contenido] 1. Intro 2. Rutas 3. Grupos 4. Apuntando 5.Juego Sesión 5 :: Transp. 2 Introducción :: 1

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 

Page 18: Índice de ContenidosÍndice de Contenidos :. [Contenido] 1. Intro 2. Rutas 3. Grupos 4. Apuntando 5.Juego Sesión 5 :: Transp. 2 Introducción :: 1

Ejemplo:.

X

7,0,7

Contenido 1. Intro   [2. Rutas]  3. Grupos  4. Apuntando 5.Juego

Sesión 5 :: Transp. 18 

Page 19: Índice de ContenidosÍndice de Contenidos :. [Contenido] 1. Intro 2. Rutas 3. Grupos 4. Apuntando 5.Juego Sesión 5 :: Transp. 2 Introducción :: 1

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 

Page 20: Índice de ContenidosÍndice de Contenidos :. [Contenido] 1. Intro 2. Rutas 3. Grupos 4. Apuntando 5.Juego Sesión 5 :: Transp. 2 Introducción :: 1

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 

Page 21: Índice de ContenidosÍndice de Contenidos :. [Contenido] 1. Intro 2. Rutas 3. Grupos 4. Apuntando 5.Juego Sesión 5 :: Transp. 2 Introducción :: 1

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 

Page 22: Índice de ContenidosÍndice de Contenidos :. [Contenido] 1. Intro 2. Rutas 3. Grupos 4. Apuntando 5.Juego Sesión 5 :: Transp. 2 Introducción :: 1

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 

Page 23: Índice de ContenidosÍndice de Contenidos :. [Contenido] 1. Intro 2. Rutas 3. Grupos 4. Apuntando 5.Juego Sesión 5 :: Transp. 2 Introducción :: 1

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 

Page 24: Índice de ContenidosÍndice de Contenidos :. [Contenido] 1. Intro 2. Rutas 3. Grupos 4. Apuntando 5.Juego Sesión 5 :: Transp. 2 Introducción :: 1

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 

Page 25: Índice de ContenidosÍndice de Contenidos :. [Contenido] 1. Intro 2. Rutas 3. Grupos 4. Apuntando 5.Juego Sesión 5 :: Transp. 2 Introducción :: 1

Las tres reglas:.

CohesiónSeparación

Alineamiento

Contenido 1. Intro   2. Rutas  [3. Grupos]  4. Apuntando 5.Juego

Sesión 5 :: Transp. 25 

Page 26: Índice de ContenidosÍndice de Contenidos :. [Contenido] 1. Intro 2. Rutas 3. Grupos 4. Apuntando 5.Juego Sesión 5 :: Transp. 2 Introducción :: 1

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 

Page 27: Índice de ContenidosÍndice de Contenidos :. [Contenido] 1. Intro 2. Rutas 3. Grupos 4. Apuntando 5.Juego Sesión 5 :: Transp. 2 Introducción :: 1

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 

Page 28: Índice de ContenidosÍndice de Contenidos :. [Contenido] 1. Intro 2. Rutas 3. Grupos 4. Apuntando 5.Juego Sesión 5 :: Transp. 2 Introducción :: 1

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 

Page 29: Índice de ContenidosÍndice de Contenidos :. [Contenido] 1. Intro 2. Rutas 3. Grupos 4. Apuntando 5.Juego Sesión 5 :: Transp. 2 Introducción :: 1

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 

Page 30: Índice de ContenidosÍndice de Contenidos :. [Contenido] 1. Intro 2. Rutas 3. Grupos 4. Apuntando 5.Juego Sesión 5 :: Transp. 2 Introducción :: 1

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 

Page 31: Índice de ContenidosÍndice de Contenidos :. [Contenido] 1. Intro 2. Rutas 3. Grupos 4. Apuntando 5.Juego Sesión 5 :: Transp. 2 Introducción :: 1

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 

Page 32: Índice de ContenidosÍndice de Contenidos :. [Contenido] 1. Intro 2. Rutas 3. Grupos 4. Apuntando 5.Juego Sesión 5 :: Transp. 2 Introducción :: 1

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 

Page 33: Índice de ContenidosÍndice de Contenidos :. [Contenido] 1. Intro 2. Rutas 3. Grupos 4. Apuntando 5.Juego Sesión 5 :: Transp. 2 Introducción :: 1

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 

Page 34: Índice de ContenidosÍndice de Contenidos :. [Contenido] 1. Intro 2. Rutas 3. Grupos 4. Apuntando 5.Juego Sesión 5 :: Transp. 2 Introducción :: 1

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