Documentos de Académico
Documentos de Profesional
Documentos de Cultura
Tesis de grado.
Título:
“Metodología para el desarrollo de sistemas multi-agente con
ejemplo del desarrollo de una inteligencia artificial para aplicar en
el juego S.P.I.A.-Wari”
Mesa Examinadora:
Prof. Ing.
Prof. Ing.
Prof. Ing.
Año 2016
Historia de Revisión del Documento
7. Implementación_______________________________________________________123
7.1. Introducción_____________________________________________________________123
7.1.1. Propósito de la sección_________________________________________________________123
7.1.2. Alcance de la sección___________________________________________________________123
7.2. Desarrollo de la IA para el juego SPIA-Wari____________________________________123
7.2.1. Introducción__________________________________________________________________123
8. Conclusiones__________________________________________________________123
Referencias/Bibliografía_____________________________________________________125
9. Anexos_______________________________________________________________128
9.1. Códigos de transmisión.___________________________________________________128
9.2. Reglas del juego WARI.____________________________________________________130
9.2.1. Material_____________________________________________________________________130
9.2.2. Objetivo_____________________________________________________________________131
9.2.3. Reglas_______________________________________________________________________131
9.2.4. Tablero______________________________________________________________________131
9.2.5. Movimiento__________________________________________________________________131
9.2.6. Capturas_____________________________________________________________________132
9.2.7. Reglas Suplementarias__________________________________________________________133
9.2.8. Fin de la Partida_______________________________________________________________134
9.2.9. Breves notas sobre técnica y estrategia____________________________________________135
Resumen
La idea del proyecto es, en primer lugar dar una introducción teórica de los sistemas
multi-agente, a continuación se analizarán las diferentes metodologías de desarrollo
de sistemas multi-agente. Siguiendo una de ellas, se diseñará una aplicación de
inteligencia artificial para el sistema SPIA-Wari (desarrollado como trabajo práctico
final de pregrado). Luego, el presente proyecto es una consecuencia de los
problemas hallados para el desarrollo del proyecto de pregrado desarrollado en el
año 2014.
Palabras clave
IA Inteligencia Artificial
GPL La GNU GPL (General Public License o licencia pública general) es una
licencia creada por la Free Software Foundation a mediados de los 80,
y está orientada principalmente a proteger la libre distribución,
modificación y uso de software. Su propósito es declarar que el
software cubierto por esta licencia es software libre y protegerlo de
intentos de apropiación que restrinjan esas libertades a los usuarios.
http://www.gnu.org/copyleft/gpl.html
http://www.garaitia.com/new/gpl-spanish.php
Software Software libre (en inglés free software) es el software que, una vez
Libre obtenido, puede ser usado, copiado, estudiado, modificado y
redistribuido libremente. El software libre suele estar disponible
gratuitamente, pero no hay que asociar software libre a software
gratuito, aunque conserve su carácter de libre, puede ser vendido.
http://www.fsfla.org/
Agujero Posición del tablero. Son las casillas en dónde se desarrolla el juego.
Almacén Posiciones extremas del tablero que almacenan las fichas ganadas por
cada uno de los jugadores
1. Introducción
Inteligencia: Los sistemas son cada vez más complejos y, muchas veces,
esa complejidad se traduce en un comportamiento cada vez más inteligente.
Si bien, hablar de inteligencia podría requerir de libros enteros, hay que
admitir que muchos elementos actuando de cierta manera, podría constituir
un comportamiento inteligente.
Por ejemplo, una hormiga sola, no es un organismo inteligente, pero un
hormiguero, ¿no tiene una sociedad organizada?
Para tener una sociedad organizada, se requiere de un tipo de inteligencia.
Luego, tienen hormigas guerrero, trabajadoras comunes, reproductoras,
agricultoras y, por supuesto, la reina. Por separado, las hormigas funcionan
de manera elemental, pero juntas, presentan una inteligencia distribuida.
Paradigma procedural
(Paradigma lineal)
Assembler
o
deMáquina
Código
Cód máqu
ANEXOS:
Al final del trabajo, se presentarán anexos con el reglamento del juego SPIA Wari,
las características que deben tener las IA para el juego, la codificación para la
comunicación, la licencia GNU y, al final, desarrollos introductorios de las teorías
involucradas que se utilizan en la programación de los agentes.
1.4. Mapa Conceptual
PARTE I
Marco teórico: De los
agentes y cómo se
reúnen en sistemas multi-
agentes.
Propósito de la sección
2. De los agentes
2.1. Introducción
Películas como Terminator con una inteligencias distribuida como Skynet se trata de
un posible escenario no muy lejano. De hecho, en la actualidad, aviones no
tripulados como los MQ-1 Predators norteamericanos, pueden llevar misiles
AGM114 Hellfire y tienen cierta autonomía operativa. El MQ-9 Reaper puede llevar
armamento hasta 4500 Kg.
Ilustración 1:Predator
Como hemos visto en la introducción de éste trabajo, una de las tendencias es dotar
a los sistemas de más y más "inteligencia" y "autonomía". Hasta hace poco tiempo,
los programas tenían que ser guiados por un operador, pero en ciertas operaciones
el esperar por la acción de un humano, puede hacer peligrar los objetivos del
sistema entonces, se opta por darle más autonomía.
Veamos los siguientes escenarios:
Operaciones de trading: en el mundo de los negocios de bolsa, las
operaciones son cada vez más rápidas. Hay sistemas que se encargan de
monitorear segundo a segundo el valor de las acciones. Muchas veces, el
operador tiene que estar siguiendo decenas o centenas de acciones para
poder actuar y debe comprar y vender las mismas en cuestión de minutos
para obtener ganancias significativas. Es imposible, físicamente, semejante
atención en un humano. Para poder automatizar esas operaciones se opera
con agentes software con algoritmos que reconocen ciertos patrones o que se
activan cuando se dan ciertas características en los valores de las acciones y
que tienen posibilidad de comprar o vender.
Operaciones espaciales: El envío de robots a explorar diferentes planetas,
asteroides y cometas son cada vez más frecuentes. Una sonda planetaria
como el Oportunity de la NASA que se encuentra explorando el planeta Marte
desde 2004, tiene un comportamiento autónomo que le permite tomar ciertas
decisiones sin necesidad que control de misión la corrobore.
Ilustración 1: Oportunity
Hay que tener en cuenta que, en el mejor de los casos, el tiempo que requiere
la información de los sensores desde Marte hasta La Tierra y la vuelta con las
instrucciones (suponiendo que el operador de misión responda
inmediatamente), lleva varios minutos ya que la velocidad de las
comunicaciones no es infinita, no son instantáneas, no pueden superar la
velocidad de la luz. Incluso hay que tener en cuenta que en muchos casos la
comunicación se torna imposible ya que La Tierra y Marte se encuentran en
los puntos opuestos de las órbitas con el Sol en el medio.
Operaciones de vuelo en aeronáutica: Los sistemas electrónicos de un avión,
en especial en un avión de combate, cumplen con sus objetivos de manera
autónoma para quitarle ciertas responsabilidades a los pilotos como mantener
la estabilidad y el sistema de puntería,
Operaciones en una central nuclear: No requiere de mucha explicación el
darle autonomía a los sistemas de seguridad de una central nuclear.
Para poder ver la diferencia entre ambas tecnologías, Wooldridge enunció muy
claramente las diferencias entre agentes y objetos [1]. Veamos la siguiente lista:
Los agentes tienen autonomía, los objetos no. Veremos más adelante en la
definición de agente que un agente recibe un estímulo y realiza una acción.
Es él mismo quien decide cuándo aceptar el estímulo y cómo reaccionar ante
él. Los objetos, al igual que los agentes, se comunican utilizando mensajes,
que no son otra cosa que métodos públicos que se activan para realizar sus
operaciones. Pero los objetos no tienen control sobre el momento en que se
activan sus métodos. El control lo tiene el objeto que lo llama. En cambio, el
agente tiene el control sobre sí mismo.
Los agentes, por definición, reaccionan al entorno y lo modifican. Los objetos,
por otro lado, modifican su estado interno y es el objeto llamante quien le
entrega los datos y le pide los resultados. Es cierto que los agentes también
modifican su estado interno, pero lo realizan en función de su interacción con
el medio.
Los agentes están pensados para ejecución distribuida y, se tiene muy en
cuenta el concepto de paralelismo. Cada agente tiene sus propios recursos.
Según Wooldridge los agentes deben que tener, necesariamente, al menos
un hilo de ejecución (como un proceso de Unix). Los objetos pueden
ejecutarse en diferentes hilos, pero no es una condición necesaria.
Los agentes manifiestan un comportamiento flexible, reactivo y, muchas
veces, proactivo. También puede observarse que tienen un comportamiento
social, ya sea colaborativo o competitivo. Son reactivos, porque perciben el
entorno. Los objetos sólo se ejecutan a demanda. Cuando se le presenta al
agente una situación no totalmente contemplada entre sus reglas de
operación, tiene la flexibilidad necesaria para adaptarse y tratar de cumplir
con sus objetivos incluso en ese entorno. Es proactivo porque no sólo intenta
cumplir con sus objetivos, sino que también los genera. Muchas veces toma
la iniciativa.
Lo dicho anteriormente, no significa que no se pueda utilizar la tecnología de
programación orientada a objetos para programar los agentes, sino que están en
distintos niveles de abstracción.
3. El concepto de agente
3.1. ¿Qué es un agente?
Como todo concepto de éste tipo, que es un concepto aprovechado desde otro
dominio, tiene una definición un tanto controversial.
¿Por dónde empezar?
Empezamos por la definición que da la Real Academia Española y la etimología de
la palabra:
"Un agente inteligente es una entidad capaz de percibir su entorno, procesar tales
percepciones y responder o actuar en su entorno de manera racional, es decir, de
manera correcta y tendiendo a maximizar un resultado esperado. Es capaz de
percibir su medio ambiente con la ayuda de sensores y actuar en ese medio
utilizando actuadores (elementos que reaccionan a un estímulo realizando una
acción)"
Ilustración 1:Agentes-Entorno
Por las definiciones que se plasmaron hasta ahora, podemos ver que es aplicable a
un agente humano, biológico, químico, etc. En cualquiera de ellos se aplica el
concepto a la perfección.
Recopilación de información
ordenamiento de información
almacenamiento de información
coordinación de otros agentes
realización de tareas físicas
creación de otro agentes
transportar objetos (físicos, lógicos,
Ilustración 1: Robot de SUMO
otros agentes)
(Parallax)
etc.
Sin duda, el límite es la imaginación del diseñador.
Una de las condiciones que establece la definición que estamos analizando es que
realice las operaciones en forma autónoma. En éste momento necesitamos
comprender la diferencia entre un sistema autónomo y un sistema automático.
Para plantear la distinción entre los sistemas automáticos y autónomos, primero
veremos que dice el diccionario de la Real Academia Española sobre las palabras
automático y autónomo:
Para automático la RAE dice lo siguiente:
adj. Perteneciente o relativo al autómata.
adj. Dicho de un mecanismo: Que funciona en todo o en parte por sí solo. U. t.
c. s.
adj. Que sigue a determinadas circunstancias de un modo inmediato y la
mayoría de las veces indefectible.
Para autónomo, la RAE define:
Que tiene autonomía.
Que trabaja por cuenta propia. U. t. c. s.
Entonces podemos decir que un Sistema Automático es un sistema que tiene una
serie de pasos prefijados que cumplirá indefectiblemente desde el principio hasta el
final. El salteo de algunos pasos dependerá de la programación, pero jamás será
decisión del propio sistema. Por otro lado, un Sistema Autónomo es aquel que no
necesita de la supervisión de un operario. Tomará decisiones de acuerdo a las
condiciones del entorno y almacenará su experiencia en su memoria interna. El
sistema autónomo es un superconjunto de un sistema automático. Si a un sistema
automático se le adiciona algún tipo de inteligencia que le permita almacenar
experiencia y tomar decisiones no pre-programadas se convertirá en un sistema
autónomo.
Deseo
Intención
Obligación
Tiene relación con los efectores
Pro-actitudes Compromiso
del agente. Orienta las acciones.
Elección
Movilidad
Sistemas de producción
Sistemas de subsunción
Máquinas de estados
Redes monocapa
Redes heteroasociativas
Redes autoasociativas
Tareas competitivas.
Veamos un poco más detalladamente cada uno de las arquitecturas. Está fuera del
alcance del presente trabajo un tratamiento detallado de cada una.
3.2.4.1. Sistemas de producción
Los sistemas de producción forman parte de los agentes reactivos puros y se basan
en: percepciones del entorno, reglas de producción, y estrategias de control.
Un sistema de producción Z se define como:
Z=(D, P, C)
donde:
D: juego de hechos
P: es la base de producción o reglas de producción
C: la estrategia de control y resolución de conflictos.
D= { s i }
donde:
si es el valor obtenido por un sensor
P=¿i=1¿ n( c i , ai )
donde:
c i ∈ { condiciones }a i ∈ { acciones }
Las condiciones especifican las formas y los valores del entorno que se deben
cumplir antes de que las acciones puedan ser ejecutadas.
Por supuesto que las acciones son procedimientos que modifican el entorno
logrando que cambien o no las condiciones.
Las reglas de producción tienen la forma lógica modus ponen que se ve en la forma
de implicaciones: si condición entonces acción. (c i=¿ ai) y tienen las siguientes
características:
Modular: Cada una de las reglas representa una pequeña parte del
conocimiento.
Incremental: Pueden ir agregándose nuevas reglas
Modificable: consecuencia de la característica modular, hace que sea
modificable.
Transparencia: posibilidad de comprender claramente las decisiones que
toma el agente.
Naturalidad para expresar el conocimiento: al expresarse en lógica formal de
primer orden.
Las reglas de producción se agrupan en tablas llamadas tablas de decisión.
La tercer capa hace que el robot observe usando el sonar lugares distantes y tratar
de dirigirse hacia ellos. Esta capa se encarga de monitorear el proceso usando el
odómetro generando la dirección deseada cuando la capa de deambular se había
activado.
Las capas inferiores ejecutan los comportamientos más primitivos.
No hay modelo interno del mundo real: no hay memoria compartida entre los niveles,
no hay mayor comunicación entre los niveles más que la inhibición o la supresión.
Independencia de módulos: Cada módulo tiene acceso sólo a los sensores sobre los
que tiene incumbencia.
Robustez en el desarrollo: El desarrollo permite un funcionamiento óptimo inmerso
en el entorno para el que fue diseñado y la falla de una capa no implica la falla de
todo el sistema
Escasa programación: Los módulos se programan de manera sencilla y
generalmente a nivel de firmware o electrónico.
Ineficiente ante condiciones inesperadas: Cuando las condiciones se alejan de las
condiciones de diseño, pierde capacidad de recuperación.
Razonamiento en tiempo de diseño/compilación: Como se mencionó previamente, la
programación del sistema, no incluye conocimiento simbólico del entorno y las
decisiones que toma el agente, requieren que se piensen las condiciones en el que
el mismo se encontrará inserto, de manera que la inteligencia del sistema, se
plantea al momento de diseño/compilación.
Excelente velocidad de respuesta: Dado que su procesamiento interno es sencillo, y
muchas veces a muy bajo nivel, tiene una altísima velocidad de respuesta.
Acciones:
1. Si tengo rocas y estoy en la nave: suelto las rocas
2. Si tengo rocas y no estoy en la nave: voy a la nave
3. Si localizo muestras: cargo muestras.
4. Si no se cumplen las condiciones anteriores: deambulo aleatoriamente
Todas las máquinas de estado finito tienen un conjunto de estados, un estado inicial
y una función de transición que a cada conjunto formado por un estado y por una
percepción, le asigna un estado siguiente. Las máquinas de estado tienen una
capacidad de memoria limitada, provocada por los estados anteriores.
(Q, Σ, q0, δ, F)
donde:
Q es un conjunto finito de estados,
Σ es un alfabeto finito,
e0 es el estado inicial,
δ es una función de transición y
F es un conjunto de estados finales (también denominado de aceptación).
Σ = {0,1}
Q = {e0, e1}
e0 es el estado inicial
δ(e0, 0) = e1
δ(e0, 1) = e0
δ(e1, 0) = e0
δ(e1, 1) = e1
e0 es el estado de aceptación
0 1
->*s1 s2 s1
s2 s1 s2
s1 1 s2
s2 0 s1
s2 1 s2
Máquina de Turin
e0 1 0 D e1
e1 1 1 D e1
e1 0 0 D e2
e2 0 1 I e3
e2 1 1 D e2
e3 1 1 I e3
e3 0 0 I e4
e4 1 1 I e4
e4 0 1 D e0
| Estado Cinta
Paso
1 e0 11
2 e1 01
3 e1 010
4 e2 0100
5 e3 0101
6 e4 0101
7 e4 0101
8 e0 1101
9 e1 1001
10 e2 1001
11 e2 10010
12 e3 1001
1
13 e3 10011
14 e4 1001
1
15 e0 11011
Parada
Maquina de Mealy
(Q, Σ, Γ, ∂ , ⍵, q0)
donde:
Q es un conjunto finito de estados,
Σ es un alfabeto finito,
Γ es un conjunto finito llamado alfabeto de salida,
∂ es la función de transición,
⍵ es la función de salida, definida ⍵:Q x Σ -> Γ,
q0 es el estado inicial.
3.2.4.4. Redes
Buscando una redacción más formal: Una red es un modelo matemático esencial y
masivamente paralelo realizado por unidades extremadamente simples. Cada
unidad tiene capacidad de almacenar conocimiento obtenido de manera
experimental, y que lo usa a medida de que lo obtiene.
Los diseños de las redes, tomando como ejemplo las redes neuronales [8], basan su
funcionamiento en un modelo con la topología del cerebro, en algunos aspectos:
El conocimiento se adquiere durante el proceso de aprendizaje.
Las unidades (neuronas) se interconectan a través de conexiones (sinapsis)
y, cada una de éstas, tiene un peso asignado. El valor de esos pesos
configuran la memoria de la unidad.
Hay dos tipos de conexiones: las activadoras y las receptivas.
La mayoría de las redes de las que se trabajan e investigan son las redes
neuronales. De manera que analizaremos el modelo de red neuronal.
Cada entrada puede ser activadora o inhibidora según el peso que le sea asignado.
Función de activación
Función escalón
{
φ (v )= 1→ v ≥ 0
0 → v <0
Función lineal
{
1
1→ v ≥+
2
φ (v )= v →− 1 > v > +1
2 2
1
v → v ≤−
2
Función sigmoidea
1
φ (v )= −av
1+ e
donde a = es la pendiente de la función de activación
X=
{+1 con probabilidad P(v)
−1con probabilidad 1−P (v )
1
P( v)= −v
( )
1+e T
Las primeras redes neuronales fueron de éste tipo. Por lo general sirve como
clasificadora de padrones.
2) Perceptrón multicapa
Las redes multicapa sin feedback son aquellas en las la señal se propaga hacia
adelante sin ningún tipo de bucle. son estáticas y sin memoria ya que no depende de
un estado previo de la red. No presenta ningún bucle en la red.
Es una red de más de dos capas cada unidad de las capas ocultas emplean una
función de base radial como activadora (como una gaussiana). Calculan su salida en
función a la distancia a un punto tomado como centro.
Las capas de salida tienen distinta función de activación ya que tienen distintos
objetivos.
∅ ( r )=e−(εr)
Multicuadrática
∅ ( r )=√ 1+( εr)
2
Multicuadrática inversa
1
∅ ( r )=
√ 1+(εr)2
Spline de capa delgada
k
∅ ( r )=r con k=1,3,5 , …
k
∅ ( r )=r ln (r ) con k=2,4,6 ,…
Spline poliarmónico
2
∅ ( r )=r ln ( r )
4) Redes competitivas
Stephen Grossberg desarrolló las ideas que llevó a éste tipo de redes.
En los casos anteriores, es posible que todas las salidas de la red se encuentren
activas a la vez. En el caso de las redes competitivas, sólo una unidad de salida se
encuentra activa a la vez. Las unidades de salida compiten entre sí ara activarse y
será la única activa.
Si bien todas las neuronas tienen acceso a todas las señales de entrada, cada una
de las neuronas tiene mayor injerencia sobre un grupo de entradas.
Hay dos tipos de competición:
Dura: sólo una neurona activa la salida
Blanda: una neurona activa fuertemente su salida, pero las neuronas vecinas
comparten un poco de los recursos.
T
W=
∑ T +γ
donde γ es un parámetro que vale, por lo general 0.5
Los pesos de las conexiones de red son ajustados en función de la diferencia entre
los valores deseados y los obtenidos. Y se realiza el proceso con cada neurona
recorriendo la capa hacia atrás.
Rosenblatt en 1958, desarrolló este modo de aprendizaje para el perceptrón: para
cada neurona en la capa de salida, se calcula el error entre la salida real y la salida
deseada. Ese error lo denotamos con α.
yi es la salida obtenida en la neurona de salida
yj es la salida de la neurona de la capa precedente
dj es la salida deseada
Δwji es la corrección al peso
También se la conoce como regla Delta. Es un paso más adelante que el modelo
aprendizaje por corrección de error. Como el caso anterior también se maneja con la
diferencia entre la salida deseada y la obtenida. Solo que se toma globalmente, se
tienen en cuenta todas las neuronas de la red. Al tomarse globalmente, puede
suceder que la corrección de una neurona anule la corrección de otras. Para evitar
que los errores de las distintas neuronas se anulen, se trabaja con los errores
cuadráticos. Y se busca, como en el caso anterior minimizarlo.
Es lógico suponer que cuanto más información se tenga de los errores que se
propagan en la red, más rápido se entrena la red. Por eso se toma el entrenamiento
a nivel global de la red.
Algoritmo de retropropagación
n
1
E (⃗
Xi, ⃗ W c+1 ) =
W c ,⃗ ∑ ( s −c )2
2 i=1 i i
donde:
⃗
Xi Vector con los valores de las entradas de cada
neurona.
⃗
Wc Vector de pesos de las entradas de las neuronas de
una capa.
⃗
W c+1 Vector de pesos de las entradas de la capa siguiente
si Salida ideal de las neuronas
ci Salida calculada de las neuronas
Calcular las derivadas parciales del error considerando los pesos de la capa
de salida⃗
W c+1
Calcular las derivadas parciales del error considerando los pesos de la capa
oculta anterior⃗
Wc
Se ajustan los pesos de cada neurona para le siguiente paso, según la
fórmula, para reducir el error
⃗
W c =⃗
p+1
W c +⃗
p
∆W
⃗
∆ W =δ i α [ ∂ f i ( e)
∂e i
x ]
δ i=( si −c i )
y α =Coeficiente de aprendizaje (éste valor afecta la velocidad de aprendizaje).
Se repite todo el proceso para todos los elementos del vector de pruebas.
Aprendizaje estocástico
Realiza cambios aleatorios sobre los pesos de las conexiones buscando acercarse
al objetivo de la red. Se establecen una función que se asemejaría a un estado de
energía de la red, una función de energía. El entrenamiento consiste en realizar
cambios aleatorios. Luego realizar el cálculo de la función de energía. Si la energía
disminuye, el cambio se toma como válido. En caso de que la energía sea la misma
o mayor, se acepta el cambio (o no) según una función fe probabilidades
preestablecida para la red.
Éste tipo de red utiliza el temple simulado (simulated annealing) para evitar que la
función de probabilidades caiga en mínimos locales.
En 1984, Hinton ideó la red denominada Boltzmann Machine (une éste tipo de
aprendizaje con el Hebbiano).
En 1986, Messner y Szu en 1987 inventaron la máquina de Cauchy que usa la
distribución de Cauchy para generar los saltos aleatorios tanto como los pasos a los
nuevos estados.
Aprendizaje competitivo
En éste tipo de agentes, el agente debe decidir qué acción realizar entre todas las
posibles, seleccionando la que proporciona un mayor valor de activación.
Cuando se aplica tareas competitivas para el control de un agente, se habla de usar
refuerzos positivos. Puede aplicarse tanto el algoritmo minimax-Q como el algoritmo
Q-Learning para maximizar el beneficio del agente. Se llama competitiva porque se
utiliza en los sistemas multi-agentes tratando de maximizar su propio beneficio
buscando minimizar el de los otros agentes. Pero en ésta sección nos interesa su
arquitectura en solitario. Utiliza refuerzos positivos para optimizar el comportamiento
del agente fortaleciendo los pares estado-acción que maximicen el beneficio del
agente.
{e0, a, e1, r}
donde
Se define una función Q(e, a) que es la función que mapea el estado con la acción
que realiza el agente, y devuelve el refuerzo.
Ilustración 7 Algoritmo de Q-Learning
3.2.5. Arquitecturas basadas en lógica
Los agentes con arquitectura basada en lógica, toman sus decisiones basado en
reglas y conceptos lógicos. Tienen una representación de su estado interno, sus
creencias según las actitudes mencionadas, utilizando un conjunto de sentencias
lógicas.
Si bien puede programarse éste tipo de lógica con muchos tipos de lenguajes de
programación, el Prolog es una excelente herramienta al momento de utilizar lógica
proposicional o lógica de predicados.
En la lógica modal, se agregan dos operadores cuyos símbolos son los siguientes:
es necesario que
es posible que
Por supuesto que en la lógica modal clásica es posible definir uno en función del
otro:
Los axiomas más conocidos son:
O p será obligatorio
Dentro de los pares fuertes (y de los débiles) los operadores son intercambiables.
Pp—>¬H¬p
Fp—>¬G¬p
Gp => Fp
G(p => q) => Gp => Gq
H(p => q) => Hp => Hq
p => HFp
p => GPp
PPp => Pp
FFp => Fp
PFp => (Pp ˅ p ˅ Fp)
FPp => (Pp ˅ p ˅ Fp)
p => Lp para todo p que no contenga a F (es una necesidad histórica)
(¬q ˄ Hq ˄ Lp) => GLH((¬q ˄ Hq) => p)
Hay varios sistemas lógicos basados en lógica temporal. Ver Lógica Computacional
[23]
:
Lógica computacional en árbol (Computational tree logic – CTL): este modelo
es una estructura de tipo árbol donde se presentan caminos diferentes en
vista al futuro.
Lógica temporal lineal (Linear-time temporal logic – LTL ): el tiempo se
modela como una secuencia finita de estados. Nos permite el concepto de
futuro. Fue analizada en 1977 por Amir Pnueli.
Lógica temporal de intervalos (Interval temporal logic – ITL )
X Próximo estado
Fu Estado futuro
U Hasta
R Lanzamiento
3.2.5.5. Lógica Epistémica
Es otra extensión a la lógica modal que se ocupa del razonamiento sobre el
conocimiento[24][25].
El trabajo realizado por Georg Heinrik Von Wright (An essay in modal logic), en
1951, se considera el documento iniciador de la lógica epistémica.
El operador que agrega la lógica epistémica, se toma como K y significa “se sabe
que”
Por ejemplo, si expresáramos: Kaα se podría traducir como “El agente a tiene
conocimiento (o sabe) de α.
Por otro lado si anteponemos el operador negación (¬): ¬Kaα diríamos que “El
agente a no tiene conocimiento o no sabe de α”
Axiomas:
(Bc α ˄ Bc (α => β)) => Bc β
¬ Bc (α ˄ ¬α)
Bc α => Bc Bc α
¬ Bc α => Bc ¬Bc α
Kc α => Bc α
Para un buen resumen sobre los tipos de razonadores, puede verificarse el artículo
de wikipedia: Wikipedia-Lógica Doxástica
Buscador Planificador
S
ACTUADORE
Intenciones
Deseos
Procesador Razonador
Creencias
SENSORES
Base de
conocimiento
3.2.6.1. Arquitecturas BDI
Begin
B=FB(p:P)
D=Opcion(B)
I=filtro(B,D,I)
return(ejecutar(I))
end
D=mantener la temperatura en T
B={t(a), OK(T)}
I={Calentar, Enfriar, Nada}
Acción: Case I
Enfriar Acción=Bajar la temperatura
Calentar Acción=Subir la temperatura
Nada Acción=Nada
En 1999 Wooldridge diseñó un flujo para un sistema BDI:
3.2.6.3. IRMA
3.2.6.4. GRATE
La sigla GRATE significa Generic Rules and Agent model Testbed Environment
(Normas genéricas y Entorno de banco de pruebas de modelo de agente) y fue
propuesta por Jennings en 1993
La arquitectura ha sido diseñada en capas, en la cual el comportamiento del agente
está orientado por un estado interno controlado por BDI. Por diseño, el agente puede
tomar dos roles: individuo y miembro de un MAS.
Tiene tres modelos de información:
Almacén de información: es el almacén de información de todo lo obtenido del
agente sobre sí mismo y sobre la interacción con otros agentes si los hubiera.
Modelo interno: es el conocimiento del agente sobre sí mismo y sobre sus
estados internos.
Modelo sobre el otro agente: contiene abstracciones de los agentes que
interactúan con el agente GRATE.
3.2.6.5. PRS
3.2.6.6. SOAR
SOAR es una arquitectura cognitiva que combina una arquitectura con un lenguaje
de programación[27].
SOAR fue creada por Laid, Newell y Rosenbloom en la Universidad Carneige
Mellon. Su desarrollo inició en 1983, pero oficialmente nació en 1987 con el paper
“Soar: An Architecture for General Intelligence”.
SOAR significa: State, Operator And Result (Estado, Operador y Resultado).
Y según la página puede ser cosas diferentes según la persona (temado de la
página: http://acs.ist.psu.edu/projects/soar-faq/soar-faq.html).
Una teoría cognitiva: es el principio en el que se basa SOAR
Un conjunto de principios y restricciones para procesamiento cognitivo
Una implementación del punto anterior como un lenguaje de programación
Un lenguaje de programación de Inteligencia artificial.
Entre otras cosas SOAR incorpora:
Espacio de problemas como un marco de trabajo para todas las tareas y sub-
tareas para ser resueltas.
Reglas de producción como representación del conocimiento permanente.
Objetos con atributos y valores como una representación del conocimiento
temporario.
Submetas automáticas como mecanismo simple para generar metas.
Fragmentación como mecanismo simple de aprendizaje.
SOAR es una arquitectura basada en una teoría sobre lo que los comportamientos
cognitivos tienen en común[28].
Ilustración 10 Arquitectura SOAR
3.2.7.3. Guardian
4.1. Introducción
Hasta ahora se han analizado los conceptos de los agentes. En éstas condiciones,
la programación de los agentes no se diferencia en nada de la programación de
módulos de inteligencia artificial. La verdadera potencia de éste paradigma es la
interacción entre los agentes, la potencia del procesamiento distribuido, la
especialización, puesta en común, etc.
Son muchas las formas de interacción entre los agentes, y se analizará inicialmente
los tipos de interacciones, para luego centrar el análisis en la comunicación entre
agentes.
Cuando los agentes interactúan, surge a priori, la necesidad de que se comuniquen
entre sí, de que reciban peticiones y resultados de otros agentes y de que puedan
comunicar sus propios resultados; de manera que surge la comunicación entre
agentes.
Al interactuar y comunicarse, al igual que en los grupos humanos (recordemos que
cuando definimos los agentes, vimos que los seres humanos cumplen con todas las
condiciones para ser agentes), los agentes forman estructuras sociales. Establecen
algún tipo de jerarquía organizándose, estableciendo arquitecturas de sistemas
multi-agentes.
En éste punto analizaremos las arquitecturas de sistemas multi-agente y las
comunicaciones entre los agentes siempre buscando responder a la pregunta ¿qué
se necesita tener en cuenta en la metodología?
El último punto que desarrollaremos es los lenguajes de programación que se
diseñaron específicamente para el desarrollo de agentes y multi-agentes.
La única manera de que los agentes interactúen entre ellos es que tengan algún tipo
de comunicación. El agente no puede cumplir con sus propios objetivos sin
considerar los de los otros. En algunos casos, un agente necesitará de la asistencia
de otros para llegar a sus metas; en otros casos, deberá competir con otros agentes
por el acceso a recursos y en otras oportunidades deberá negociar con sus
contrincantes porque sus objetivos pueden ser opuestos.
A la interacción entre los agentes se la denomina habilidad social. Esa habilidad
puede manifestarse a través de la cooperación, coordinación y negociación. La única
manera de interactuar sería usando algún lenguaje de comunicación.
En este punto se intentará responder a las preguntas: ¿Qué es comunicar? ¿qué
comunicar? y ¿cómo hacerlo?
Como se ha hecho en otros puntos, nos remitiremos a la RAE para tener una
primera aproximación de lo que es comunicar.
4.2.4.2. FIPA-ACL
El FIPA-ACL es un estándar definido por Fundation for Intelligent Physical Agents
(FIPA – www.fipa.org) donde ACL significa Agent Communication Languaje.
Inicialmente analizaremos la composición de un mensaje FIPA-ACL.
Un mensaje se compone de la instrucción que indica el tipo de mensaje de que se
trata y de los parámetros del mismo. Los parámetros de los mensajes comienzan
con “:”
Realización
Paso de Solicitud de Negociació Manejo de
Acto comunicativo de
información infromación n errores
acciones
accept-proposal ×
Agree ×
Cancel ×
Cpf ×
Failure ×
Inform ×
not-understood ×
Propose ×
query-if ×
refuse ×
reject-proposal ×
Request ×
request-when ×
request-whenever ×
Subscribe ×
4.2.4.3. KQML
KQML es la sigla para Knowledge Query and Manipulation Languaje (Lenguaje de
consulta y manipulación de conocimiento. El mismo ha sido desarrollado en el
programa ARPA Knowledge sharing effort (Esfuerzo de compartición de
conocimiento de ARPA).
KQML es tanto un formato de mensaje como un protocolo de manipulación de esos
mensajes. Se enfoca en un conjunto de enunciados performativos (son enunciados
que al utilizarse realiza la acción que significa). Que define las operaciones que los
agentes pueden intentar basado en los conocimientos de otros agentes y apuntando
a los objetivos. El desarrollo de este lenguaje se basa en la teoría de actos del
habla. Las oraciones expresadas por los humanos no siempre aseveran un hecho,
pueden transmitir una creencia, un conocimiento, una intención o un deseo. Además
puede establecerse una relación entre el estado interno de un agente y de los
mensajes que intercambia con los demás agentes. Como redes de contactos y
negociación entre agentes.
Características KQML:
El lenguaje KQML cumple con los estándares FIPA (Foundation for Intelligent
Phisical Agents,).
Los mensajes, además de tener una sintaxis y una semántica, comunican una
acción apoyada por el contenido (solicita, consulta, niega afirma, etc.)
Las primitivas del lenguaje se llaman ejecutivas
o performativa
o acción
o realizativos
Estas primitivas señala las intenciones y las acciones de los agentes
influyendo en la base de conocimiento de los otros agentes.
Es posible definir unos agentes especializados que se denominan agentes
facilitadores cuya función es coordinar la interacción entre otros agentes.
Realizando las siguientes acciones:
o Asociación de direcciones físicas con nombres simbólicos
o registro de bases de datos
o registro de servicios ofrecidos
o registro de servicios buscados por los agentes
o servicios de comunicación (reenvío, intermediación, etc.).
Capa de comunicaciones:
Establece la identidad de los agentes emisor y receptor, establece un identificador
único para la línea de comunicación.
Capa de mensaje
Es la parte central de éste lenguaje. Uno de los principales objetivos de ésta capa es
establecer el protocolo de transmisión del mensaje y establece el tipo de contenido:
comando, solicitud, pregunta, aserción, etc. Además, ya que el contenido es opaco a
KQML, en esta capa se incluyen características opcionales que describen el
contenido
Esta capa incluye las características de KQML: su lenguaje, la ontología que se usa
y alguna clase de descripción más general, analisis, enrutamiento y entrega del
mensaje.
Capa de contenido
Esta capa tiene el contenido real del mensaje. El lenguaje en el que está escrito este
contenido, está en un lenguaje que tanto el emisor como el receptor entienden.
Cualquiera de los agentes intermediarios puede que no entiendan el contenido del
mensaje. A esto se llama ontología compartida entre el emisor y el receptor. Es la
estructura de conocimiento que comparten el emisor y el receptor.
Un mensaje KQML se inicia con una instrucción que se denomina ejecutiva. Esta
ejecutiva se ocupa de aclarar la intención del mensaje. Seguidamente viene la lista
de argumentos asociados (obligatorios) y los argumentos opcionales. El orden en
que aparezcan no es importante ya que tienen el formato “argumento”::= “valor”.
La sintaxis se basa en la filosofía del lenguaje LISP, trabajando con paréntesis.
La definición de la sintaxis es, utilizando la notación bakusnaur (BNF) donde [<x>]
significa que lo encerrado es opcional; <x>* significa cero o más; <x>+ significa uno
o más; y <x>|<y> es un OR exclusivo.
<performative>::=(<palabra>{<espacio>:<palabra><espacio ><expresión>}*)
<expresión>::=<palabra>|<cita>|<cadena>|(<palabra>{<espacio><expresión>}*)
<palabra>::=<carácter><caracter>*
<caracter>::=<abfabetico>|<numérico>|<especial>
<especial>::=<|>|+|-|*|/|&|~|^|_|@|%|$|:|.|!|?
<cita>::=’<expresión>|,<expresión con coma>
<expresión con coma>::=<palabra>|<cita>|<cadena>|,<expresión con coma>|
(<palabra> {<espacio><expresión>}*)
<cadena>::=”<caracter de cadena>*”|<dígito><dígito>*”ASCII”*
<caracter de cadena>::=\<ASCII>|<ASCII>-\-<comillas>
Los nombres de las performativas, son palabras claves del lenguaje. Y pueden
agruparse según su utilidad. No se analizará el contenido de cada una de las
performativas.
Ejemplo:
A envía a B
(ask-one
:content (interested ‘(sobre, bloquea, %x))
:language KIF
:ontology bloques
:reply-with q1)
B contesta a A
(reply
:content (sobre bloqueA bloqueF)
:language KIF
:ontology bloques
:in-reply-to q1)
Como es posible imaginar, el trabajar con sistemas multi-agente, significa algún tipo
de coordinación de los sistemas multi-agente.
Pueden concebirse muchos agentes siguiendo un objetivo sin tener ningún tipo de
coordinación, mientras los objetivos sean simples. Pueden colaborar, lo que sin duda
requiere coordinación o pueden competir.
En el caso de una relación competitiva, los agentes deben competir por algún
recurso escaso. Esa escasez no significa faltante. Es que, en un instante dado, lo
esté usando otro agente. Por ejemplo el acceso a un determinado efector o una
línea de comunicaciones en un instante dado.
Lo más interesante es cuando los agentes tienen objetivos incompatibles en donde
se dan negociaciones, intermediación, etc.
4.4.1. Introducción
Si bien hay muchos lenguajes que se han creado para trabajar con agentes (APL –
Agent Programming Languaje), no hay uno que se considere el principal, de manera
que en ésta sección se analizará el panorama de los lenguajes de programación de
agentes. Se hará incapié en los lenguajes más usados.
4.4.2.1. Sintaxis
Las creencias:
<beliefs> ::= ( <belief> )*
<belief> ::= <ground atom> "." | <atom> ":−" <literals>"."
Los objetivos:
<goals> ::= <goal> ( "," <goal> )*
<goal> ::= <ground atom> ( "and" <ground atom> )*
Los planes:
<plans> ::= <plan> ( "," <plan> )*
<plan> ::= <basicaction> | <composedplan>
<basicaction> ::= "ε" | <Atom> | "Send("<iv>,<iv>,<atom>")" |
"Java("<ident>,<atom>,<var>")" | <wff>"?" | <atom>
<composedplan> ::= "if" <wff> "then" <plan> ( "else" <plan> )? | "while" <query> "do"
<plan> | <plan> ";" <plan>
Esta implementado en java cumpliendo con la norma J2SE y J2ME. El proyecto fue
abandonado hace 2 años. El código fuente puede bajarse de:
https://sourceforge.net/projects/agentfactory/
Agent-K está desarrollado en prolog para el intérprete, y una librería externa (KAPI)
para la gestión y envío de mensaje.
Para Agent-K se emplea una gramática de clausula defnida, que parsea el mensaje
en búsqueda de tokens, y genera la lista. No se utiliza el set completo de mensajes
KQML, se ha definiso un conjunto reducido que permita convertir los mensajes en
prolog.
El predicado kqml_prolog(KQML, PROLOG) convierte kqml en prolog y viceversa.
5.1. Introducción
5.1.1. Introducción
5.2.1. Introducción
[35]
5.2.2. Metamodelos
5.3.1. Introducción
5.3.2. Metodología: AAII/BDI
6.1. Introducción
7.2.1. Introducción
8. Conclusiones
El desarrollo de un juego tiene ciertas complicaciones que sólo pueden
comprenderse desarrollando uno. Este proyecto me ha dado la oportunidad de
comprobar lo complejo del desafío de desarrollar un juego, además de ello permitir
que los jugadores puedan desarrollar la inteligencia artificial contra la cual competir
le agregó una complejidad extra.
Referencias/Bibliografía
[1]
Michael Wooldridge: An introduction to multi-agent systems. John Willey & sons,
ISBN 0-471-49691-X. 2002
[2]
Doran Jim: Intervening to achieve co-operative ecosystem management: Towars
an agent based model. Journal of Artificial Societies and Social Simulation vol. 4, no.
2. 2001
http://jasss.soc.surrey.ac.uk/4/2/4.html
[3]
Michael Wooldridge: Agent-based software engineering. Proc on software
engineering. IEEE. 1997
[4]
JIMÉNEZ REY, M. Elizabeth; GROSSI, María Delia; PERICHINSKY, Gregorio:
Una Aplicación de la Tecnología de Multi-Agentes a los Sistemas Tutores
Inteligentes: Enseñanza de Computación en Carreras de Ingeniería
[5]
Ana Mas: Agentes software y sistemas multiagentes. Conceptos, arquitecturas y
aplicaciones. Pearson Educación S.A. 2005.
[6]
Rodney A. Brooks and Anita M. Flynn: Fast, cheap and out of control: A robot
invasion of the solar system. Journal of The British Interplanetary Society. Volumen
42. 1989; pp 478-485
[7]
Savage, John E.: Models of Computation, Exploring the power of computing.
Brown University; http://cs.brown.edu/~jes/book/. 2008
[8]
Freeman, James A.; Skapura, David M.: Redes Neuronales, Algoritmos,
aplicaciones y técnicas de programación. Addison-Wesley/Diaz de Santos. ISBN 0-
201-60115-X. 1991
[9]
J. J. Hopfield: Neural networks and physical systems with emergent collective
computational abilities. Proceedings of the National Academy of Sciences of the
USA. 1982
[10]
J. Febres, C. Prieto, Y. Gonzalez: Control en 2D de un asistente robótico para
cirugías laparoscópicas. Mecánica Computacional Vol XXIX. 2010; págs. 6539-6547
[11]
Felipetto
Escuela Superior de Ingeniería de Bilbao. 2005
[14]
http://www.swi-prolog.org/
[15]
http://www.learnprolognow.org/
[16]
http://homepages.inf.ed.ac.uk/stg/research/Psharp/
[17]
http://www.gprolog.org/
[18]
http://www.dobrev.com/
[19]
http://ciao-lang.org/
[20]
http://www.visual-prolog.com/
Zalta Edward: Basic Concepts in Modal Logic. Center for the Study of Languaje
[21]
[23]
José Luis Fernández Vindel, Ángeles Manjarrés Riesco, Francisco Javier Díez
Vegas: Lógica Computacional. Dpto. Inteligencia Artificial, E.T.S.I. Informática,
UNED — 2003
[26]
International Planning Competition. IPC2014. 2014.
[27]
Jill Fain Lehman, John Laird, Paul Rosenbloom: A Gentle Introduction to Soar, an
Architecture for Human Cognition. Sternberg & D. Scarborough (Eds). 1996
Robert Wray y Randolph Jones: An Introduction to Soar as an Agent Architecture
[28]
– 2004
Robert Kowalski and Fariba Sadri: An Agent Architecture that Unifies Rationality
[29]
Jörg Müller y Markus Pischel: The agent architecture InteRRaP: Concept and
[30]
[33]
D. Rudenko, A.Borisov: An overview of blackboard architecture application for real
tasks. Scientific proceedings or Rigal Technical University. 2007;
[34]
Gottifredi, Sebastián: Formalismos de argumentación en especificación de
agentes autónomos. Universidad Nacional del Sur. 2012
[35]
Arnon Sturm, Onn Shehory: A Framework for Evaluating Agent-Oriented
Methodologies. Lecture Notes in Computer Science Volume 3030. 2004. pp 94-109
http://link.springer.com/chapter/10.1007%2F978-3-540-25943-5_7#page-1
[36]
Winton H E Davies, Peter Edwards: Agent-K: An Integration of AOP and KQML
Department of Computing Science King's College University of Aberdeen
[37]
http://agenttool.cs.ksu.edu/
[38]
Juan C. Garca-Ojeda, Scott A. DeLoach, and Robby, agentTool III: From Process
Definition to Code Generation, - Proc. of 8th Int. Conf. on Autonomous Agents and
Multiagent Systems (AAMAS 2009), Decker, Sichman, Sierra, and Castelfranchi
(eds.), May, 10–15., 2009, Budapest, Hungary, pp. 1393-1394.
[39]
F.G. Mc Cabe, K.L.Clark: April - Agent PRocess Interaction Language, Dept. of
Computing Imperial College, London November 25, 1994
9. Anexos
9.1. Códigos de transmisión.
64 @ 0
65 A 1
66 B 2
67 C 3
68 D 4
69 E 5
70 F 6
71 G 7
72 H 8
73 I 9
74 J 10
75 K 11
76 L 12
77 M 13
78 N 14
79 O 15
80 P 16
81 Q 17
82 R 18
83 S 19
84 T 20
85 U 21
86 V 22
87 W 23
88 X 24
89 Y 25
90 Z 26
91 [ 27
92 \ 28
93 ] 29
94 ^ 30
95 _ 31
96 ‘ 32
97 a 33
98 b 34
99 c 35
100 d 36
101 e 37
102 f 38
103 g 39
104 h 40
105 i 41
106 j 42
107 k 43
108 l 44
109 m 45
110 n 46
111 o 47
NOTA: Por lo poco que es necesario transmitir se optó por la sencillez dado que
comprimir la información no tiene sentido.
NOTA: El sistema acondicionará el string para que siempre el valor devuelto sea un
número del 1 al 6.
9.2.1. Material
El material no puede ser más simple:
Cuarenta y ocho piedrecitas, semillas, palitos... cualquier cosa pequeña vale.
Doce (aunque, por comodidad, suelen ser catorce) recipientes o agujeros. Pueden
hacerse en el suelo, en un trozo de madera, en un bloque de arcilla...
Y dos personas dispuestas a exprimirse el cerebro
9.2.2. Objetivo
El objetivo del juego es hacernos con mas piedras, garbanzos, o lo que sean, que el
contrario. Puesto que hay cuarenta y ocho al empezar el juego, con capturar
veinticinco habremos ganado la mayoría de ellas y, por lo tanto, la partida.
9.2.3. Reglas
Las reglas del wari son sencillísimas:
9.2.4. Tablero
El tablero (si queremos llamarle así) está compuesto por dos filas de seis recipientes
o agujeros. De ellas, la que está más cerca de nosotros es nuestra, y la que está
más cerca de nuestro contrario suya. Siempre se empieza a mover desde un hoyo
de nuestro lado del tablero, y siempre se come en los hoyos del lado contrario.
Al empezar el juego en cada uno de los doce hoyos habrá cuatro fichas.
Además de estos, suele haber dos hoyos suplementarios, uno en cada extremo del
tablero, que se llaman «casas». El que queda a nuestra derecha es nuestra casa, el
otro la casa del contrario. Sirven para ir dejando en ellos las fichas que comamos
durante la partida.
Veamos cómo sería un tablero con casas al inicio de la partida
9.2.5. Movimiento
Un movimiento consiste en lo siguiente:
Tomamos todas las piedras de uno de los hoyos de nuestro lado.
Las vamos depositando una a una en los hoyos siguientes (tanto nuestros como de
nuestro rival) en el sentido contrario al de las agujas del reloj.
por ejemplo, si el jugador A mueve el hoyo de más a su derecha:
(se ha representado el movimiento de la mano del jugador A con una flecha)
Si el hoyo inicial contenía en concreto doce o más piedras, daremos una vuelta
completa al tablero; en ese caso el hoyo del que tomamos las piedras debe saltarse.
Es decir, al finalizar un movimiento, da igual el número de piedras que contuviera el
hoyo inicial, éste debe quedar siempre vacío.
Veamos un ejemplo. El jugador B mueve el hoyo que se indica.
9.2.6. Capturas
La captura, si se produce, es la última parte del movimiento:
Si al depositar la última piedra de un movimiento se hace en un hoyo enemigo, y
este contiene (contando la piedra que acabamos de depositar) dos o tres piedras,
estas son comidas. Es decir, las sacaremos y las dejaremos en nuestra casa (o las
mantendremos en la mano si jugamos en un tablero sin casas).
Lo mismo iremos haciendo, uno a uno, con los hoyos anteriores al último siempre
que contengan dos o tres piedras y pertenezcan al enemigo, hasta que lleguemos a
uno que no cumpla alguna de estas condiciones (del que no tomaremos las piedras).
Veamos un ejemplo:
B ha quedado sin fichas, en su siguiente movimiento A debe darle fichas con que
seguir jugando. Sólo puede hacerlo moviendo del hoyo señalado.
En caso de que esto no sea posible la partida finaliza y el jugador que conserva
fichas en sus hoyos une estas a las que comiera durante la partida. Se considera
que controla el tablero y que, por tanto, todas las fichas que queden sobre él son
suyas.
Sin embargo, si un jugador realiza una captura y con ello deja al contrario sin fichas,
el contrario pasará en su turno y, siendo nuevamente el turno del que realizó la
captura, se aplica la regla anterior. Es decir, está obligado a introducir fichas en los
hoyos del adversario si le es posible. (el efecto es que el jugador que come todas las
fichas del lado del contrario, mueve de nuevo inmediatamente).
Veamos un caso:
En cuanto a la estrategia:
Acumular fichas: Una técnica básica es acumular cuantas más fichas mejor en uno
de los propios agujeros.
No dar fichas al rival: Una segunda técnica básica consiste en tratar de que los
propios movimientos no metan fichas en los agujeros del rival, sino que sean
movimientos cortos completamente dentro de los hoyos propios.