Stratos: Punto de Encuentro de Desarrolladores

¡Bienvenido a Stratos!

Acceder

Foros





Que tipo de IA usariais?

Iniciado por Capiflash, 04 de Mayo de 2007, 06:15:50 PM

« anterior - próximo »

Capiflash

Bien , me han planteado lo siguiente. Es para un juego , la IA tiene que encargarse de atacar , construir , defender y los mas complicado a mi gusto ,comerciar y defender a sus compañeros segun la necesidad de cada uno.
En un principio pense en una maquina de estados . Si cada jugador ( controlado por la IA )  tuviese su maquina de estados , este podria emitir un "mensaje de auxilio" en caso de necesitar ayuda o recursos ( que es lo que mas complicado me parecio ),  al resto de jugadores controlados por la IA .

Todos los datos de jugadores y demas ( ya no los de la IA , sino los humanos que jueguen ) estan en una base de datos ( MySQL ). Habia pensado desarrollarlo usando C# .

Alguna idea y/o sugerencia?

Prompt

Una vaga idea y rapida podria ser, mantener una maquina de estados por cada jugador, teniendo asiciados eventos al ataque y demás acciones tanto activas como pasivas.

No obstante tienes que darle el poder de decisión a un "nucleo" de IA ya lo coloques en un servidor a parte o en una librería. Que maneje y asigne esa maquina de estados de los jugadores o NPCs así podras controlar las necesidades de comercio de cada NPC o jugador y jugar con eso de una forma muy facil, por ejemplo.

Lo que no sé pq los datos de los NPCs no los guardas tambien en la DB... por que movito?

Capiflash

No hay problema en meter los datos de los NPCs en la base de datos tb. No me han puesto impedimento vamos , quizas sea lo mas sencillo , ya que la estructura esta hecha ya.

Los jugadores a controlar por la IA son 20 , y quieren "personalidades" diferentes , no todos con el mismo nivel de agresividad y demas.

La verdad es que a priori me parece bastante interesante el tema

hotcamus

La descripción del problema que das es bastante vaga. ¿Es un para un RTS tipo Age of Empires u otra cosa más sencilla? Dependerá del nivel de complejidad que quieras alcanzar pero no te recomiendo una máquina de estados.

Lo primero es que probablemente no necesites un único sistema de IA. Por ejemplo, dices que hay que comerciar y construir por lo que la IA tendrá que decidir qué construye y dónde. Atacar y defender tampoco son cosas sencillas si quieres hacer algo interesante: ¿Habrá coordinación entre las unidades? ¿Atacarán con una formación? ¿Atacarán por flancos o por la retaguardia?. Para defender, ¿dónde situo las unidades? ¿Son todas las unidades iguales o algunas tienen mayor rango de tiro y es mejor ponerlas en sitios elevados?

A poco que quieras hacer algo complejo necesitarás muchas cosas. Lo normal en estos casos es tener varios niveles de IA. En el más bajo podría encajar una máquina de estados aunque sigo sin recomendarlas.

Quizás primero deberías aclarar exactamente qué quieres conseguir.

P.D.: Yo también soy de Las Palmas. Me alegra ver más gente de la tierra por aquí.

Capiflash

Bueno , el juego no es un RTS ni mucho menos , es un juego basado en web , de ahi que todo este en una base de datos MySQL.
A parte de construir  , comercia y atacar , deberia evaluar la posibilidad de hacer frente a un ataque basandose en datos que haya ido acumulando sobre el mismo , o mejor huir y esperar a la proxima. Se que el tema es complejo ,y conseguir algo asi que de la verdadera sensacion de inteligencia es muy complicado.

Que me recomendarias tu para dar de lado a la maquina de estados ??

P.D.  Me he llevado una alegria al ver que eres de Las Palmas  :)

Kagunlou

Debes programar un "sistema" con una serie de valores de entrada (valores del estado actual del juego) y unos valores de salida (acciones que realizar).

Podrías crear varios sistemas, uno para cada ámbito del juego - construccion, guerra y comercio -, eso simplifica bastante la programación pero hace que las decisiones de esos tres ámbitos sean independientes. Con lo que se podría dar lugar a incoherencias si no lo programas con cuidado.

Para el tipo de sistema, una máquina de estados es la solución que te recomiendo si no estás acostumbrado a programar IA. Más que nada para que puedas definir/programar el comportamiento de tu juego exáctamente como lo quieres, haciendo máquinas de estado complejas se puede llegar a crear la ilusion de un "sistema inteligente".

Después utilizaria la experiencia adquirida programando la máquina de estados para, en una hipotética nueva versión del sistema, implementar algoritmos más complejos y más propios de la IA.

Saludos.

Tei

Cita de: "Capiflash"
Alguna idea y/o sugerencia?

Solo te puedo decir lo que he visto hacer en juegos RTS:

Primero un calculo que da "pesos" a todas las posibles acciones(prediccion). Este calculo tiene en cuenta todo, numero de unidades, amenaza percibida del exterior, posible interes de tal accion, veces que te han timado en el pasado. Cuanto mejor sea este calculo de peso, mejor. (pseudocodigo: si dinero sobra y coche pequeño, mejorar coche=100, si dinero sobra y casa pequeña, mejorar casa=101, si dinero > 2 y hambre, comer = 200, si dinero > 30 y ropa=0, comprar ropa =201... )

Luego un codigo muy simple que de las acciones posibles, toma aquella de mas peso, y por tanto mas interesante (decision). (pseudocodigo: recorre todas las acciones, ignora las no realizables, toma la de mas peso, hace esta. Si ninguna accion posible, esperar. )

La parte de prediccion la puedes empezar de forma muy sencilla y tonta. Que tome decisiones triviales. Luego la puedes ir enriqueciendo.
La parte de decision es un codigo muy mecanico y sencillo. Dependiendo como lo estructures todo puede que incluso sean muy poquitas lineas de codigo.

Como dicen por ahi. Modularidad. Puedes hacer pequeños modulos como el que te sugiero, uno para cada grupo de acciones distintas.
Ademas puedes "parametrizar" la parte de prediccion, de modo que puedas configurar personalidades (agresivo, cauto, etc..).  Ejemplo, un jugador IA que tiende a reponder a cualquiere minimo ataque con todo lo que tiene, y otro que no para de reforzarse y practicamente no hace nada hasta que tiene una fuerza imparable. La parametrizacion ademas seria util para balancear estas IA sin tocar lineas de codigo. Tendrias agresivoV1, agresivoV2,..  distintas versiones de agresivo hasta que dieras con las combinaciones de parametros que hacen una ia mas dificil de batir.






Stratos es un servicio gratuito, cuyos costes se cubren en parte con la publicidad.
Por favor, desactiva el bloqueador de anuncios en esta web para ayudar a que siga adelante.
Muchísimas gracias.