¿Qué comportamientos deberían tomarse para hacer un combatiente de IA "no perfecto"?


19

Al hacer un combatiente npc, es fácil obvio qué hacer para obtener una máquina de muerte robot optimizando las tácticas de combate, el tiempo y los tipos de ataque, pero más difícil (y más interesante en una pelea) para obtener un enemigo idiosincrásico e impredecible. ¿Qué comportamientos (algoritmos?) Son útiles para crear un enemigo más orgánico y poco convencional?

Editar: Mi caso de uso específico es con enemigos tipo MMO, por ejemplo, World of Warcraft, aunque con menos gráficos involucrados. Tenga en cuenta que eso significa enemigos humanos e inhumanos (animales, monstruos, etc.)

Respuestas:


14

Hay un artículo muy interesante sobre Gamasutra: Errores inteligentes: cómo incorporar la estupidez en su código AI , por Mick West.

Este artículo habla sobre un juego de billar AI. Al implementar una IA de este tipo, es bastante fácil hacer una bola en cada lanzamiento. Una forma simplista de hacer que la IA sea menos "inteligente" es, como se sugiere en otras respuestas, agregar un factor aleatorio al cálculo, haciendo que la IA pierda más.

Pero hay dos defectos principales con este enfoque. Primero, es impredecible. Para un jugador que juega en modo "Fácil", es inaceptable que la IA tenga "suerte". ¿Qué pasa si su factor aleatorio hace que la IA haga un tiro aún mejor, golpeando una bola más valiosa o haciendo un combo? No sabes lo que va a pasar, y tener suerte no debería ser una opción para la IA en un modo fácil.

La otra falla es que el jugador intentará identificar un patrón en los comportamientos de IA. Y con un factor aleatorio simple, no hay patrón. Pero eso no significa que el jugador no verá ningún patrón, sino todo lo contrario. Tan pronto como la IA tenga suerte, el jugador verá una estrategia en su comportamiento. En el artículo, los jugadores se quejan de que la IA juega una estrategia de posición. Cuando solo hay un factor aleatorio en la precisión angular .

Desde mi punto de vista, después de leer este artículo revelador, una IA no perfecta nunca debería usar la aleatorización como factor de simplificación. Es todo lo contrario. Una IA más fácil debería ser más inteligente, pero tratar de ayudar al jugador.

En el artículo Ejemplo de juego de billar, la mejor opción para implementar una IA de "modo fácil" era de hecho eliminar todos los factores aleatorios y agregar una estrategia de posicionamiento. La IA intentaría golpear bolas para preparar un disparo fácil e impresionante para el jugador .

De esta manera, el jugador pensará que tuvo suerte. Y eso es lo que esperas para un juego cuando lo juegas fácilmente.


1
También sería útil para la IA recordar lo que el jugador puede aprovechar. Los desarrolladores pueden pensar que tiene un "bote fácil", pero si no puede hacerlo, la IA debería usar menos la táctica del caso. También es beneficioso, porque puedes entrenar al jugador, recordar lo que no puede hacer y explotar esto a propósito hasta que pueda, de esta manera el jugador no se aburre ni se siente frustrado.
Jonathan Connell

Si bien estoy de acuerdo con no usar la aleatorización, no estoy de acuerdo con "ayudar al jugador": eso sería como hacer trampa, pero mucho peor porque le estarías mintiendo al jugador.
o0 '.

@ Lo'oris: Bueno, no lo veo como una mentira. Cuando los jugadores le dicen al juego que sea fácil con él, él espera que el juego sea suave. Cuando juegas un juego en el que eres realmente bueno con un amigo que lo está descubriendo, siento que está bien darle oportunidades. Hace que el juego sea más agradable para todos.
Tyn

1
Hay una buena publicación de blog de Shawn Hargreaves sobre la aleatorización y la capacidad de un humano para detectar patrones en la aleatoriedad. Esto traduciría toneladas, en este caso, un jugador que juzga incorrectamente las tácticas de un jugador de IA.
Jonathan Connell

1
En realidad, creo que la aleatorización en la precisión es un buen camino a seguir. Con un jugador real que no es tan bueno, a veces cometerá un error y pegará una pelota mejor.
AttackingHobo

10

El concepto clave es evitar dar al NPC "conocimiento perfecto".

  • Margen de error aleatorio en cualquier decisión o acción que implique un cálculo. ejemplo obvio siendo apuntar (es decir, francotiradores stormtrooper). Si no siempre te golpean, es más realista.
  • Line of Sight ... si no pueden verte, puede ser un juego interesante de gato y ratón.
  • Las tácticas de equipo, dependiendo de tu tipo de juego, los enemigos que se adaptan a la situación pueden ser mucho más interesantes. Por ejemplo, si te disparan, no cargarías a ciegas, te cubrirías hasta que el fuego entrante disminuya. O tal vez te sentirías más cómodo apresurándote si tienes compañeros de equipo cerca ... puedes simular esos comportamientos para hacer que los NPC se comporten como si estuvieran vivos.

Estoy seguro de que se darán muchos más ejemplos, tal vez podrías contarnos sobre tu juego y podemos ser más específicos :-)


4

Una forma rápida de representar una IA perfecta para pelear es hacer que tome decisiones incorrectas agregando algo de 'ruido' a sus entradas o salidas. Por ruido quiero decir algunos factores aleatorios.

Aquí hay un pequeño ejemplo de salida:

  • El algoritmo perfecto produce tres posibles acciones clasificadas con una puntuación.
  • Agregue un valor aleatorio a cada puntaje.
  • Elige la mejor puntuación.

Aquí hay algunas ideas para aportes:

  • Si las acciones se basan en la salud del oponente, agregue un factor aleatorio (digamos +/- 10 para una barra de salud 0-100) al estado percibido por AI.
  • Lo mismo para la calificación de acciones, si AI sabe que algunos ataques son más fuertes que otros, agregue / reste aleatoriamente algunos valores allí.

Una cosa obvia a tener en cuenta es la velocidad de la IA. En la mayoría de los juegos, las IA pueden reaccionar MUCHO más rápido que los humanos (especialmente en las peleas) y hacer multitarea aparente (muy visible en los juegos RTS). Por lo tanto, debe actuar sobre eso, manteniendo la IA un poco lenta (tal vez de manera adaptativa) y limitando la cantidad de cosas que puede hacer en un marco de tiempo determinado (es decir, una acción cada medio segundo).

¡Espero que esto ayude y buena suerte!


3

Es difícil dar una respuesta directamente útil sin saber exactamente qué está tratando de hacer.

Tengo dos cosas que decir sobre el tema que podrían ayudarlo.

Lo primero (y este es, con mucho, el más importante), si estás tratando de hacer que el enemigo se sienta más interesante y humano, entonces tus tácticas de combate son irrelevantes. El truco para hacer que los jugadores "crean" que un enemigo está vivo es usar animación, sonidos y pequeños detalles para implicar el comportamiento humano. La IA perfecta podría caminar alrededor de una esquina, ver a un jugador y disparar. Una IA humana podría caminar alrededor de una esquina, ver a un jugador, tener una mirada de sorpresa en su rostro y gritar alarmado y disparar. El primero parece robótico. El segundo parece humano. Ambos están usando IA idéntica en todos los sentidos, excepto la inserción de la animación justo antes de disparar (o, para mantener el comportamiento táctico igual, durante el disparo).

Segundo, evita aleatorizar. Los jugadores no lo aprecian tanto como los diseñadores quieren pensar que lo harán. Los jugadores no ven "la computadora generó un 1 de cada 100, seguido de un 5, 3 y 4, por lo que los factores de error para los últimos cuatro tiros fueron solo 1%, 5%, 3% y 4%, y eso es por qué moriste en medio segundo esta ronda ". Los jugadores solo ven enemigos que a veces fallan salvajemente y otras veces los clavan repetidamente sin razón aparente, lo cual es increíblemente frustrante. El buen diseño del juego se basa principalmente en crear patrones que los jugadores humanos puedanobservar, aprender y vencer, y hacer que el jugador tenga éxito basado en su propio juicio, habilidades e intuición, en lugar de determinar si el jugador tuvo suerte. La necesidad de aleatorizar proviene de la experiencia con juegos de mesa y juegos de apuestas, los cuales son medios increíblemente diferentes a los videojuegos (y lo que funciona en un medio a menudo no tiene sentido en otro).


1

Recuerdo que en nuestro curso de IA en la universidad hubo un tema sobre cómo hacer que la IA sea más "humana" y menos perfecta. Eso fue hace muchos años, así que solo recuerdo algunos puntos importantes de mi mente.

  • Utilice "bibliotecas de movimientos". Si estás luchando contra un orco, dale 3 rutinas de combate que repitan de vez en cuando. Esto hace que los combates sean más fáciles al ser más predecibles, lo que parece ser lo contrario de lo que quieres, pero hace que la IA sea menos "máquina perfecta" y más "novato repitiendo el mismo movimiento una y otra vez".
  • Suboptimizar, si es posible. Si, como dices, tu IA se basa en calcular el mejor movimiento, pon un límite artificial en este cálculo. Haga la búsqueda menos profunda o limite el número de pasos. En lugar del mejor movimiento, la IA elegirá simplemente un buen movimiento. Esto puede agregar mucha variedad al comportamiento de tus enemigos, ya que hay muchos más buenos que mejores movimientos.
  • Cometer errores a propósito. En lugar del mejor movimiento, elija el segundo o tercer mejor. O incluso elija un movimiento que tenga mala utilidad. Esto puede abordar su punto de "imprevisibilidad".

Por supuesto, estos son solo consejos generales que deben estudiarse y probarse para cada caso, y de hecho pueden hacer que su IA se vea aún más artificial de lo previsto. Sin embargo, creo que son un buen punto de partida.


0

Acabo de ver esta ventana emergente y quería compartir una idea que he usado en el pasado.

Digamos que el personaje tiene tres movimientos y cada uno tiene una puntuación, una puntuación más alta es un movimiento mejor. (Otras respuestas hablan sobre agregar ruido a la creación de este puntaje).

  • Ataque con una espada (30 puntos)
  • Hechizo de fuego (50 puntos)
  • Hechizo de hielo (20 puntos)

Resume el total de puntos (100)

Saca la estadística de inteligencia del personaje del valor máximo posible para esta estadística (digamos 60 de 100).

Genere un número aleatorio entre 0 (o algún otro piso) y la relación de inteligencia (0.6), multiplique por el total de puntos (100). En nuestro ejemplo, digamos que el resultado es 45.

Ahora comienzas a restar los movimientos incorrectos de este valor hasta llegar a cero. (Restar en orden).

Primero, consideramos el hechizo de hielo, que obtuvo un puntaje de 20. 45 - 20 = 25. Esto está por encima de cero, así que tiramos el hechizo de hielo.

Segundo, mira el ataque con una espada, por valor de 30 puntos. 25-30 = -5. Llegamos a nuestro umbral, así que elegimos el Ataque con una acción de espada.

En este sistema, un personaje con poca inteligencia no elegirá el mejor movimiento. Y un personaje con alta inteligencia a menudo elegirá el mejor movimiento. (En este ejemplo, un personaje con inteligencia perfecta elige el mejor movimiento el 50% del tiempo).

Agregar un mecanismo de piso al número aleatorio aumentará la posibilidad de que se seleccionen mejores movimientos.

Al usar nuestro sitio, usted reconoce que ha leído y comprende nuestra Política de Cookies y Política de Privacidad.
Licensed under cc by-sa 3.0 with attribution required.