JeuWeb - Crée ton jeu par navigateur
[débat 4] L'importance de l'IA... - Version imprimable

+- JeuWeb - Crée ton jeu par navigateur (https://jeuweb.org)
+-- Forum : Discussions, Aide, Ressources... (https://jeuweb.org/forumdisplay.php?fid=38)
+--- Forum : Gameplay, gamedesign (https://jeuweb.org/forumdisplay.php?fid=48)
+--- Sujet : [débat 4] L'importance de l'IA... (/showthread.php?tid=3412)

Pages : 1 2 3


RE: [débat 4] L'importance de l'IA... - Mycroft - 06-02-2009

(06-02-2009, 10:47 AM)Argorate a écrit : Oui, donc pour l'histoire de "génétique", c'est bien se que j'avais en tete, même si le terme génétique n'est pas le plus pertinent ici, puisqu'on parle de comportement et de choix et qui n'est donc pas régis par les gènes (vive le libre arbitre...) Enfin bref passons ^^

Ce qui est "génétique" c'est la méthode de selection, et surtout de mixer les traits à chaque nouvelle génération pour créer pleins d'hybride.

En gros un algo génétique, ça revient à ne pas vraiment connaitre la solution a priori et d'essayer ce qui a l'air de mieux marcher.

Citation :Donc on travail sur des comportements. Le problème c'est: comment vous déterminez quand on doit passer a une "génération" suivante? Quand es-ce qu'on check-liste chaque pnj pour voir s'ils ont accomplit leurs taches? Pour pouvoir juger si leur méthode de comportement est la bonne?
Tout les 1er du mois? Tout les 15 jours? Combien de temps faut-il pour qu'ils aient pour évoluer?

C'est pas nécessairement des "comportements", c'est simplement des "traits", choisis un peu arbitrairement.

Par exemple tu peux choisir que la vitesse est un trait ajustable, ce qui risque de se passer c'est que de génération en génération les créatures seront de plus en plus rapide. C'est pas forcément ce que tu cherches non plus.

Comme ici ton problème c'est plus une question d'IA, c'est plus adapté que les variables soient plutôt liés à des "décisions" ou des comportements. Ton but c'est d'avoir les meilleurs décisions pas les meilleurs traits physique (comme vitesse, force, etc..)

Le plus important c'est:
- le choix des traits
- le critère de selection.

Par exemple pour le critère de selection tu peux imaginer de garder pour chaque créature un score.

Exemple:
Un "nouveau-né" à un score de 0.
Pour chaque nouveau tour ou il survit, il gagne 1 point.
Pour chaque PJ tué, il gagne 5 points.

Par contre si tu changes ton critère en inversant :
Pour chaque nouveau tour où il survit, 5 points.
Pour chaque PJ tué, il gagne 1 point.

Tu vas selectionner des comportements beaucoup moins agressif. Plus fuyard... Donc c'est très important d'avoir une "bonne mesure". (D'ailleurs c'est toujours vrai à chaque fois que tu vois le mot "meilleur", il faut toujours se poser la question "quelle est la mesure?" ou en français plus courant "quels sont les critères?")

Mais avant de selectionner ces critères, il faut se pencher sur comment tu vas modéliser le comportement/les décisions. Une fois que tu as un modèle basique, tu peux commencer à jeter dans ton modèles des variables qui influent sur le résulat finale.

Pour les générations, c'est arbitraire ça dépend de ton jeu. Il faut laisser suffisament de temps aux créatures d'intéragir avec tes pjs, mais que ce soit pas trop lent non plus. Tu peux décider que tous les 100 ou 1000 créatures générées tu passes à la génération N+1.

Pour la générer tu peux par exemple croiser les 20 meilleurs de la génération N, 10 meilleurs de la génération N-1, 5 meileurs de la generation N-2.

Par contre il faudra probablement faire ce test pour chaque type de créature distinct. Tu veux pas qu'un rat réagisse comme un dragon et inversement.


RE: [débat 4] L'importance de l'IA... - Anthor - 06-02-2009

Faut pas non plus oublier que c'est pas forcement le plus adapté pour des serveurs web standards.


RE: [débat 4] L'importance de l'IA... - Blarg - 06-02-2009

À mon avis, il faut trouver les évènements et stratégies qui gèrent un combat si on souhaite créer une IA un peu plus réactive.

Il faut créer les comportements de l'IA (comme attaquer, se cacher, fuir, hit-and-run, comportement de meute...)
Ensuite il faut créer les évènements qui permettent de passer d'un comportement à l'autre.
Par exemple: une créature pourrait avoir un comportement lui dictant de courir après tous les pj qu'il voit, mais après chaques coup reçu, le script vérifi si la créature a une chance de gagner. Si la réponse est non, la créature tente de fuir et de se cacher, voir de se ralier au reste de ses semblables pour une attaque de groupe.

Ce système pourrait être couplé à un système d'évolution du script pour gérer au mieu possible chaques réaction selon la situation.

Le problème est que les créatures sont faites pour être tuées. Quand les rats lvl1 tueront les joueurs lvl1 1 fois sur 2, ça sera un bon point pour l'IA, mais un mauvais pour le jeu!


RE: [débat 4] L'importance de l'IA... - Zamentur - 06-02-2009

(06-02-2009, 10:15 AM)Mycroft a écrit : C'est pas si simple de copier les actions d'un joueur, parce que dans la table des "actions" tu n'as à priori pas les infos sur l'environnement, ou le déclencheur qui a poussé le personnage à agir.

Par exemple si un personnage se déplace pendant plusieurs tours dans une direction donnée, est-ce que c'est pour suivre quelqu'un ou quelque chose, fuire un prédateur, se rendre dans un lieu particulier, etc...

J'ai l'impression qu'en copiant simplement il risque d'y avoir des comportements un peu erratiques...

Mais peut-être que j'ai mal compris ton idée, ça m'intéresse que tu développes sur la façon dont tu comptes contourner ce problème.

Ben au départ j'ai pensé à cette idée pour un jeu de gestion( genre sans carte), il est vrai qu'une carte spatial augment un peu le niveau.
Mais en fait j'ai mené une étude expérimental sur le sujet ou on trompait des joueurs dans monde 3d avec des enregistrements d'anciens joueurs.
Le but était donc de passer un test de Turing: définir qui sont les vrai joueurs et lesquels sont contrôlé par la machine.
Et bien c'était pas si évident de savoir qui était quoi...

Cependant il est vrai que je ne pensais pas vraiment au déplacement et aux attaque mais à l'évolution des pnj (achat d'objet, développement de compétences) bref une façon de créer des pnj sans pour autant devoir se prendre la tête avec leur évolutions...

Pour répondre à Agorate: il n'est pas utile d'enregistrer tous les joueurs, il suffit d'en enregistrer qu'une partie.

Mais effectivement concernant les déplacements et l'attaques j'aurais tendance à coder complètement les comportements. Peut être en prenant en compte quelques critères (comme les lieux préféré des joueurs etc...)

Bon je dois y aller


RE: [débat 4] L'importance de l'IA... - gameprog2 - 06-02-2009

Citation :Le but était donc de passer un test de Turing: définir qui sont les vrai joueurs et lesquels sont contrôlé par la machine.
Ouais rien que ça c'est marrant^^
ça me fait penser à un pote de Counter-Strike 1.5 on disait de lui qu'il jouait comme un bot Wink

Comme quoi........


RE: [débat 4] L'importance de l'IA... - Melimelo - 07-02-2009

Code PHP :
<?php
//Définition des ADN
$ADN_PERE = array
(
'Agressivite' => 0.87654,
'Couardise' => 0.12345,
'Curiosite' => 0.54321,
'Cupidite' => 0.97531
);

$ADN_MERE = array
(
'Agressivite' => 0.54321,
'Couardise' => 0.97531,
'Curiosite' => 0.87654,
'Cupidite' => 0.12345
);

//Définition des Statistiques
$STAT_PERE = array
(
'Tue' => 52,
'Fuite' => 5,
'Xp' => 763,
'Or' => 89
);

$STAT_PERE1 = array
(
'Tue' => 55,
'Fuite' => 0,
'Xp' => 7630,
'Or' => 0
);

$STAT_MERE = array
(
'Tue' => 23,
'Fuite' => 23,
'Xp' => 346,
'Or' => 47
);

$FREQUENTATION_MILIEU = array
(
1 => 73,
2 => 68,
);

Function
Score ($STAT, $MILIEU)
{
global
$FREQUENTATION_MILIEU;

$Score = ($STAT['Tue'] * 2 / $FREQUENTATION_MILIEU[$MILIEU] + $STAT['Xp'] / 2 + $STAT['Or']) / ($STAT['Fuite'] + 1);

return
$Score;
}

//Sans Crossing-Over
Function Accouplement_Simple ($ADN_MERE, $STAT_MERE, $ADN_PERE, $STAT_PERE, $MILIEU)
{
$SCORE_MERE = Score($STAT_MERE, $MILIEU);
$SCORE_PERE = Score($STAT_PERE, $MILIEU);

$PARENT_DOMINATEUR = ($SCORE_MERE >= $SCORE_PERE) ? $SCORE_MERE : $SCORE_PERE;
$PARENT_DOMINER = ($SCORE_PERE <= $SCORE_MERE) ? $SCORE_PERE : $SCORE_MERE;

$POURCENTAGE = 1 - $PARENT_DOMINER / $PARENT_DOMINATEUR;

$PARENT_DOMINATEUR = ($SCORE_MERE >= $SCORE_PERE) ? $ADN_MERE : $ADN_PERE;
$PARENT_DOMINER = ($SCORE_PERE <= $SCORE_MERE) ? $ADN_PERE : $ADN_MERE;

$ADN_BEBE['Agressivite'] = ($PARENT_DOMINATEUR['Agressivite'] - $PARENT_DOMINER['Agressivite']) * $POURCENTAGE + $PARENT_DOMINER['Agressivite'];
$ADN_BEBE['Couardise'] = ($PARENT_DOMINATEUR['Couardise'] - $PARENT_DOMINER['Couardise']) * $POURCENTAGE + $PARENT_DOMINER['Couardise'];
$ADN_BEBE['Curiosite'] = ($PARENT_DOMINATEUR['Curiosite'] - $PARENT_DOMINER['Curiosite']) * $POURCENTAGE + $PARENT_DOMINER['Curiosite'];
$ADN_BEBE['Cupidite'] = ($PARENT_DOMINATEUR['Cupidite'] - $PARENT_DOMINER['Cupidite']) * $POURCENTAGE + $PARENT_DOMINER['Cupidite'];

return
$ADN_BEBE;
}

print
'<pre>';
print_r (Accouplement_Simple ($ADN_MERE, $STAT_MERE, $ADN_PERE, $STAT_PERE, 1));
print_r (Accouplement_Simple ($ADN_MERE, $STAT_MERE, $ADN_PERE, $STAT_PERE1, 2));
print
'</pre>';
?>

J'ai codé une sorte d'algorithme génétique, sauf que je n'ai pas pris en compte les crossing-over et ce genre de fantaisie.

Dans cet exemple je ne l'applique qu'a trois individus (j'ai changé que les stat) pour un milieu donné. Mais il faut l'appliquer à toutes une population.

Pour 100 Monstre faut l'appliquer au minimum 100 fois pour retrouver 100 nouveaux monstres différents. Donc ca demande de gros calcul c'est le genre de truc qu'on ne fait que pdt les heures creuse genre la nuit.

J'ai mis ici une formule du succès quelque peu hasardeuse.

Si vous ne comprenez pas quelque chose n'hésitez pas à demander.

Et si cela vous intéresse je peux faire un algo décisionnel.


Cordialement Melimelo


RE: [débat 4] L'importance de l'IA... - Ruz - 07-02-2009

Smile
Me pencherai sur ca à mes heures perdues...


RE: [débat 4] L'importance de l'IA... - gameprog2 - 07-02-2009

Pour un jeu, vouloir se compliquer la vie à ce point :/
Fais juste un truc à comportement conditionnel^^ ça alourdira moins ton site car les calculs pour du génétique ou s'en approchant c'est lourd Wink