[IA] Memetics, le retour !

Répondre
Partager Rechercher
(vous remarquerez l'effort que j'ai fait en mettant un petit tag dans mon titre, pour annoncer le sujet )

Bonjour à tous

Peut-être certains s'en souviennent-ils encore, il y avait quelque temps un sujet traitant de la Memetic AI (que je traduis hasardeusement par "IA mimétique") sur ce même forum. Cette forme d'IA, que je considère encore et toujours comme révolutionnaire, permet de créer des comportements nombreux et complexes, et de les assigner à des créatures par un système de priorité. L'avantage de ce système est donc son évolutivité et son paramétrage aisé, l'inconvénient (majeur) étant la difficulté pour arriver à le faire marcher

Même si le sujet date un peu, je me suis repenché dessus pour essayer vraiment d'en tirer quelquechose. Quelqu'un avait parlé à l'époque de l'IA du dragon de Bioware qui était assez peu efficace. Donc j'ai essayé de faire mieux Enfin rapidement, j'ai oublié le "mieux" pour simplement essayer de faire une IA de dragon tout court

Tout d'abord, le module test (3mo environ).

Ce module comprend un dragon noir adulte (un peu modifié, surtout au niveau des sorts, je lui ai rajouté un sort de zone à distance et boosté ses projectiles magiques), ainsi qu'une bonne troupe de gobelins divers&variés. Le dragon possède une IA mimétique, mais pas les gobelins, faut pas rêver .

Au lancement du mod (je conseille de le lancer en mode MJ, sinon le dragon risque de s'en prendre à vous), l'ami écailleux va entreprendre d'aller à son premier waypoint, mais rencontrera inévitablement sur la route nos amis gobelinoïdes. C'est là que le système entre vraiment en jeu : le dragon va commencer par déterminer le sort le plus pertinent à lancer suivant la situation, ou éventuellement ne pas en lancer si le besoin ne se fait pas sentir, etc.
Normalement, tout ne se passe pas trop mal. Il arrive que le dragon reste plusieurs secondes sans rien faire, je ne suis pas arrivé à déterminer si c'est parcequ'il attend de lancer un sort, parceque le système d'IA bugue, ou parceque je me suis planté quelquepart Mais en théorie, il devrais toujours finir par agir.
Ca, c'est pour la version abordable

Passons aux détails.
En clair, le dragon possède 4 comportements distincts, dont 1 qui n'est pas permanent :
1/ faire le tour de ses waypoints : très basse priorité, ce comportement n'est présent que lorsque le dragon n'a vraiment rien d'autre à faire
2/ rester sur place (et se tourner vers l'ennemi le plus proche) : ce comportement ne survient que rarement, en fait uniquement lorsque le dragon repère un ennemi mais que celui-ci ne l'attaque pas (plus probable dans le cas d'un PJ)
3/ courir après les ennemis, et les attaquer, jusqu'au dernier : ce comportement s'active dès que le dragon est attaqué, et disparait lorsqu'il ne perçoit plus aucun ennemi; c'est le comportement d'arrière plan pendant un combat
4/ lancer un sort : à chaque sort lancé, un comportement de ce type est crée; il y a un système de priorité, qui fait que le dragon ne lance que le sort le plus important à un instant précis (ou le garde en mémoire si il en lance déja un)

Une fois que ces comportements marchèrent correctement, le plus dur était fait Après, il suffit de faire une brève analyse du champ de bataille lorsque le dragon est attaqué ou lorsqu'il perçoit un ennemi, pour entreprendre les actions adéquates. Par exemple, si le dragon est attaqué au corps-à-corps par une grande quantité d'ennemi, il va probablement leur souffler dessus, à moins qu'il y ait un groupe d'ennemi nettement plus puissant à longue distance, auquel cas il lancera un sort de zone sur ceux-ci, etc.
C'est, il me semble, sur ce genre de tests que se fait une bonne part de la qualité d'une IA, à savoir faire les choix les plus logiques au bon moment. Bien sûr, mon système de sort pourrait probablement être amélioré, mais j'ai préféré ne pas placer la barre trop haut. Ce n'est après tout que ma 2e tentative sur la Memetic AI

Bon, pour finir : petit bonus pour ceux qui ont lu jusqu'ici J'ai remarqué que lorsque le dragon se battait contre les gobs, il n'avait pratiquement jamais l'occasion de lancer ténèbres (il ne le fait qu'en cas d'adversaire vraiment puissant), ni projectiles magiques (le souffle ou le nuage puant est souvent plus intéressant). Par contre, lorsqu'on spawne à bonne distance de lui un roublard Duergar FP 13, l'occasion de voir ces sorts se présente rapidement Voilà mon conseil si vous voulez être persuadés de la polyvalence dont peut faire preuve un dragon

Bon, je crois avoir fait le tour. J'espère qu'à défaut de vous intéresser, le module test vous aura diverti

PS: j'ai concçu cette IA de manière très spécifique, ce qui fait qu'elle ne conviendra pas vraiment à d'autre dragons, et je l'ai surtout conçue dans l'idée d'un combat contre les gobelins. Cela dit, il serait intéressant de mesurer le dragon à un PJ, ce que je n'ai jamais vraiment fait
Très intéressant tout ca

C'est une bonne idée, mais peut être tu pourrais nous éclaircir sur un point intéressant : comment ca marche "techniquement", expliquer ton algo général (bon, tu vas me dire c'est un truc de flemmard on peut très bien aller voir de nous même )

Ensuite, j'aimerais savoir ce que ca bouffe comme ressources. Tu utilise le OnHeartBeat ou un quelconque timer ? (DelayCommand à tout hasard )


La dernière question : à quand l'ia évolutive suffisamment rapide pour gérer la totalité des pnj et monstres d'un module ? :bouffon: (heu... le pire c'est que j'ai déjà cherché un algo, j'ai préféré en rester la, on ne dispose pas de moyen de stockage de données suffisamment rapide pour pouvoir retenir autant d'infos que ce que ca demanderais, pi de toutes façon, je suis pas sur que le processeur tienne le coup )
En fait, je me suis servi du Memetic AI Toolkit (http://www.summermeat.net/memeticai/) pour construire l'IA.
Cet ensemble de fonctions, dont l'utilisation est assez difficile à assimiler, permet de gérer les comportements et leurs priorités, les générateurs, les évenements etc.

Concrètement, une créature adaptée à ce système d'IA est paramétrée comme suit :
- sur tous ses évenements (même si certains sont inutiles, par exemple ... OnHeartBeat ), on place un script de "callback" (cb_<évenement>) qui va être chargé de déclencher les différents générateurs de la créature; en clair cela permet d'avoir de multiples scripts pour chaque évenement, ce qui est déja un progrès.
- sur son OnSpawn, pas de callback, mais un script d'initialisation de l'IA ("s_dragon" dans mon cas). C'est dans ce script que l'on crée les comportements qui seront permanents, ainsi que les générateurs et les évenements; ce script est un des seuls que j'ai commenté , ça peut valoir le coup de le regarder

Je ne vais pas encore rentrer dans les détails à propos du fonctionnement de l'IA mimétique, si vous voulez des précisions, cf. ... l'ancien thread qui n'existe plus .

Azrael, si tu as regardé les scripts du module, tu aura peut-être remarqué que le générateur g_dragon n'est actif que sur deux évenement : OnPerception et OnPhysicalAttacked. J'ai pensé que ces deux évenements étaient suffisants pour que le dragon puisse agir de façon à peu près logique.
Malgré tout, effectivement une IA vraiment, vraiment poussée demanderais probablement l'utilisation du OnHeartBeat, vu qu'il permettrait d'analyser régulièrement le champ de bataille, afin d'utiliser une vrai stratégie. Enfin là, c'est vraiment, vraiment poussé

Quant à une IA générique à tous les monstres, ben au début je me suis dit : je vais faire un dragon, puis : je vais faire un dragon et des gobelins, puis : je vais faire une IA générique qui marchera dans les deux cas, puis je suis revenu sur terre
Vu comment certains scripteurs très connus s'y sont cassé les dents (je pense par exemple à l'IA de CODI, qui n'a pas du être faite du jour au lendemain), ben pour l'instant j'abandonne l'idée
Petit supplément : le bout de code dont je parlais, qui gère les choix du dragon en ce qui concerne les sorts.
nVoisins : nombre de créatures ennemies à proximité de oAttacker
fFP : FP de oAttacker
fFPDragon : FP du dragon
fFPTotal : sommes des FPs de l'attaquant et de ses voisins

La fonction MeSendSignal permet de déclencher un évenement précis :
- MeSendSignal(1, "") ordonne au dragon de commencer à attaquer ses ennemis (1 signifie attaque càc).
- MeSendSignal(2, "defense", OBJECT_SELF, 100) ordonne au dragon de lancer un sort de défense, sur soi (2 signifie lancer un sort); 100 est la priorité (entre -100 et 100) du sort lancé.

Code PHP:

MeSendSignal(1"");
//Ennemi proche
if(GetDistanceBetween(oAttackerOBJECT_SELF) <= 5.0)
{
    if(
fFP >= fFPDragon)
    {
        
//Ennemi plus puissant, on adopte une stratégie défensive
        
MeSendSignal(2"defense"OBJECT_SELF100);
    }
    else if(
fFP >= 0.4*fFPDragon)
    {
       
//L'ennemi est particulièrement puissant, on l'attaque avec un sort ciblé
       
MeSendSignal(2"cible"oAttacker15+nFP);
    }
    else if(
nVoisins >= || fFPTotal >= 0.75*fFPDragon || (nVoisins >= && fFPTotal >= 0.33*fFPDragon))
    {
        
//Les ennemis sont soient nombreux, soient puissants, donc on souffle
        
MeSendSignal(2"souffle"oAttacker25+nFPTotal);
    }
}
//Ennemi eloigne
else
{
    if(
nVoisins >= && fFPTotal >= 0.66*fFPDragon)
    {
         
//Beaucoup de monde à l'horizon ! sort de zone, mouais
         
MeSendSignal(2"zone"oAttacker5+nFPTotal);
    }
    else if(
fFP >= 0.2*fFPDragon)
    {
         
//L'ennemi n'est pas particulièrement puissant, un petit sort ciblé suffira
         
MeSendSignal(2"cible"oAttacker10+nFP);
    }

Pour information, en ce qui concerne le dragon noir du module :
- sort ciblé : 5 projectiles magiques
- sort de zone : nuage puant
- souffle : acide
- sort défensif : ténèbres

Voilà
Euh... une petite remarque concernant ta fonction "MeSendSignal"

le second argument est une chaine reconnaissant le type d'attaque.
C'est pas mieux en plaçant une constante ?
ex :
MeSendSignal(2, MSS_DEFENCE, OBJECT_SELF, 100);

avec une chaine, tu vas être obligé de faire une horde de if, else if, else if, else if, else..... tandis qu'avec une constante, un switch (qui est nettement plus rapide) suffirait.

Je me trompe ?
Je suis d'accord avec toi sur ce point, mais malheureusement ... la fonction n'est pas de moi Ni tout le reste des fonctions qu'utilise cette IA

En fait, cette fonction permet de passer trois types d'informations à l'évenement : une chaine de caractère, un entier et un objet. Pour ne pas me prendre trop la tête, j'ai utilisé la chaine de caractère pour le type de sort, mais si jamais il y avait besoin de plus d'informations, il serait possible d'en passer plusieurs à travers un seul entier, en utilisant des flags. Enfin là je m'égare
Je voudrais tout de même rappeler que le mot IA n'est pas à 100% exacte . j'en ai déjà parlé avec Taern.

On peut à la rigueur appeler cela , de la semi-IA ou même ici, cela serait plutôt des comportements préprogrammés.
L'IA cela serait plus ce que Azra parlait. C'est à dire, le fait que l'IA apprend constamment, par expérience, par automatisme, par douleur etc.. Que le NPC commencerait à créer ses propres besoins, et apprendrait de ses erreurs pour pouvoir éviter de les refaire, et de trouver une meilleur solution.

Et le meilleur moyen, cela serait de faire apprendre le NPC de ses erreurs. c'est à dire, que s'il lance un sort d'attaque alors que la situation montre bien que s'il lance pas un sort de défense, il va se faire détruire rapidement.
Le but, serait qu'il fasse l'erreur la première fois pour qu'il apprenne de son erreur. Et que s'il survit, il saura comment réagir petit à petit.
etc...

Pour moi, l'IA c'est l'acte de l'évolution du NPC par ses propres actes et ses propres erreurs, ses propres expériences... En gros, la pré programmation n'est pas de l'IA, mais un semblant d'IA.



Je sais que cela n'a rien avoir, avec le post de Taern, mais c'est juste pour donner mon avis sur l'IA, et de lancer un débat technique sur ça .


(Ce n'est pas du tout un post à la RAAZ Touch )
Certes, certes

Cela dit, la méthode des "memes", avant de devenir un moyen de concevoir une pseudo-IA, a été conçue pour décrire et analyser le comportement humain.
On peut donc supposer qu'en travaillant avec ce système, on se rapproche d'une vraie IA

Et de toutes façons, induire la notion d'apprentissage ne ferais pas à mon avis faire d'une pseudo IA une vraie IA. Le comportement resterait préprogrammé, bien que beaucoup plus complexe, puisque de toutes façons, si deux créatures ayant les mêmes scripts sont confrontées à deux situations rigoureusement identiques, leur réactions seront aussi identiques.

Personnellement, je pense qu'on peut raisonnablement utiliser le terme IA pour des programmes qui simulent plus ou moins bien l'intelligence. Si jamais on aboutit un jour à un programme qui reproduise parfaitement l'intelligence humaine, alors on appellera ça de l'intelligence tout court, et non une IA
Ben tout dépend ce que tu appelle IA.
En programmation, on appelle IA à peut près n'importe quel truc sensé reproduire un comportement existant dans la nature.

Les concepteurs vous dirons que la simulation du mouvement d'un rochet dans un jeu est une IA au sens technique du terme.

Bon, après il y a IA et IA. Moi personnellement je commence à appeler IA lorsqu'il y a réellement un algorithme complexe utilisé pour arriver au résultat, qu'il y a analyse et calcul de plusieurs données provenant de différentes sources pour parvenir au résultat souhaité, ce qui fait donc rentrer le système de Tarn dans ma définition de l'IA.

Bon, après c'est une définition strictement personnelle que je donne la, mais en réalité le terme IA est tellement vaste qu'on ne peut pas définir tout ses composants en utilisant un seul et unique mot...

Voila, un dernier petit mot : j'adooooooooooooore parler de tout ca l'ia c'est vraiment l'aspect de la programmation que je préfère
Alors un conseil : télécharge le toolkit Memetics et fais toi plaisir
Les possibilités sont vraiment très vastes, et c'est d'après moi le support idéal pour programmer une IA.
Citation :
Provient du message de Taern
Si jamais on aboutit un jour à un programme qui reproduise parfaitement l'intelligence humaine, alors on appellera ça de l'intelligence tout court, et non une IA

Totalement faux ,à mon avis, ce qui est fait par l'homme ne peut pas être naturel. L'intelligence est naturel , mais ce que construit l'homme ne pourra jamais être naturel mais bien artificiel. .


Pour répondre, Azra, c'est vrai que c'est totalement vaste, mais à ce moment là, cela peut détruire le sens réel du mot, si tout le monde l'utilise un peu partout . En réalité, on est loin, très loin, telllllllleeeeeemmmennt loin d'avoir créer l'IA que nous nous contentons de ce que nous avons, cela veut dire de la préprog .
Dans ce que tu définis Rat, il n'y a qu'un apprentissage qui va amener à une préférence pour une certaine action, voir une certaine suite d'action par le pnj. De base, tout son comportement est préprogrammé et donc il ne pourra pas vraiment évoluer.
A moins que tu prévois aussi que le pnj puis faire de nouvelles règles avec ce qu'il a comme règles de base et les tester dans le combat afin de les valider ou les délaisser. Il y aurait donc un apprentissage supplémentaire et, de ce fait, deux pnj qui ont pu combattre les mêmes monstres n'auront pas forcément le même comportement vu qu'ils auront ou n'auront pas eu besoin de créer cette nouvelle règle pour gagner.
Bon, c'est peut-être pas réalisable pour nwn mais c'est assez intéressant de partir de règles très basiques pour voir comment évolue le pnj en en créant d'autre plus complexes.
Citation :
Pour répondre, Azra, c'est vrai que c'est totalement vaste, mais à ce moment là, cela peut détruire le sens réel du mot, si tout le monde l'utilise un peu partout
Et bien (on arrive a la philo ca devenait inévitable ) avant d'aller plus loins il faudrait déjà définir l'intelligence. Parce que dans Intelligence Artificielle il n'y a aucun renvoie à l'intelligence humaine. Il faut alors voir où commence l'intelligence. Parce que reproduire le comportement d'un être vivant comme un insecte, totalement dominé par les instincts, c'est faisable et ca a été fait (pour les sources, l'info doit sortir d'un science et vie quelconque, je passerais les détails pasque je ne m'en souviens pas )

Donc les recherches actuelles sont certe loin de reproduire l'intelligence humaine, mais il a été créer des bestiaux réélement digne de l'appélation "intélligent". Je reprendrais l'expemple classique que nombre d'entre vous doivent connaitre, cette société (franco anglaise il me semble, ou peut être avec les allemands s'y casent aussi ?? ché plus ).

Deux robots (physique, ca n'était pas une simulation informatique) on eut chacun les instructions suivantes : l'un devait entrer en contact physique avec l'autre, alors que ce dernier devait à tout prix l'éviter. Les robots n'avait aucune connaissance initiale, juste des accets aléatoires au sens et capacitées physiques qui leur on été donnée (la vue et le contact physique pour les sens, le controle de leurs deux roues pour les capacitées physique). Ils étaient tout deux pourvuent d'une intelligence artificielle évolutivent qui avait pour but de modififer le génome (bon on parle de génome, on a pas de chromosomes, juste des 1 et des 0 ) selon les réussite et les echecs (importante modification du génome en cas d'échac, faible modification en cas de réussite).

Au début de l'experience, les deux robots avaient des comportements totalement aléatoires, les robots entraient en contact par le fruit du hasard de temp à autre.
Puis, au bout de plusieurs jours de rounds continus, les deux robots ont tout deux aquis des comportement bien précits : la proie parcouraient sans cesse les contours de l'arène sans s'arréter à aucun moment, alors que le prédateur restaient immobile jusqu'a ce que la proie passe à sa portée.

Ces deux actions rappellent étrangement des actions animales : la gazelle et l'araignée.

Voila qui fait réfléchir sur l'avancée réélement halucinante de l'ia ces derniers temp, et sur la puissance que représente les alégorithme d'intéligence artificiels évolutifs.

Une fois 4e Age terminé moi je me met aux ia évolutive c'est clair
Répondre

Connectés sur ce fil

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