Intelligence Artificielle : Quel système utilisez-vous et dans quels buts ?

Répondre
Partager Rechercher
La question s'adresse, notamment, à tous ceux qui scriptent pour des modules persistants.

J'ai regardé le pack de Tony_K sur le Vault, et il s'avère que ça résout quand même avant tout les questions relatives aux compagnons.

En ce qui concerne les monstres, ou bien les PNJs quels qu'ils soient, quel système utilisez-vous et dans quels buts ?

Je viens pas de répéter le titre du topic là ?

Notamment pour les monstres, des tentatives de fuite pourraient apporter un peu d'intérêt (le bête magot qui se laisse déchirer au milieu du bois et qui voit la fine équipe fondre sur lui, avec son INT il devrait filer non ?).

Pour les NPCs en ville, des adaptations des systèmes de NWN1, comme celui de Deyo et Ariok (de tête) pour les faire changer de zone la nuit ?
L'AI de TonyK gère le comportement des monstres autant que celui des compagnons.

Les jets de moral sont implémentés et bien d'autres choses purement orientées "combat" cependant.
Vu que c'est un Hall of Fame apparemment justifié (9,89 pour 70 votes), ça a l'air d'être du très bon travail.

Plusieurs versions sont disponibles :

- Celle où on met tout dans l'override et on laisse faire la magie du script (utilisable pour la campagne)
- Celle où il y a un HakPack pour un module, quand on ne sait pas scripter
- Celle où on a les scripts à importer, quand on sait scripter et qu'on veut modifier des trucs.
Bon donc c'est bien ce que je pensais ce hakpack est génial pour tout ce qui est module solo et campagne. Clair que je vais me le glisser dans l'override ou l'ajouter en .hak quand je peux.

Mais pour ce que je voudrais faire, ça n'est pas tellement ce que je cherche.

Donc, le programme, vu que ce post reste lettre morte (ça doit être tout le pâté que je mange qui fait ça) ça va être en gros :

Utiliser le système existant des FLAGS ( NW_COWARD etc ) et l'optimiser pour les PWs, tant sur le plan des créatures hostiles que des commoners.
Je vais plutot de parler de ce que je fait en gros au niveau general :

Sur les zones "civilisées" j ai un script qui spawn/despawn les creatures a chaque changement nuit/jour.

De jour bcp de commoner et quelques gardes, de nuit peut de commoner et plus de gardes.

Je ferme les portes et les verouilles la nuit avec un systeme de detection d effraction et appel des gardes.

Si les gardes butent uhn joueur avec une raison valable ( vol, tentative effaction etc ), j ai un systeme qui envoie le mecrant en tole ( sans le tuer ).

Voila, pour l instant, je peaufine, ajoute des truc petit a petit.

Pour L IA des monstres/compagnons, j utilise aussi l AI de Tony K qui est un excellent travail.
Arf désolé Ariok j'avais pas vu ton message. Pour les NPCs en ville, tu te sers des Flags d'animation ou pas ?

Sinon, je remonte ce topic qui n'intéresse personne, mais comme j'en ai causé avec M'am Deyo et puis que je fais ce que je veux, je voulais signaler que je fignole mon système pour les créatures hostiles qui gèrera :

Les postes hiérarchiques (Boss, Adjoint) pour des créatures plus organisées
Les rôles (Soigneur, Lanceur de sort, Archer etc) pour des combats stratégiques
Le moral (fuite et compagnie) avec attribution d'xp pour la fuite

Tout ça à base de contrôleur unique par zone et de tableaux pour les équipes générés depuis des triggers et des waypoints customisés.
Outre quelques trucs que je dois scripter (le script ca commence a bien entrer dans ma petite cervelle ), je compte scripter quelques trucs basiques pour commencer - en me référant de mon expérience sur différents mmo.

A voir si ca sera viable et si j'y arrive, mais ca concernerait que les combats :

- tout au ramdom/hasard : Pourquoi ? Bha parce que sur la plupart des jeux multi, tous les monstres ont des capacités basé sur une donnée "fixe" - soit le temps, soit les points de vie.

Sur un mmo un boss fera telle action si ces points de vie arrivent à un certain % où il fera telle action au bout d'un certain laps de temps. Aucun mmo que je connais propose des tactiques aléatoires - aucun monstre ne va s'acharner sur un joueur, changer de cible, attaquer en priorité les soigneurs, s'enfuir, lancer un sort, attaquer au corps à corps, utiliser un objets. Le tout basé sur des données aléatoires (pas necessaire de se basé sur des HP ou du temps - on peut très bien se créer des formules mathematiques simple mais qui prennent en compte plusieurs variables comme les stats, les dons, le nombre de coéquipiers, d'adversaire, etc).

Coté ressources PC que ca prend j'en sais rien mais ca reste mon idée de base sur une IA de combat. Que le même type de monstre se comporte différemment, ce qui laisse au joueur moins de chance de se "familiariser" avec une tactique de combat pré-défini.

Sur un mmo, le joueur aime pas perdre, ce qui explique en majorité les IA escargots. Sur NWN c'est autre chose.

L'avantage d'une IA simpliste, est que celle-ci favorise le jeu en groupe et le rôle de chaque classe dans ce groupe.

Une IA très (trop) poussée met à mal ces points :

- Si un Guerrier ne peut plus assumer son rôle de mur parce que l'IA juge qu'il vaut mieux attaquer les soigneurs en premier, on condamne l'utilité du Guerrier.

- Si un Roublard ne peut plus faire d'attaques sournoises parce que l'IA juge qu'il vaut mieux prendre le roublard comme cible principale, on condamne le rôle du Roublard (et du Guerrier, si ce dernier accompagne ledit Roublard).

Donc dans le cas d'une IA très poussée, et en exagérant un peu, mieux vaut jouer Prêtre ou Druide pour être sûr d'avoir sa part d'utilité dans un groupe.
Je pars plus du principe qu'un monstre ayant une intelligence assez haute, tapera de surcroit les soutiens avant de taper sur le guerrier (un groupe de joueur fait de même, je vois pas pourquoi un monstre ne pourrait pas le faire).

Ensuite ca dépend des probabilités qu'il tape un soigneur. Si elle est que de 5%, par exemple, à chaque fois que l'ennemi doit changer de tactique ca reste très faible.

Mais bon j'ai une grande méconnaissance coté joueuse puisque j'ai tout le temps le nez dans l'éditeur - à part la campagne officielle, j'ai du jouer à peine une dizaine d'heure en mode multi
J'ai oublié de signaler l'existence de JAI (Jasperre Artificial Intelligence ) et de Olander AI qui sont très chiadés.

Sinon, t'as pas tort Deyonara... ça mérite réflexion.

En tout cas pour le moment, je travaille sur l'idée des Représentations pour gérer le comportement des créatures vis à vis des joueurs.

Quand on rencontre quelqu'un, on se fait une première représentation de sa personne, en fonction d'un certain nombre de critères. Puis en parlant avec elle, on va faire évoluer cette représentation. Pareil pour un groupe de personnes.

Eh bien, on pourrait agir de même pour les encounters. Quand ils commencent à attaquer, ils se font une idée de l'ennemi, des cibles et des tactiques, ceci évoluant au fur et à mesure. Et plus leur intelligence est élevée, plus le nombre de "traits" dans la représentation sera important.
A mon sens, le vrai problème de l'AI de NWN ne réside pas tant dans l'attaque de tel ou tel, mais plutôt dans les abus possibles dont ne se privent pas les joueurs:

  • passer en invisible au milieu d'une horde qui ne remarquera rien même avec des oreilles de lapin !
  • des créatures qui se buffent après le contact
  • des MdO/Roublards/Assassins qui ne profitent pas de leurs capacités de dissimulation
  • l'utilisation des sorts complètement défaillante (et encore, c'était pire au début, ça s'est amélioré au fil des patchs nwn1)

J'ai travaillé à fond sur les premiers points mais je n'ai rien fait pour les lanceurs de sort. Sauf pour des PNJ particuliers qui bénéficient de sorts permanents scriptés dans leur OnSpawn. Il faudrait, je pense, créer un script calculant la pertinence des sorts à choisir dans leur liste en fonction de qui est en face. Mais c'est très long à faire, malheureusement, et je n'ai pas eu le temps de me pencher dessus.

Dans NWN, les créatures ne cherchent pas à comprendre, elles attaquent en masse le premier aperçu. OnPerceive est le déclencheur de l'IA. C'est à cet endroit qu'il faut affiner en premier.

Il y a toutefois quelques bricoles que j'ai du mal à cerner. Par exemple, pourquoi une créature ayant des dons de désarmement ou de renversement ne tente pas de les utiliser systématiquement, et certaines fois ne les utilise jamais... Je me suis toujours demandé s'il y avait un jet déterminant préalable ou pas (je n'ai pas réussi à mettre la main dessus, et je suppose que c'est codé en dur ), et si son DD n'était pas trop élevé par rapport à certains facteurs (BAB, CA opposée, etc)

@Sonia Blade:
c'est ce que je reproche à presque tous les concepteurs, ils ne jouent pas. Ils accommodent le jeu d'une façon qui correspond rarement à ce qui est "jouable" mais plutôt à ce qui correspond à leur vision de ce que devrait être le jeu. Pour paramétrer finement les PNJ, il faut avoir joué sérieusement (oui, je sais, c'est antinomique ) et connaître points forts et points faibles de toutes les classes et il faut avoir en permanence en tête ce qui est possible ou pas sur le module créé: c'est une question vitale d'équilibre et de plaisir de jeu. En gros, il faut être un Grosbill PNJ dans l'environnement qu'on a créé soi-même
Bon concernant les moddeurs qui sont pas des joueurs, je crains que ce ne soit un sujet à part donc je ne relance pas.

Pour ce qui est des défauts que tu décris, il faudrait se lancer dans une étude approfondie de l'ensemble des scripts que couvre la question, et là, il faudrait un article complet, parce que ça en fait pas mal.

Mais disons que le OnPerceived n'est pas tout, et que si tu veux entrer dans le détail de ce qui se passe pour les combats, il faut disséquer DetermineCombatRound() et toutes les sous fonctions qui lui sont intégrées. Et ça en fait un paquet Vu que ça part ensuite dans les talents et Cie. Et puis tu as toutes les variables de SpawnCondition pour déterminer les modes de combats etc.

Mais en gros tu peux tout à fait modifier tout ça de A à Z. Moi pour le moment je me sers des talents intégrés, mais c'est un peu hasardeux, notamment pour les Casters...
Ca fait un moment que je ne suis pas passé sur cette section du forum, mais ce sujet me titille un peu .

Par curiosité, est-il toujours impossible de faire simplement des matrices dans Aurora / Electron ?

Parce qui si cela est possible, vous pouvez vous pencher sur ce qui se fait en Q-Learning et / ou réseau de neurones, qui ne sont ni plus ni moins que de la gestion de poids dans une matrice. Bon après, il y a aussi une question d'architecture qui peut évoluer, mais les NN à la base étaient assez simplistes et avaient une architecture figée.

Je suis curieux de voir ce qu'il est possible de faire maintenant avec Electron...

@Sonia : Tu peux aussi gérer des listes d'aggro comme cela se fait dans les MMO. Suivant telle ou telle action d'un PC, le NPC le fait monter ou descendre dans sa liste. Celui qui est en haut de la liste se mange alors les attaques du NPC. De fait, tu peux avoir des utilisations de dons provoquant beaucoup d'aggro, comme renversement par exemple, faisant monter le personnage l'utilisant dans la liste. Idem pour certains sorts, par exemple un gros soin de groupe, et paf le Prêtre se retrouve ciblé par les bestioles, etc etc...
Ouhla, j'ai pas fait Math Spé, moi, les matrices j'ai jamais pratiqué :P

Bon, sans rire, je le note. Pour le moment, il est fort peu probable que je me lance dans de tels calculs, d'abord parce que je n'y connais rien, ensuite parce que c'est un poil complexe pour le moment, enfin pour ne pas bouffer toutes les ressources CPU :

Code PHP:

Le Q-Learning est connu pour être extrêmement vorace en ressources 
(mémoireoccupation du processeur, ...) 
Par contre, la possibilité existe de faire calculer tout ça par un plugin spécifique du logiciel tiers nwnX4. Et dans ce cas, on pourrait se lâcher au niveau calcul.
Voilà. Bon, et puis l'objectif n'est pas de battre un Grand Maître aux échecs. Donc il faudra voir éventuellement à utiliser des moyens appropriés. En tout cas merci pour l'indice.
Répondre

Connectés sur ce fil

 
1 connecté (0 membre et 1 invité) Afficher la liste détaillée des connectés