Foros - Stratos

Programadores => Inteligencia Artificial => Mensaje iniciado por: Daemon en 20 de Diciembre de 2005, 11:42:35 PM

Título: Inteligencia Cooperativa
Publicado por: Daemon en 20 de Diciembre de 2005, 11:42:35 PM
 Hola,

Aprovechando que tenemos este foro voy a plantear una discusion para ver si la gente se anima y le damos un poco de vida.

Se que puede haber algunos miembros del foro que pueden estar interesados en una discusion de este tipo, pues o se han tenido que enfrentar con el problema o lo van a tener que afrontar proximamente en algun proyecto: se trata de como plantear la IA de un conjunto grande de unidades en un RTS, tanto desde el punto de vista de estrategias, como de tecnicas a usar para implementarlas.

A ver que tal nos va ;).

Un saludo.
Título: Inteligencia Cooperativa
Publicado por: fiero en 21 de Diciembre de 2005, 03:04:00 AM
 ¿Inteligencia cooperativa? Nunca he visto ningún RTS en el que los personajes "cooperen" e interactuen entre ellos para cumplir objetivos.

No estoy muy al dia en este tipo de juegos (el ultimo al que jugué fué Age of Empires II), pero no he visto nada demasiado "inteligente" en los RTS que he jugado.

Lo que he podido comprobar, es que cada personaje es una "máquina de estados", según el estado en el que se encuentre se comporta de una manera u otra, y el personaje cambia de estado según ciertos parámetros, que le hacen parecer más o menos "inteligente".

Por ejemplo, en Starcraft, un minero tiene el estado "ir a por mineral", y lo único que hará el personaje es sortear los obstáculos que encuentre en su camino hasta la mina. Sólo cambiará de estado si el mineral se agota, en ese caso pasará al estado de "parado" o si consigue el mineral, en ese caso su estado cambia a "volver a casa". Por ejemplo, si está "parado" solo cambiara a "huir del ataque" cuando sea atacado, y se moverá en la dirección contraria de donde le viene el ataque.

Lo único que hace el programa en cada bucle es comprobar los estados de cada personaje y ver si debe cambiar de estado según los estímulos que recibe cada uno.

Se podrían hacer cosas mucho más complicadas e inteligentes, por ejemplo, que los personajes cooperen entre ellos, etc. En ese caso, se vería a los mineros formando una cadena desde el cuartel general hasta la mina y se pasarían el mineral de uno a otro para ahorrar tiempo  :D

un saludo
Título: Inteligencia Cooperativa
Publicado por: Vicente en 21 de Diciembre de 2005, 10:02:07 AM
 Yo en los RTS el problema que veo es: ¿como haces todas las comprobaciones de las unidades? Me explico: cuando una unidad enemiga entra en el rango de accion de las nuestras, la empiezan a disparar (o se mueven hacia ella o algo así). Chequeas continuamente todas las unidades? O tienes una entidad como "montón de unidades" y si ese "montón" ve algo ya miras que unidades del grupo en particular son las que empiezan a disparar?  Algo parecido me pasa con el pathfinding para tantisimas cosas...

Un saludo!

Vicente
Título: Inteligencia Cooperativa
Publicado por: dracks en 21 de Diciembre de 2005, 10:33:17 AM
 Hola,

Para lo que comentas de cuando una unidad entra en el punto de mira de otra unidad enemiga, yo tengo hecho un bucle, a lo mejor es un poco malo en temas eficiencia, pero si funcionara bien, que no se que le passa que ultimamente cada dia me funciona peor, hace su trabajo...

Lo del trabajo coperativo, seria mas bien por passo de mensajes, la unidad cuando es atacada, tendria de informar a las unidades cercanas que es atacada, para que todas ellas atacassen a la vez, si no tienen otro objetivo...

Complicado? no... solo es otro bucle :P

En la practica de ISO (introduccion a los sistemas operativos) la ultima que haremos, necessitamos de este tipo de inteligencia, estamos haciendo un comecocos para shell de linux, con multiples processos, y los fantasmas cuando vean al  comecocos, han de informar a los otros que han visto al comecocos...

Ya os informare, cuando la tenga terminada....

Suerte!
P.D.: si quereis mi juego, enviadme un e-mail, y os hare llegar una version, esta hecho en Fenix, y no se porque se cuelga a los 5 o 6 minutos de juego...  
Título: Inteligencia Cooperativa
Publicado por: fiero en 21 de Diciembre de 2005, 03:13:57 PM
Cita de: "Vicente"Chequeas continuamente todas las unidades? O tienes una entidad como "montón de unidades" y si ese "montón" ve algo ya miras que unidades del grupo en particular son las que empiezan a disparar?  Algo parecido me pasa con el pathfinding para tantisimas cosas...
Se pueden chequear contínuamente todas las unidades en cada bucle. No hay ningún problema con eso, a nivel de eficiencia. Sólo hay que tener un par de rutinas rápidas de cálculo de distancias, búsqueda de caminos, etc. En los RTS los cálculos se hacen en 2D, y por ejemplo no hace falta hacer raices cuadradas, se pueden utilizar todas las distancias al cuadrado para ahorrar. Además, después se pueden emplear todos los trucos que se te ocurran para optimizar, como quadtrees, etc. Por ejemplo, para el cálculo de visibilidad de un enemigo, un personaje sólo comprobaría los que están en su mismo cuadrante y los que están más lejos ni siguiera se comprueban, etc.

Por eso los RTS presumen de todos los personajes que pueden manejar a la vez, porque la cosa se complica cuando hay que comprobar muchos personajes en cada bucle. Se trata de comprobar lo extrictamente necesario en cada bucle, lo mismo que con las rutinas de visivilidad de las funciones de render, dibujar lo extrictamente necesario.

un saludo
Título: Inteligencia Cooperativa
Publicado por: AgeR en 21 de Diciembre de 2005, 03:52:35 PM
 Un tema interesante, y válido también para otros tipos de juego.
Para mí, lo primero que debería hacer un grupo de unidades es organizarse de la forma más eficiente. Un ejemplo típico, infantería delante, arqueros detrás, caballería a los flancos. Y si se adaptaran ellos solos ya sería perfecto. Suponiendo que el grupo sea atacado por varios puntos, lo lógico sería que la infantería rodeara a los arqueros, que estarían protegidos en el centro del grupo, mientras la caballería hace cargas contra los enemigos, centrándose en sus arqueros, por ejemplo.
Esto que puede parecer complejo, no sé hasta qué punto lo sería, supongo que podría funcionar por estados.

Luego para rizar el rizo, se podría hacer que varios grupos distintos se coordinaran entre ellos para lanzar un ataque o proteger una zona. Imaginad que te viene la IA a atacarte con infantería y arqueros. Sales a defenderte y los arqueros te empiezan a disparar a distancia, cuando te acercas la infantería avanza y sale a tu encuentro. En medio de la lucha aparece la caballería enemiga y divide tu grupo en dos, mientras un nuevo grupo hace su aparición y te destroza  :ph34r: .

(uoh)  
Título: Inteligencia Cooperativa
Publicado por: fiero en 21 de Diciembre de 2005, 05:03:40 PM
 
Cita de: "AgeR"Luego para rizar el rizo, se podría hacer que varios grupos distintos se coordinaran entre ellos para lanzar un ataque o proteger una zona. Imaginad que te viene la IA a atacarte con infantería y arqueros. Sales a defenderte y los arqueros te empiezan a disparar a distancia, cuando te acercas la infantería avanza y sale a tu encuentro. En medio de la lucha aparece la caballería enemiga y divide tu grupo en dos, mientras un nuevo grupo hace su aparición y te destroza  :ph34r: .
Esto se podría hacer con un nivel superior de IA. Más acorde con la librería que ha hecho vicente para Haddd (creo recordar). Es decir, en un nivel básico de IA, todos los personajes serían máquinas de estados mas o menos simples o complicadas. Y en otro nivel superior, se encontraría el "cerebro" del enemigo, es decir, una inteligencia un poco más avanzada que daría las directrices principales a todas la unidades bajo su mando. Esta IA seria más como un jugador virtual, y podría plantear estrategias como describe Ager, o incluso aprender de sus errores  :)
Título: Inteligencia Cooperativa
Publicado por: seryu en 21 de Diciembre de 2005, 07:19:46 PM
 que sepa, el starcraft (juego la mar de simple) la maquina atacaba con tropas y escuadron, y seguia un ritmo de construccion, por lo que no debe tener solamente una maquina de estados individual por mob.
Título: Inteligencia Cooperativa
Publicado por: senior wapo en 21 de Diciembre de 2005, 07:34:09 PM
 Si no recuerdo mal, en Starcraft la IA eran scripts.

Un script (ficticio) era algo asi:
"
Estrategia Ofensiva:
Construye soldados (15), medicos (4) y motos (3). Cuando tengas 15 soldados, 4 medicos y 3 motos mandalos al punto de encuentro P1 (en la entrada de tu propia base). Cuando todos esten alli, mandalos a la base enemiga y ataca contra el jugador si este no tiene aun factoria. Si la tiene, no mandes nada y ponte a construir un puerto espacial. Cuando tengas pueto espacial construye 2 transportes, mete las tropas y ataca el comand center.

Estrategia económica:
- Si hay suministros suficientes (y material) construye soldado, minero, tanque, y repetir.
- Construye barraca cuando tengas dinero, al menos 8 mineros, y ninguna barraca.
- Construye factorias siempre que tengas barraca, 8 mineros, 10 soldados y no tengas puerto espacial.
- Construye puerto espacial siempre que tengas factoria, 5 soldados, 3 tanques y el enemigo tenga mas tropas de tierra que de aire
- Si han pasado 5 minutos de partida y el jugador tiene menos de 20 tropas ofensivas, expandete a otro punto de mineral y haz centro de mando.

etc..."



"
Título: Inteligencia Cooperativa
Publicado por: Vicente en 21 de Diciembre de 2005, 09:25:14 PM
 Hola,

los genéticos como dice fiero se podrían usar para controlar los parámetros de otra estrategia de alto nivel que decida que tipo de decisiones tomar a nivel global, aunque normalmente cuando los he visto en juegos los he visto tuneando parámetros de más bajo nivel, pero vamos, nada impediria que controle algo de más alto nivel (podría ser un ejercicio curioso para probar ;)). Si se quiere que aprenda de sus errores un genético si que puede ser mu buena idea (pa eso son ideales), pero habría que darle tiempo. Además, igual que aprende de sus errores podría aprender del estilo de juego.

Un saludo!

Vicente
Título: Inteligencia Cooperativa
Publicado por: Daemon en 21 de Diciembre de 2005, 11:30:24 PM
 Hola a todos,

Lo de tunear los algoritmos y reducir las computaciones al minimo esta muy bien y siempre es aplicable, sin embargo depende a que nivel se haga puede quedarse corto. Con un numero de unidades suficientemente grande (¿en starcraft el limite eran 200?) ir comprobando unidad por unidad puede que no te de suficiente para mantener la apariencia de tiempo real y el mundo necesita seguir girando aunque tu no lo veas (es una forma de hablar :P).
Sin embargo si se puede aprovechar que tu no lo ves para simular el comportamiento de esas unidades que quedan fuera de la pantalla de juego en base a un estado global (por ejemplo grupo A luchando con grupo B) y a una tirada de dados con modificadores quizas mediante la fuerza relativa de cada grupo, nivel de vida global, bonificaciones defensivas, etc, (benditos juegos de rol, jeje...  :D) para de esta manera realizar los calculos mas pesados sobre aquellas unidades que necesiten dar un comportamiento real y mas fiable.

Es solo una idea. De hecho para implementar esto quizas se pudiesen usar automatas celulares (¿conoceis el juego de la vida?).

Otra de las cosas que a mi particularmente me raya bastante son lo complejas que se vuelven las maquinas de estados cuando realmente se esta usando inteligencia cooperativa, por ejemplo cuando para cumplir un objetivo hemos de tener en cuenta el estado del resto de unidades que nos acompañan. Se produce una autentica explosion de estados y casos posibles que hay que contemplar  (grrr). Ejemplo-problema: enfrentamiento de un grupo de unidades de un bando contra otro. En cada bando hay tres tipos de fichas 1, 2, 3, donde 1->2->3->1  (-> es come a). Cada ficha  tiene un radio de vision y se situan en los nodos de un grafo (o para simplificar de una cuadricula) y solo se pueden comer si estan adyacentes. Intentad hacer una inteligencia que para cada ficha tenga en cuenta el tipo de fichas con las que se encuentra en su grupo y las del grupo enemigo al que se enfrenta.

Por cierto que eso seria inteligencia de unidad, no de nivel superior.

Un saludo.
Título: Inteligencia Cooperativa
Publicado por: fiero en 22 de Diciembre de 2005, 05:16:18 AM
 En juegos como Starcraft no se pueden emplear lógicas de grupo, cada unidad tiene un comportamiento individual. Aunque haya un montón de unidades luchando entre sí fuera de la pantalla, hay que evaluarlas de forma separada, ya que dentro del grupo, algunas recibirán ataques de varios enemigos, otras de un solo enemigo, otras atacan pero no reciben, etc. Por eso hay un límite de unidades en este tipo de juegos.

Yo jugaba al Starcraft con un K6 200MHz. O sea, ahora on 3000 MHz se podrían manejar unas 3000 unidades en un juego del mismo estilo. Calculando por lo bajo claro, porque un ordenador actual tiene HyperThreading, miles de cachés, etc, con lo que si lo comparas con un K6 200, facilmente podrías manejar 5000 unidades. Y no digamos si pintas los sprites con la aceleradora, entonces te queda casi toda la CPU para IA (el Starcraft era todo por soft).

un saludo
Título: Inteligencia Cooperativa
Publicado por: ethernet en 22 de Diciembre de 2005, 09:10:51 AM
 SIempre se puede mirar el código del glest para saber como lo hace o que jare nos explique como lo hacen en praetorians  
Título: Inteligencia Cooperativa
Publicado por: marcode en 22 de Diciembre de 2005, 11:14:57 AM
 Yo haría diferentes grupos y subgrupos de unidades y mandos virtuales. Cada grupo de unidades tendría un mando virtual y estos a su vez formarían un árbol con más mandos virtuales hasta llegar al mando superior que sería el jugador.

Las decisiones de cada mando estarían determinadas por las ordenes recibidas del mando inmediatamente superior y por la información de los mandos inferiores. La actuación final de la unidad estaría determinada por las decisiones del mando inmediatamente superior y las decisiones propias de cada una.

Creo que de esta forma los mandos al ser pocos podrían tener una IA compleja y estructurada, mientras que cada unidad se ocuparía de cosas sencillas para luchar y moverse lo mejor posible.

No estoy seguro de que sirva, es solo una intuición :rolleyes:  
Título: Inteligencia Cooperativa
Publicado por: senior wapo en 22 de Diciembre de 2005, 02:02:25 PM
 A mi modo de ver:

1) Ha de haber una IA básica para el control autónomo de cada unidad.  Estos estados no hay que reevaluarlos en cada frame, sino solo cuando se dan las circunstancias que los pueden hacer cambiar de estado (mediante mensajes). Es una IA REACTIVA.
La unidad busca su propio camino y cobertura. No necesita evaluar a sus compañeros porque la IA de grupo ya le enviará el evento adecuado.

En Starcraft era:
- Si estado es MOVE: moverse a la casilla destino ignorando ataques y enemigos.
- Si estado es ATTACKMOVE: moverse al objetivo, atacando las unidades enemigas por el camino (hasta que mueran).
- Si estado es REPAIR: Reparar unidad y pasar a IDLE si no hay más ordenes encoladas.
- Si estado es RECOLECT: Recoger recursos, llevar al centro de mando, repetir y pasar a IDLE cuando no queden más.
- Si estado es IDLE: No hacer nada salvo estar siendo atacado, en cuyo caso moverse fuera de alcance.

Notese que una unidad que se está moviendo jamas reacciona ni cambia su estado hasta llegar, mientras que una en IDLE procesará el evento EVENTO_RECIBIRATAQUE y descartará los otros.


2) IA de grupo (IA intermedia) (IA REACTIVA):
Recoloca las unidades de su grupo para hacer frente al enemigo de la mejor manera posible. El número de tácticas suele ser finito. Es la que transmite las ordenes a las unidades.
- Catapultas y arqueros detrás, melee delante, etc...
- Moveos a la casilla P2 en modo ATTACKMOVE, donde P2 es, por ejemplo, el centro de masas del grupo G7 que está cerca y está siendo atacado (o la unidad más atacada, etc..). Orden recibida de la IA superior.
Recibe mensajes de la IA superior (moveos a la casilla P3) y de la IA de unidades de los miembros de su grupo (enemigo avistado, me atacan, etc..)


3) IA superior:
La que sigue los scripts u objetivos globales. Es la única cuyo estado cambia no solo por eventos sino también por scripts, objetivos etc... Es una IA PROACTIVA.
Como sabe que y donde atacar, selecciona y agrupa unidades en grupos equilibrados y a partir de ahí da ordenes a la IA de grupo (no a las unidades).
- Detecta si un grupo necesita refuerzos (tal vez mediante notificación de la IA de grupo) y
ordena a los grupo más próximos que acudan y ayuden (si procede).
- Envia grupos en misiones (por ejemplo ataque frontal para atraer unidades enemigas y a otro grupo le ordena un desembarco aereo por la otra punta de la base).
- Construcción de instalaciones, expansiones, etc...
Título: Inteligencia Cooperativa
Publicado por: marcode en 22 de Diciembre de 2005, 02:52:17 PM
 Starcraft para ganarte debía jugar al menos con 2 o 3 equipos, y si tiene que estar semi-dirigido mediante scripts para tener alguna táctica, no lo tomaría como ejemplo de IA cooperativa, aunque sí se podrían tomar de él algunos conceptos o técnicas específicas.
Título: Inteligencia Cooperativa
Publicado por: Daemon en 22 de Diciembre de 2005, 10:13:26 PM
 Parece que para los RTS lo que mas triunfa son las maquinas de estados jerarquicas.

http://www.gameai.com/games.html#C

Citarmarcode
Starcraft para ganarte debía jugar al menos con 2 o 3 equipos,

¿Has probado a jugar en multiplayer solo contra la maquina? Si incluso asi me dices que tu solo podias contra 3 IA's al mismo tiempo... ¡estas hecho un autentico monstruo! O_O (uoh)  
Título: Inteligencia Cooperativa
Publicado por: marcode en 22 de Diciembre de 2005, 10:39:57 PM
 Por lo que yo recuerdo 2 contra mi no me ganaba ni de coña, a no ser que estemos hablando de un modo de juego diferente, a partir de 3 quizás, y si lo hacían era usando la fuerza bruta y sin el inconveniente de tener que usar un ratón para controlar a montones de bichos.

Siempre tengo la imagen de ese tipo de juegos de unidades enemigas suicidándose contra mis defensas. Aunque tampoco es mi intención criticar a uno de los mejores juegos de la historia pero lo veo un poco antiguo. Estoy convencido de que si sacan el Starcraft 2, el planteamiento va a ser diferente.
Título: Inteligencia Cooperativa
Publicado por: dracks en 22 de Diciembre de 2005, 11:14:42 PM
 Mmmm....

El starcraft era un buen juego, pero con la version 1.09, la inteligencia artificial estava muy mejorada (si no mas en la velocidad de construir massas de unidades)

Inteligencias artificiales buenas, yo no he visto ninguna en un juego de estrategia, solo recuerdo que el Z estava muy currado este tema, porque cada unidad tenia su propia intelignecia, y reaccioanva de formas distintas a la misma situacion...

Creo que si se ha de hacer una IA cooperativa ha de ser simplemente, como si 2 personas cooperassen, por passo de mensajes (o que sea la misma unidad que se de cuenta); yo, la verdad, cuando hablais de cooperacion entre unidades, pienso en un juego X (que los englova a todos y a ninguno de los que he jugado; normalmente mas para mi juego) y lo que pienso es el caso que te ataquen a una unidad... que esta unidad no puede alcanzar al enemigo, y las 2 unidades de tu lado cuyo alcance es muy grande, pero vision es nula, no ven a la unidad atacante, la unidad atacada, buscara todas las unidades amigas cercanas a ella, y les mandara un mensaje de socorro, a parte de ir a atacar a la unidad atacante, si la ve, claro esta... y que las unidades defendientes, en caso de estar en un estado que no sea vigilar, eliminaran el mensaje, pero si estan en vigilar, que estas reaccionaran y apoyassen a la unidad atacada, destruyendo a la atacante... (no se una situacion) (si no fuera por las practicas de la uni, me ponia a implementar-lo a mi juego... :'( )


Otra cosa, si quereis una buena IA, iros a buscar a los shoot'm'ups, son los que mas se curran las IAs, a nivel de estos detalles, los RTS, normalmente llevan una IA muy cutre, yo recuerdo al dune2 que llegava a tener implementada una IA, que si al atacarte, una unidad se avanzava a las enemigas, las esperava o llegava a retirarse y todo... la verdad, para ser del 92, tambien curradilla... aunque las unidades en si, eran muy cutres, y las construcciones de edificios, aun mas, tenia la maquina predefinido donde iba cada edificio (que matada!!!! :D )



Suerte... Pero creo que este post se esta poniendo muy interessante

Título: Inteligencia Cooperativa
Publicado por: mimosete en 07 de Agosto de 2006, 12:55:54 PM
Bueno, es cierto que los RTS llevan una inteligencia artificial muy simple, una serie de directrices implementados con scripts, pero también los hay que tienen una serie de orientaciones tácticas y generales de movimiento de tropas, una estrategia superior, por ejemplo los de la serie Shogun-Medieval Wars, etc... Ahi ves como los arqueros se adelantan para hacerte una jugarreta y luego vuelven atrás, etc...

En general ese aspecto no está muy desarrollado, ahi notas cuando un jugador es humano o no. Si te gana la máquina es porque construye más deprisa y saca soldados más rápido que tu, no otra cosa, o sea estrategia a lo bruto, a "golpe de ratón".

Como en la serie Shogun ese aspecto no cuenta o cuenta poco, tienes los soldados que tienes desde el principio, el ordenador se tiene que poner las pilas para ganarte estratégicamente.

En mi opinión, si el juego está orientado a la economía, lo que es lo normal en la serie Warcratf, Ages, etc... no importa tanto que se afine en la estrategia militar, es importante pero no decisivo . La IA superior de que hablais iría mejor en otro tipo de juegos, en que el jugador está más liberado del aspecto económico y se concentra en las tácticas y estrategias de ataque/defensa.
Título: Inteligencia Cooperativa
Publicado por: Repoker en 08 de Agosto de 2006, 11:11:35 AM
Un hecho destacable de la IA en los juegos de la saga TOTAL WAR es que la IA ha ido empeorando en favor de mejores gráficos ...

Soy un orgulloso poseedor de todos los títulos de la saga, y creo que está bastante claro que a partir de ROME la IA tiene un nivel bastante mediocre.. en SHOGUN los generales enemigos casi nunca atacaban si no contaban con algún tipo de ventaja táctica sobre el jugador.. además de la ventaja de poder mover todas las unidades a la vez, cosa que un jugador humano no puede hacer :)

Para comprobarlo, basta ver cómo en SHOGUN los regimientos IA se organizan para aprovechar tus puntos flacos, mientras que en ROME raramente cambian la disposición de las tropas y las batallas suelen acabar en masacre normalmente a favor del jugador humano (a menos que sea un patata). Incluso en asedios a ciudades o en amplia desventaja numérica.

Otro ejemplo muy sencillo es la manera en que las tropas IA en SHOGUN hostigan.. en ROME siempre acabas pillándolos y arrasando con ellos mientras que en SHOGUN siempre se las arreglan para causarte bajas sin que puedas hacer otra cosa que gritarles ..
Título: Inteligencia Cooperativa
Publicado por: Vicente en 08 de Agosto de 2006, 12:36:38 PM
Yo tengo una opinión confusa respecto a ese tema Repoker: a veces pienso como tu, pero no siempre. El problema del Rome en mi opinión es que las unidades romanas son la ostia: las legiones reparten a diestro y siniestro y además van armadas con pilums, con lo cual incluso pueden meter a hostigadores que se les acerquen. Pocas cosas causan problemas a una legión. Cuando juego con roma si noto esto que dices tu de que la máquina parece más mala. En el Shogun no existia ninguna tropa con la capacidad ofensiva/defensiva de una legión (buen ataque, buena defensa, formación de tortuga y pilums). Incluso las unidades republicanas de antes de las reformas de Mario que no pueden formar en tortuga son bastante mejores que casi cualquier otra cosa del juego.

En cambio ahora jugando con los griegos, las cosas cambian que no veas (usando el GreekMod). Las falanges griegas no son ni de lejos tan buenas como las legiones, ya que son muy dependientes del ángulo de ataque (solo son buenas hacia delante por las sarisas), pero además tardan la vida en maniobrar o girar para encarar nuevos enemigos. Cuando juego con los griegos si que veo a la máquina realizar muchas más maniobras de flanqueo y jugar de forma más dinámica (intenta separar a tus unidades para rodearlas).

Está claro que siempre le veo alguna merluzada, pero bueno, es una máquina ;) De todas formas, tendría que volver a mirar el Shogun, que hace muchísimo que no juego.

Un saludo!

Vicente
Título: Inteligencia Cooperativa
Publicado por: guibix en 25 de Junio de 2007, 06:53:11 PM
Un tema muy interesante, lástima que llego tarde, pero a ver si lo podemos animar.  :D

Des de, mi punto de vista estoy de acuerdo en muchos de los planteamientos que se proponen, intentaré hacer mi propia síntesis del tema a partir de ideas que han salido aquí y de otras obtenidas en otras fuentes.

En primer lugar me gustaría contar cómo seria mi juego ideal, aunque lejos de ser realizable, no creo que se tarde en disponer de la tecnología adecuada.
Seria un juego que estaría a medio camino de ser shoot'm'up y de un RTS. La idea es que empiezas como soldado de una escuadra que, forma parte de un pelotón, que a su vez forma parte de una compañía, etc. Tanto en el juego individual cómo en el multiplay, todos los demás soldados no jugadores serian boots  Tu eres un simple soldado y si sobrevives lo suficiente pasas a ser sargento de escuadra e ir subiendo hasta los rangos más altos posibles. A partir del rango de capitán de compañía (por ejemplo), ya no usas tanto tu visión sino que usas más el mapa. Lo más parecido a esto que he visto es el “Operation Flashpoint” y el “Armed assault” lo que pasa es que como shoot'm'up es muy tosco y difícil de controlar y los enemigos tienen una puntería infernal más que ser listos y cómo RTS no tiene más que un nivel de jerarquía y la ejecución táctica no se puede usar bien mediante el mapa.
Pero hablamos de la IA que necesitaría este juego. 8)
En primer lugar y sin duda tendría que tener una IA de shoot'm'up en cuanto a los individuos. Cómo variable añadida, debería usar las órdenes del mando inmediatamente superior para realizar la acción individual comparando el entorno con las órdenes para tomar una decisión. Al mismo tiempo el individuo informa a su mando de su situación para valorar la situación del grupo y tomar la mejor decisión para ejecutar la orden. Incluso se podría llegar a la situación de que no quiera cumplirla y retirarse en vez de aguantar una posición (por ejemplo). El mando a su vez informa a sus superiores hasta el  mando supremo que organizará la estrategia global. No es necesario complicar mucho la IA de los mandos superiores ya que la escalera jerárquica hace más simple la cantidad de unidades que se deben manejar, por ejemplo: eres el capitán de una compañía y tienes 3 pelotones de asalto i uno de apoyo. Cada pelotón de asalto está compuesto de 3 escuadras de asalto y una de apoyo y el pelotón de apoyo 3 escuadras de apoyo y una de asalto. Si cada escuadra hay 10 hombres y hay 16 escuadras, tenemos que mandar a 160 hombres (esta jerarquía es mas o menos la misma que los ejércitos reales) Se podrían reducir a 16 grupos de 10, pero a tiempo real y des del punto de vista 3D del capitán se haría muy engorroso. Lo suyo de las jerarquías militares, es que ese capitán sólo debe preocuparse de los pelotones que son 4, si hay que tomar una colina, sólo tiene que dar 4 órdenes (o secuencias de órdenes) una por pelotón y confiar que lo que ordenen sus tenientes de pelotón sea lo más apropiado aunque si quiere puede dar órdenes a una escuadra o a un individuo en concreto.

Para no enrollarme más :oops: , propongo que a quién le interese este tema critique y/o aporte ideas de cómo se podría lograr. Para empezar creo que con una combinación de estados mediante grafos y lógica difusa para dar el aspecto más humano en las decisiones, de otro lado yo he probado redes neuronales recursivas para la comunicación jerárquica dónde cada individuo tiene una neurona para valorar su estado ponderando las ventajas, desventajas y el estado anterior (+1 máxima ventaja y -1 máxima desventaja), y lo transmite a su mando. Esto se pondera hasta el mando superior que si resulta un número superior a un umbral positivo la orden es atacar, si es inferior a un umbral negativo,  la orden es retirarse y si está entremedio, la orden es aguantar y defender. Esto se transmite a los mandos inferiores que acatarán la orden si no se contradice mucho a su estado propio. Al final no tiene un comportamiento muy realista pero valora muy eficazmente lo que se debe hacer (sólo con 3 posibilidades). Por otra parte no hace falta calcularlo cada frame, sólo cuando sea necesario.
A ver si hay alguna otra idea...

Gracias por aguantarme  :oops:
Título: Inteligencia Cooperativa
Publicado por: RobiHm en 25 de Junio de 2007, 08:14:40 PM
el problema de la IA de los juegos actuales simplemente se transmite a o tienen un bonus de producción/recursos o ven todo el mapa...

si alguien a jugado a la saga de civilization habrá notado que el resto de civilizaciones cooperan entre si siempre más que contigo, a menos que tu seas una de las muy fuertes y con mucha diferencia al resto, todos saben donde tienes la ciudad menos defendible y todos saben de cuantos soldados dispones y en que zonas, y eso... muy real me da que no es, además, la máquina tiende a amontonar unidades en ciertas zonas y a dejarlas paradas sin ton ni son...

en la saga total war, es cierto que ha perdido gran parte de su lógica, hasta llegar al punto de resistir un asedio simplemente con arqueros y en 1 defensor por cada 20 atacantes, el problema radica en que la máquina coordina todo como un ejército global, y no separa tareas. Ésto se ve claramente cuando mueves tu ejército, al hacer un contramovimiento la máquina orienta x grados todo su ejército y realmente no se si valora correctamente las vulnerabilidades que eso causa.  La solución a éste problema es sub dividir el mando de la IA del ejército en grupos. Según la situación y la civilización se debería trazar una defensa/ataque buscando potencializar las habilidades conjuntas del ejército. Al subdivir la defensa/ataque en varios subgrupos, cada subgrupo tiene un papel predominante, acechar, atraer, despistar, masacras, aguantar la posición... más concreta y de éste modo se evita el tener que estar baratando todo el rato posibilidades que lo único que hacen es ocupar recursos. Optimizando tareas concretas según el tipo y nº de unidades iniciales y refrescando dichas tareas cada ciertas causas/eventos se consiguiría un papel más humano, ya que realmente es lo que un jugador hace.
Pero realmente hacer eso supondría un gasto mayor y menos palpable para el mercado comercial que el añadir x polígonos/animaciones a las unidades  xD

Citar
En cambio ahora jugando con los griegos, las cosas cambian que no veas (usando el GreekMod).

El problema de ese tipo de juegos es que aglutinan las tropas sin coordinar las defensas de las demás zonas, yo con los cartaginenses conquisté roma rápidamentey con los griegos también/egipcios/hispanos... la que más me costó a la larga fueron los cartaginenses xk tenían a mi entender las peores unidades del juego, aunque muy manejables...



referido al sc, tiene sus cosas buenas (aunque la máquina siempre sepa donde te encuentras), cuando atacas a una unidad enemiga rápidamente acude el resto de su ejército al lugar de la trifulca, (aunque sean acciones suicidas y tal), y bueno para su tiempo creo que es una especie de seudoIA cooperativa. Para los que decían que pueden contra 3 máquinas... poco han jugao xD, puedo trincarme a 5 ordenadores (ellos jugando contra mi) y si tengo un aliado CPU no zerg hasta a 7


Citarsolo recuerdo que el Z estava muy currado este tema, porque cada unidad tenia su propia intelignecia, y reaccioanva de formas distintas a la misma situacion...

buf... me acuerdo que cuando te atacaba una unidad enemiga y tu tenías tropecientas, empezaban a gritar los muy gayolos que estaban rodeados...

el juego que más me sorprendió de los que he jugado ha sido el empire earth, se encargaba de hacer y mejorar un par de tipos de unidades que se complementaban y enviaba batallones formados únicamente de esas x unidades, de repente avanzabas y empezabas a ver morir a tus unidades por un batallón de francotiradores para ver como a continuación se lanzaba sucaballería sobre los supervivientes... eso me llamó la atención, amén de que enviaban al profeta a derribarte o desembarcarte por zonas vulnerables de tu base y abrirte una brecha en la muralla...


menuda parrafada...
Título: Inteligencia Cooperativa
Publicado por: Daemon en 26 de Junio de 2007, 01:10:05 AM
Interesante la idea de usar redes neuronales para tomar decisiones en un rts. Aunque creo que haria falta especificar mas en que consiste ese estado que forma la entrada de la red. Podria ser, p.e., los atributos de la propia unidad y los de la unidad/unidades a las que se esta enfrentando (PV, armadura, puntos de ataque). La funcion de activacion que escogieses daria el tipo de comportamiento de una unidad u otra: por ejemplo, si el rango es entre [-1, 1] lineal seria una unidad normal, ni valiente ni cobarde, exponencial una unidad suicida de las que no huyen nunca y  hiperbolica una unidad que podria denominarse "histrionica" en tanto que ven la victoria en cuanto ganan por un poco y tambien se ven derrotados cuando pierden un poco :)

Cuando esta informacion llegase a la neurona del nivel superior ocurriria lo mismo, pero agregando toda la información de las neuronas de la capa de los"soldados" y la decision de este nivel subsumiria a las de este. Ademas estoy seguro que esto puede dar mucho juego. Si se quieren formar subgrupos yo haria una red en la que el nivel de "soldados" se tomase en su conjunto, es decir todas las neuronas "soldado" tuviesen conexion con todas las neuronas "sargento". Esto es asi para hacer dinamica la asignacion de grupos y desviar soldados de uno a otro grupo cuando estos lo necesiten. Adems todos estos comportamientos se podrian controlar mediante aprendizaje, y ese es el potencial que tendria esta red, que daria una sensacion mas humana y aparte ¡aprenderia a jugar mejor cada vez que se enfrentase a alguien!

Buena idea, si señor.
Título: Inteligencia Cooperativa
Publicado por: guibix en 26 de Junio de 2007, 12:50:05 PM
Cita de: "Daemon"creo que haria falta especificar mas en que consiste ese estado que forma la entrada de la red.
¡Por supuesto! Yo he probado muchas combinaciones pero a nivel teórico lo simplifiqué para testearlo más fácilmente a “1 todo va muy bien”, “-1 todo va fatal” y “0 no va ni bien ni mal”  con todos los estados intermedios. Lo mismo para las salidas, que las simplifiqué a los tres estados básicos de la estrategia (atacar, defender y huir). Había pensado que con una red nuerodifusa se conseguiría con facilidad el tener muchas variables para la entrada (armadura, arma, moral, estado anterior, tipo de terreno, nº de enemigos, nº de amigos, etc.) y muchos estados de salida (atacar, defender, emboscar, ocultarse, apoyar, retirada táctica, etc.) pero aún estoy en ello, aunque a nivel teórico creo que voy por buen camino, o no...
Cita de: "Daemon"Si se quieren formar subgrupos yo haria una red en la que el nivel de "soldados" se tomase en su conjunto, es decir todas las neuronas "soldado" tuviesen conexion con todas las neuronas "sargento". Esto es asi para hacer dinamica la asignacion de grupos y desviar soldados de uno a otro grupo cuando estos lo necesiten.
Esto también lo hice conectando los soldados con los soldados y los sargentos con sargentos con un peso más alto con soldados más cercanos dentro de la formación y más bajo con soldados más lejanos, lo mismo con sargentos, tenientes, etc.
Título: Inteligencia Cooperativa
Publicado por: Tei en 26 de Junio de 2007, 04:12:18 PM
Cita de: "guibix"¡Por supuesto! Yo he probado muchas combinaciones pero a nivel teórico lo simplifiqué para testearlo más fácilmente a "1 todo va muy bien", "-1 todo va fatal" y "0 no va ni bien ni mal"  con todos los estados intermedios.

Bueno, no se si meto la gamba tratando el asunto. Pero tengo que hacer aqui un comentario.

En entrada, habra una maquina que combierte lo del mundo exterior en lenguaje del mundo de la cosa esta. Por ejemplo en el exterior binario, y en el interior un numero de coma flotante entre 0 y 1.
Pero luego en el exterior otra maquina que combierta del lenguaje interno al externo. Desde flotante 0 hasta 1 a binario.

esta maquina de salida puede tener este aspecto:


float fBit = 0.32f;
bool bit;

if ( fBit < 0.5)
  bit = false;
else
  bit = true;


Tampoco veo una necesidad especial de utilizar en salida logica terciaria.
De todos modos estos temas estan demasiado bien explicados en los libros de texto, no son comentables en un foro de internet porque esta demasiado claro en los libros para que sea adecuado opinar :D
Título: Inteligencia Cooperativa
Publicado por: Vicente en 26 de Junio de 2007, 04:54:26 PM
En las redes neuronales suele tener sentido el tener tres estados:

- si
- no
- no sabe/no contesta

Es bastante normal tener una frontera de decisión dentro de la cual la red no emite una respuesta porque con la información que tiene no es capaz de decidir (ruido, etc etc).

Un saludo,

Vicente
Título: Inteligencia Cooperativa
Publicado por: guibix en 26 de Junio de 2007, 07:52:53 PM
También tienes razón Tei, lo que pasa es que este sistema no lo programé con C# ni ningún lenguaje standard, sino que usé las redes neuronales de Framsicks que es un programa para crear vida artificial con un código genético, que da mucho juego a la hora de crear redes neuronales recursivas y ver cómo actúan. Además con el lenguaje script que incorpora, puedes programar de todo y más
Título: Inteligencia Cooperativa
Publicado por: yens en 30 de Junio de 2007, 02:11:49 PM
Pues ahora que recuerdo en Praetorians cuando viciaba al jueguecito en cuestión me suena de que las unidades aprovechaban la ventaja de posiciones altas para arqueros, esconder tropas entre los árboles y demás vegetación e incluso formaban los escuadrones cierto orden a la hora de moverse y atacar no?