Quels comportements faut-il adopter pour devenir un combattant IA «non parfait»?

19

Lorsque vous faites un combattant PNJ, il est facile de savoir quoi faire pour obtenir un robot de mort en optimisant les tactiques de combat, le calendrier et les types d'attaque, mais plus difficile (et plus intéressant dans un combat) pour obtenir un ennemi idiosyncrasique et imprévisible. Quels comportements (algorithmes?) Sont utiles pour créer un ennemi plus organique et non conventionnel?

Edit: Mon cas d'utilisation spécifique concerne les ennemis de type MMO, par exemple World of Warcraft, bien qu'avec moins de graphismes impliqués. Notez que cela signifie à la fois des ennemis humains et inhumains (animaux, monstres, etc.)

Kzqai
la source

Réponses:

14

Il y a un article très intéressant sur la question sur Gamasutra: Erreurs intelligentes: Comment intégrer la stupidité dans votre code AI , par Mick West.

Cet article parle d'une IA de jeu de billard. Lors de la mise en œuvre d'une telle IA, il est assez facile de lui donner une balle à chaque tir. Une manière simpliste de rendre l'IA moins "intelligente" consiste, comme suggéré dans d'autres réponses, à ajouter un facteur aléatoire au calcul, ce qui rend l'IA plus manquante.

Mais il y a deux défauts majeurs avec une telle approche. Tout d'abord, c'est imprévisible. Pour un joueur jouant en mode "Facile", il est inacceptable que l'IA soit "chanceuse". Que se passe-t-il si votre facteur aléatoire fait que l'IA réussit encore mieux, frappe une balle plus précieuse ou fait un combo? Vous ne savez pas ce qui va se passer, et avoir de la chance ne devrait pas être une option pour l'IA en mode facile.

L'autre défaut est que le joueur tentera d'identifier un schéma dans les comportements de l'IA. Et avec un simple facteur aléatoire, il n'y a pas de schéma. Mais cela ne signifie pas que le joueur ne verra aucun motif, bien au contraire, en fait. Dès que l'IA a de la chance, le joueur verra une stratégie dans son comportement. Dans l'article, les joueurs se plaignent du fait que l'IA joue une stratégie de position. Lorsqu'il n'y a qu'un facteur aléatoire dans la précision angulaire .

De mon point de vue, après avoir lu cet article révélateur, une IA non parfaite ne devrait jamais utiliser la randomisation comme facteur de simplification. C'est tout le contraire. Une IA plus simple devrait être plus intelligente, mais essayer d'aider le joueur.

Dans l'exemple de jeu Pool, la meilleure option pour implémenter une IA en "mode facile" était en fait de supprimer tous les facteurs aléatoires et d'ajouter une stratégie de positionnement. L'IA essaierait de frapper des balles afin de préparer un tir facile et impressionnant pour le joueur .

De cette façon, le joueur pensera qu'il a eu de la chance. Et c'est ce que vous attendez d'un jeu lorsque vous jouez facilement.

Tyn
la source
1
Il serait également utile que l'IA se souvienne de ce dont le joueur peut profiter. Les développeurs peuvent penser qu'il a un `` pot facile '' mais s'il ne le peut pas, la tactique de cas devrait être moins utilisée par l'IA. C'est également bénéfique, car vous pouvez entraîner le joueur, vous souvenir de ce qu'il ne peut pas faire et l'exploiter à dessein de temps en temps jusqu'à ce qu'il le puisse, de cette façon le joueur ne s'ennuie pas, ni n'est frustré.
Jonathan Connell
Bien que je sois d'accord pour ne pas utiliser la randomisation, je ne suis pas d'accord pour "aider le joueur": ce serait comme tricher, mais bien pire parce que vous mentiriez au joueur.
o0 '.
@ Lo'oris: Eh bien, je ne vois pas cela comme un mensonge. Lorsque les joueurs disent au jeu de se détendre avec lui, il s'attend à ce que le jeu soit doux. Lorsque vous jouez à un jeu avec lequel vous êtes vraiment bon avec un ami qui vient de le découvrir, je pense que c'est tout à fait correct de lui donner des opportunités. Cela rend le jeu plus agréable pour tout le monde.
Tyn
1
Il y a un bon article de blog de Shawn Hargreaves sur la randomisation et la capacité d'un humain à repérer des schémas de hasard. Cela se traduirait par, dans ce cas, un joueur jugeant incorrectement les tactiques d'un joueur IA.
Jonathan Connell
1
En fait, je pense que la randomisation sur la précision est une bonne façon de procéder. Avec un vrai joueur qui n'est pas si bon, il fera parfois une erreur et frappera une meilleure balle.
AttackingHobo
10

Le concept clé est d'éviter de donner au PNJ une "connaissance parfaite".

  • Marge d'erreur aléatoire sur toute décision ou action impliquant un calcul. exemple évident de visée (c.-à-d. tireurs d'élite stormtrooper). S'ils ne vous frappent pas toujours, c'est plus réaliste.
  • Ligne de vue ... s'ils ne peuvent pas vous voir, cela peut faire un jeu intéressant de chat et de souris.
  • Les tactiques d'équipe, selon votre type de jeu, les ennemis qui s'adaptent à la situation peuvent être bien plus intéressants. Par exemple, si vous vous faites tirer dessus, vous ne chargerez pas aveuglément, vous vous mettrez à couvert jusqu'à ce que le feu entrant cesse. Ou peut-être que vous vous sentiriez plus à l'aise de vous précipiter si vous avez des coéquipiers à proximité ... vous pouvez simuler ces comportements pour que les PNJ se comportent comme s'ils étaient vivants.

Je suis sûr qu'il y a une tonne d'autres exemples qui seront donnés, peut-être pourriez-vous nous parler de votre jeu et nous pouvons être plus précis :-)

Joel Martinez
la source
4

Un moyen rapide de rendre une IA parfaite combattable est de lui faire prendre des décisions imparfaites en ajoutant du `` bruit '' à ses entrées ou à ses sorties. Par bruit, j'entends certains facteurs aléatoires.

Voici un petit exemple de sortie:

  • L'algorithme parfait produit trois actions possibles classées avec un score.
  • Ajoutez une valeur aléatoire à chaque score.
  • Choisissez le meilleur score.

Voici quelques idées de contribution:

  • Si les actions sont basées sur la santé de l'adversaire, ajoutez un facteur aléatoire (disons +/- 10 pour une barre de santé de 0 à 100) à l'état perçu par l'IA.
  • Idem pour le classement des actions, si l'IA sait que certaines attaques sont plus fortes que d'autres, ajoutez / soustrayez au hasard certaines valeurs.

Une chose évidente à prendre en considération est la vitesse de l'IA. Dans la plupart des jeux, les IA peuvent réagir BEAUCOUP plus rapidement que les humains (en particulier dans les combats) et effectuer un multitâche apparent (très visible dans les jeux RTS). Vous devez donc agir en conséquence, en gardant l'IA un peu lente (peut-être de manière adaptative), et en limitant la quantité de choses qu'elle peut faire dans un laps de temps déterminé (c'est-à-dire une action chaque demi-seconde).

J'espère que ça t'aide et bonne chance!

jv42
la source
3

Il est difficile de donner une réponse directement utile sans savoir exactement ce que vous essayez de faire.

J'ai deux choses à dire sur le sujet qui pourraient vous aider.

Première chose (et c'est de loin la plus importante), si vous essayez de rendre l'ennemi plus intéressant et plus humain, alors vos tactiques de combat ne sont pas pertinentes. L'astuce pour faire "croire" à un ennemi vivant est d'utiliser des animations, des sons et de petits détails pour impliquer un comportement humain. L'IA parfaite peut marcher dans un coin, voir un joueur et tirer. Une IA humaine pourrait se promener dans un coin, voir un joueur, avoir un regard surpris sur son visage et crier alarmée, et tirer. Le premier semble robotique. Le second semble humain. Les deux utilisent une IA identique dans tous les sens, à l'exception de l'insertion de l'animation juste avant le tournage (ou, pour garder le même comportement tactique, pendant le tournage).

Deuxièmement, évitez de randomiser. Les joueurs ne l'apprécient pas autant que les concepteurs veulent le penser. Les joueurs ne voient pas "l'ordinateur a généré un 1 sur 100, suivi d'un 5, 3 et 4, donc les facteurs d'erreur pour les quatre derniers tirs n'étaient que de 1%, 5%, 3% et 4%, et c'est pourquoi vous êtes mort en une demi-seconde ce tour. " Les joueurs ne voient que des ennemis qui parfois manquent sauvagement et d'autres fois les clouent à plusieurs reprises sans raison perceptible, ce qui est incroyablement frustrant. Une bonne conception de jeu consiste en grande partie à construire des modèles que les joueurs humains peuventobserver, apprendre et battre, et réussir le joueur sur la base de son propre jugement, de ses compétences et de son intuition plutôt que de déterminer si le joueur a eu de la chance. L'envie de randomiser vient de l'expérience avec les jeux de table et les jeux de hasard, qui sont tous deux des supports incroyablement différents des jeux vidéo (et ce qui fonctionne souvent sur un support n'a pas de sens dans un autre).

Sean Middleditch
la source
1

Je me souviens que lors de notre cours d'IA au collège, il y avait un sujet sur la façon de rendre l'IA plus "humaine" et moins parfaite. C'était il y a de nombreuses années, donc je me souviens juste de quelques puces du haut de mon esprit.

  • Utilisez des "bibliothèques de mouvements". Si vous combattez un orc, donnez-lui 3 routines de combat qu'ils répètent de temps en temps. Cela facilite les combats en étant plus prévisible, ce qui semble être le contraire de ce que vous voulez, mais rend toujours l'IA moins "machine parfaite" et plus "noob répétant le même mouvement encore et encore".
  • Sous-optimiser, si possible. Si, comme vous le dites, votre IA est basée sur le calcul du meilleur coup, mettez une limite artificielle à ce calcul. Rendez la recherche moins profonde ou limitez le nombre d'étapes. Au lieu du meilleur coup jamais, l'IA choisira simplement un bon coup à la place. Cela peut ajouter beaucoup de variété au comportement de vos ennemis, car il y a beaucoup plus de bons que de meilleurs mouvements.
  • Faites des erreurs exprès. Au lieu du meilleur coup, choisissez le deuxième ou le troisième meilleur. Ou même choisissez un coup qui a une mauvaise utilité. Cela peut répondre à votre point «d'imprévisibilité».

Bien sûr, ce ne sont que des conseils généraux qui doivent être étudiés et testés pour chaque cas, et peuvent en effet rendre votre IA encore plus artificielle que prévu. Cependant, je pense qu'ils sont un bon point de départ.

angarg12
la source
0

Je viens de voir ce pop up et je voulais partager une idée que j'ai utilisée dans le passé.

Disons que le personnage a trois coups et que chacun est marqué, un score plus élevé est un meilleur coup. (D'autres réponses parlent d'ajouter du bruit pour créer ce score.)

  • Attaque avec une épée (30 points)
  • Sort de feu (50 points)
  • Sort de glace (20 points)

Résumez le total des points (100)

Retirez la statistique d'intelligence du personnage de la valeur maximale possible pour cette statistique (disons 60 sur 100).

Générez un nombre aléatoire entre 0 (ou un autre étage) et le rapport d'intelligence (0,6), multiplié par le total des points (100). Dans notre exemple, disons que le résultat est 45.

Maintenant, vous commencez à soustraire les mauvais mouvements de cette valeur jusqu'à ce que vous atteigniez zéro. (Soustrayez dans l'ordre.)

Tout d'abord, nous considérons le sort de glace, qui a marqué un 20. 45 - 20 = 25. Il est supérieur à zéro, nous jetons donc le sort de glace.

Deuxièmement, regardez l'attaque avec une épée, qui vaut 30 points. 25 - 30 = -5. Nous atteignons notre seuil, nous choisissons donc l'attaque avec une action d'épée.

Dans ce système, un personnage avec une faible intelligence ne choisira pas le meilleur coup. Et un personnage doté d'une grande intelligence choisira souvent le meilleur coup. (Dans cet exemple, un personnage doté d'une intelligence parfaite choisit le meilleur coup 50% du temps.)

L'ajout d'un mécanisme de plancher au nombre aléatoire augmentera les chances que de meilleurs mouvements soient sélectionnés.

Xtros
la source