Aquí dejo un vídeo en que se puede observar el resultado de aplicar un conjunto de reglas para lograr adelantamientos (en rectas de momento)
Como curiosidad decir que se está obteniendo un comportamiento inteligente a partir de reglas reactivas muy básicas (swarm intelligence).
La primera versión del conjunto de reglas que estoy utilizando es esta:
0 entorno(recta)&posicion_pista(centro)&dist_op_izq(lejos)&dist_op_centro(cerca)&dist_op_der(lejos)->acelerar(0.9)&frenar(0)&direccion(-0.7)
1 entorno(recta)&posicion_pista(derecha)&dist_op_izq(lejos)&dist_op_centro(cerca)&dist_op_der(lejos)->acelerar(0.9)&frenar(0)&direccion(0.8)
2 entorno(recta)&posicion_pista(izquierda)&dist_op_izq(lejos)&dist_op_centro(cerca)&dist_op_der(lejos)->acelerar(0.9)&frenar(0)&direccion(-0.8)
3 entorno(recta)&posicion_pista(centro)&dist_op_izq(cerca)&dist_op_centro(lejos)&dist_op_der(lejos)->acelerar(0.9)&frenar(0)&direccion(-0.8)
4 entorno(recta)&posicion_pista(centro)&dist_op_izq(lejos)&dist_op_centro(lejos)&dist_op_der(cerca)->acelerar(0.9)&frenar(0)&direccion(0.8)
5 entorno(recta)&posicion_pista(derecha)&dist_op_izq(cerca)&dist_op_centro(lejos)&dist_op_der(lejos)->acelerar(0.9)&frenar(0)&direccion(-0.5)
6 entorno(recta)&posicion_pista(derecha)&dist_op_izq(cerca)&dist_op_centro(cerca)&dist_op_der(lejos)->acelerar(0.9)&frenar(0)&direccion(-0.5)
7 entorno(recta)&posicion_pista(izquierda)&dist_op_izq(lejos)&dist_op_centro(cerca)&dist_op_der(cerca)->acelerar(0.9)&frenar(0)&direccion(0.3)
8
entorno(recta)&posicion_pista(izquierda)&dist_op_izq(cerca)&dist_op_centro(cerca)&dist_op_der(lejos)->acelerar(0.9)&frenar(0)&direccion(-0.7)
FANTASTICOOOO!!!!
ResponderEliminarQUEDA MU CHULOOO!!...
Qué es lo siguiente que intentamos???
Bueno... puedes sacar una estadística de cuál era el orden inicial de las reglas, cuántas veces se han ejecutado cada una y cuál es el orden final??
ResponderEliminarG
Lo siguiente que voy a intentar es adelantar en curvas y también evitar ser adelantado tanto en rectas como en curvas (claro que siempre teniendo como prioridad no salirme de la calzada...).
ResponderEliminarEn cuanto a lo de las estadísticas, en lo del orden inicial ¿te refieres al orden en el que aparecen en el fichero, y el orden final al que tienen al ordenarlas según la pioridad, no? Lo digo porque en principio el orden inicial siempre será el mismo (el orden en el que aparecen en el fichero), lo que si variará será el orden según prioridad, que dependerá del valor de prioridad que le asigne el usuario en el fichero a cada regla.
Por lo demás sí es muy fácil sacar las estadísticas (una tabla de enteros de tantas posiciones como reglas, en la que se incremente la posición correspondiente al ser seleccionada).
También me queda por hacer un log de las reglas seleccionadas en cada momento.
Hola Ricardo,
ResponderEliminarEn lo del orden me refiero,
inicial=evidentemente el orden del fichero.
final=ordenado por número de ejecuciones de cada regla.
De todas formas, creo que puede NO ser convenientes, al principo, que el "motor de reglas" las reordene mientras corre.... sino que únicamente cuente el número de veces que se ejecutan!. Así podremos revisar "humanamente" si el proceso es bueno o no...
Lo de las estadísticas me refiero únicamente al número de veces que se ejecutan... y que hará falta el log para eso.. claro!
En cuanto a los adelantamientos... yo creo que antes de ir a la curva... o incluso evitar que te adelanten... probaría a "esquivar" (adelantar) a un coche que estuviera parado(o muy lento) en la carretera... a ver cómo se nos daba!
... y por supuesto... hacer video y colocarlo en el blog!!.. que me mola mucho!
Que te parece??
Por cierto... tenemos que trabajar un poco más en las reglas y crear, si es posible, percepciones y acciones un poco más complejas.
ResponderEliminarComplejas significa especificadas a un poco de más alto nivel... no mas complicadas!!
Ej: hayhueco(derecha)... o medatiempoadelantar()...
etc...
y.. por cierto... otro comportamiento que NO se nos puede olvidar...
ResponderEliminarEs el de persecución... es decir, si no lo puedes adelantar (por lo que sea) aguantar detrás de él, sin chocar, pero sin salirse ni perderlo ni nada!!
Es decir, en modo AGOBIADOR!!!! :))))
Hola, lo de las estadísticas ya está diseñado, y ahora me encuentro diseñando lo de las percepciones complejas. Me he creado una clase 'Informacion' en la que además de tener las percepciones básicas, tengo una serie de métodos interesantes para obtener percepciones sintetizadas a partir de las básicas.
ResponderEliminarLo mismo haré para las acciones (por ejemplo podría tener una acción que fuese adelantar por la derecha... que estuviese basada en ciertas acciones básicas). Cuando tenga más refinadas las reglas de esquivar/adelantar en rectas pasaré a diseñar el modo agobiador y los comportamientos en curvas. Y bueno iré subiendo los vídeos de las pruebas que haga :)
Por otra parte, he detectado que hay problemas de ralentización en el juego, he comprobado que se tardan entre 20-30ms en percibir, razonar y actuar, y es importante que la respuesta del sistema sea lo más rápida posible. El cuello de botella parece que está en la función receive del socket que estoy usando para comunicar el motor con el cliente del juego. Intentaré encontrar alguna solución.
Una pregunta... el motor ¿dónde se ejecuta?
ResponderEliminarEs decir, el motor de reglas debe de estar dentro del Piloto, NO dentro de la telemetría!.
Son dos cosas independientes, una que nos sirve para pensar y la otra para estudiar lo que hacemos y lo que pasa alrededor, con el fin de averiguar si lo que hacermos está bien o mal.
G
El motor lo tenía ejecutándose desde la telemetría; ahora lo he acoplado dentro del piloto y va mucho más fluido :), y además me ahorro tener que comunicar por el nuevo socket.
ResponderEliminar¡Gracias por el consejo!
Ah se me olvidaba comentarte que ya he conseguido que el coche para la IA sea un F1, había que modificar el fichero torcs\drivers\championship2010server.xml , en el tag car name.
ResponderEliminarOK!!
ResponderEliminarLo del motor (de inteligencia) en el conductor no era "como" consejo... es que el mecanismo de razonamiento del piloto... debe de ir dentro del piloto... no??? :)))))))
Y lo de la telemetría... es para que los mecánicos e ingenieros tomen datos, analizen.. y puedan ayudar al piloto con consejos!! (online y offline)