Monday, May 10, 2010

Lógica Difusa

Jorge Dorantes 1011377
Alberto Barbosa 465635
Gerardo Basurto 01013754
Descripción del medio ambiente
Cada partida de StarCraft se realiza en un mapa que el usuario escoge. Dicho mapa varía a otros en dimensiones, recursos disponibles, ubicación de los recursos y topología. Al comienzo de cada partida, el jugador no tiene información sobre el mapa. El jugador tiene un rango de visión el cual determina que tanto puede ver del mapa respecto a cierta posición. Una vez que el jugador ha pasado por un punto en el mapa, todo lo descubra permanecerá visible hasta el fin del partida.

El objetivo de Starcraft es derrotar a tu enemigo a través de la destrucción de todas sus unidades. Esto requiere que uno tenga una estrategia adecuada al atacar al contrincante. Esta estrategia dependerá básicamente de la fuerza del oponente (salud de cada unidad) y también la fuerza propia. Así es como estas variables cambian en cada batalla y determinarán que estrategia es buena en cada situación. Un ejemplo sería que si el enemigo se encuentra débil, lo más conveniente sería ser muy agresivo en nuestro ataque, mientras que si se encuentra fuerte, disminuir la agresividad en la estrategia.

Para este proyecto utilizamos una unidad llamada Ghost, la cual es capaz de utilizar una habilidad que se llama “Cloak” y consiste en hacer invisible a la unidad, por lo que los enemigos no pueden hacerle ningún daño, sin embargo el Ghost es capaz de moverse o incluso atacar a otras unidades.

Lógica Difusa
El objetivo del algoritmo es encontrar el nivel adecuado de agresividad en la estrategia de ataque de nuestro Ghost para cualquier escenario de batalla.

Variables
Las variables que recibe el algoritmo son la salud de nuestra unidad y la del oponente. Estas variables son números enteros con un rango de 0 a 100.

Conjuntos Difusos
Se definen al dividir la salud de una unidad en 3 rangos:
·         Casi muerto  - 0 a 50
·         Buena – 14 a 83
·         Excelente – 50 a 100

Particiones Difusas
Las particiones difusas se crean usando las variables del problema. Debido a que la salud propia y la del oponente se cuantifican de la misma manera, sólo necesitamos definir las particiones difusas una vez:

Salud



La salida del algoritmo nos dirá la agresividad que deberemos tomar dependiendo de las variables de entrada. Las particiones de la variable de salida se encuentran de la siguiente manera:



Método de Inferencia
Para la implementación de nuestro algoritmo se utilizó el método de inferencia de Mamdani, los operadores lógicos de Zadeh y Mean of Maximum (MoM) para defuzzification.
Se definió el siguiente conjunto de reglas (IF salud propia AND salud del oponente THEN acción ):
·         IF Buena AND Buena THEN Cloack
·         IF Buena AND Excelente THEN Cloak
·         IF Buena AND Casi muerto THEN Atacar
·         IF Excelente AND Buena THEN Atacar
·         IF Excelente AND Excelente THEN Atacar
·         IF Excelente AND Casi muerto THEN Atacar
·         IF Casi muerto AND Excelente THEN Huir
·         IF Casi muerto AND Buena THEN Huir
·         IF Casi muerto AND Casi muerto THEN Cloak




Ejemplos
Ejemplo 1:
·         Salud de la unidad propia: 13.
·         Salud de la unidad enemiga: 60.
·         Proceso
o   Fuzzification:
§  Salud de unidad propia = 13 à salud de unidad propia = casi muerto.
§  Salud de unidad enemiga = 60 à salud de unidad enemiga = Excelente o buena.
o   Regla 1 que aplica:
§  IF Casi muerto  AND Excelente THEN Huir
o   Regla 2 que aplica:
§  IF Casi muerto  AND Buena THEN Huir
o   Defuzzification:
§  MoM = 1/1 = 1
·         Resultado:
o   La unidad huye de la batalla.





Proceso
Ejemplo 2
Salud de la unidad propia: 40
 Salud de la unidad enemiga: 90

o   Fuzzification:
§  Salud de unidad propia=40 àsalud de unidad propia =  casi muerto/buena
§  Salud de unidad enemiga= 90 àsalud de unidad enemiga = excelente.
o   Regla 1 que aplica:
§  IF Casi muerto AND Excelente THEN Huir à Fuerza:  .3 (approx)
o   Regla 2 que aplica:
§  IF Buena AND Excelente THEN  Cloak à Fuerza .8 (approx)
o   Defuzzification:
§  Sumatoria de máximos = (2/1) =2
§  La sumatoria indica que la unidad utilizará Cloak.
·         Resultado:
o   En este caso, la unidad propia se hará invisible, pues la regla  “IF Buena AND Excelente THEN Cloak” resultó tener mayor fuerza que la primera regla “IF Casi muerto AND Excelente THEN Huir”.














Debido a que nosotros usamos BWAPI para modelar nuestros algoritmos en StarCraft, no es posible realizar preguntas a nuestro programa. Lo que se puede hacer es cambiar las variables de Health de nuestro Ghost y del enemigo para poder probar diferentes escenarios.

Conclusiones
Lógica difusa es una herramienta sumamente poderosa y relativamente fácil de implementar. El algoritmo es sumamente intuitivo, debido a que nosotros como seres humanos también ponderamos con que fuerza tomamos una decisión. En este caso nos permitió modelar la misma estrategia que utilizaríamos si nosotros jugáramos con el Ghost. 

No comments:

Post a Comment

Note: Only a member of this blog may post a comment.