1. #1
    Membre confirmé

    Profil pro
    Inscrit en
    janvier 2008
    Messages
    732
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : janvier 2008
    Messages : 732
    Points : 537
    Points
    537

    Par défaut Bot/IA pour jeu de combat

    Bonjour a tous,

    Comment feriez vous pour faire une ai/bot pour un jeu de combat comme smash bros...
    Quelques regles du jeu:
    • Deplacement X/Y
    • 10 attaques offensives
    • 2 attaques defensives
    • Ressources : vie/energie
    • La ressource vie diminue en recevant une attaque offensive d'un adversaire
    • la ressource energie diminue en utilisant certaines de ses attaques


    Ce que je souhaite faire avant tout est une IA realiste.. (qui a un gameplay ressemblant a un humain...) et je ne sais pas jusqu'ou on peut pousser le mimetisme/intelligence


    Pour le moment j'ai enregistre mes propres parties => Pour chaque action que j'enregistre les parametres d'environnement.
    Ensuite avec un algo de type "random forest" je dis a mon bot de reproduire l'action que j'aurais fait avec ses propres variables d'environnements.
    Resultat de cet algo:
    Le resultat produit c'est simplement du mimetisme... et ca reste un seul type de jeu.


    Si vous avez des idees pour faire un peu mieux


    Merci bien.

  2. #2
    Membre habitué
    Homme Profil pro
    Développeur Web
    Inscrit en
    avril 2012
    Messages
    113
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Haute Garonne (Midi Pyrénées)

    Informations professionnelles :
    Activité : Développeur Web
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : avril 2012
    Messages : 113
    Points : 195
    Points
    195

    Par défaut

    Salut,

    Il y a sans aucun doute de meilleurs moyens que celui que je vais te proposer mais voilà tout de même :

    Tu peux utiliser un algorithme d'apprentissage génétique (apprentissage par renforcement) avec des réseaux neuronaux artificiels.

    Avantage(s) :

    • L'apprentissage génétique est très simple à comprendre et à implémenter
    • Tu peux obtenir tout plein de comportements réellement uniques


    Inconvénient(s) :

    • Trouver les bons critères d'entrée peut être compliqué et tout particulièrement dans ton cas.
    • Ne permet pas d'obtenir le résultat optimum (ça tombe bien tu ne recherches pas une IA imbattable)
    • On ne peut pas expliquer comment on obtient le résultat


    Vient ensuite le choix du modèle, c'est à dire quel type de réseau neuronal utiliser.
    Le plus simple étant le réseau de neurones multi-couches.
    Peut-être qu'un réseau neuronal récurrent serait plus approprié dans le sens où le résultat des couches suivantes va aussi être renvoyé aux couches précédentes permettant d'obtenir des enchaînements d'actions, une action étant en lien avec les actions précédentes mais cela introduit plus de complexité.

    Cordialement

  3. #3
    Rédacteur/Modérateur

    Homme Profil pro
    Ingénieur qualité méthodes
    Inscrit en
    décembre 2013
    Messages
    1 449
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Ingénieur qualité méthodes
    Secteur : Conseil

    Informations forums :
    Inscription : décembre 2013
    Messages : 1 449
    Points : 3 039
    Points
    3 039

    Par défaut

    Tu sais faire du mimétisme, et tu as une base de donnée 'historique' avec un certain nombre de situations. C'est une bonne base.

    Dans ta base historique, pour une situation donnée, j'imagine que des fois tu as fait un mouvement X, et des fois tu as fait un mouvement Y. Et dans ta version actuelle, tu retiens soit X, soit Y, tu retiens le mouvement que tu as fait le plus souvent.
    Mais tu dois pouvoir retravailler ton historique, en disant : A partir de telle situation, quand j'ai fait le mouvement X, en général, 15 secondes plus tard, j'avais perdu tant de point de vie, ou gagné tant de point de vie. Et idem pour le mouvement Y. Et dans ce cas, tu ne vas pas sélectionner le mouvement le plus ""mimétique"", celui que tu as fait le plus souvent, mais le mouvement le plus efficace (celui qui en moyenne, t'a rapporté le plus de points)
    N'oubliez pas le bouton Résolu si vous avez obtenu une réponse à votre question.

  4. #4
    Membre confirmé

    Profil pro
    Inscrit en
    janvier 2008
    Messages
    732
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : janvier 2008
    Messages : 732
    Points : 537
    Points
    537

    Par défaut

    Bonjour et merci de vos reponses tbc92 et lilalex.

    J'ai finalement choisi de me baser sur un papier qui implémente a l'identique de ce que je recherche :

    https://arxiv.org/pdf/1702.06230.pdf

    Je me met un peu abruptement au monde du ML ... donc le début était très laborieux.
    J'ai donc mis en place un systeme de RL avec tensor flow.

    Je pense que l'algorithme converge mais pas exactement vers ce que je veux, je m'explique:

    Je cherche a maximiser le nombre de victoire ~ dommages effectuées.
    Au bout de quelques épisodes l'IA bat son ennemie en 2, puis 3 puis 4 fois moins de coup global. (Exemple première manche elle va mettre 2000 coup pour battre l'ia puis après pas mal de training environ 500).


    Donc j'en conclus que cela apprend ^^


    Cependant ce que je cherche a faire et que deux agent RL se battent entre eux et apprennent l'un versus l'autre.
    Cela donne les résultats ennonce plus haut(le round se termine plus vite).


    Cependant les résultats visuels ne sont pas intéressants:
    -Les bots démarrent éloignés
    -ils se rapprochent
    -ils font tous les coups les plus puissants (burst)
    -Le bot A meure
    -Le bot A revient dans l’arène
    -Le Bot B meure a son tour.
    -Le bot B revient dans l’arène
    ...
    ..

    Questions:

    * Du coup je pense que dans la valeur Reward je dois trouver un parametre "beau jeu" ou "jeu interessant", exemple un humain ne sortira jamais 50 fois la même attaque a la suite... sauf peut être si cela lui permet de gagner ...
    * Ce que je pense/espère c'est que pour deux classes différentes (exemple "distance" contre "corps a corps") le résultat de l'algorithme devra montrer un jeu qui illustre au mieux les capacités d'un personnage distance contre un corps a corps (et inversement) a gagner.
    * Reward distribuée: Je me dis si je met un point pour la victoire et 1 point pour la défaite. Comment va se comporter l'algorithme??? Le meilleur moyen n'est ce pas que chacun se fuit l'un l'autre et du coup la reward est de 0 pour chacun.(pour le moment je upscale un peu la victoire pour que mes bots aillent au combat )

    PS:Je débute dans le ML

    Merci de m'avoir lu et de votre aide probable.

  5. #5
    Responsable 2D/3D/Jeux


    Avatar de LittleWhite
    Homme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    mai 2008
    Messages
    22 316
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Ingénieur développement logiciels

    Informations forums :
    Inscription : mai 2008
    Messages : 22 316
    Points : 153 128
    Points
    153 128
    Billets dans le blog
    8

    Par défaut

    En effet, j'ai bien l'impression que l'IA n'a pas de pénalité s'il perd une vie, du coup, il se défend pas et cherche juste à mettre des dégats. Je pense, qu'à partir du moment où il aura une notion de défense (et qu'il ne faut pas perdre de vie pour avoir un meilleur score) l'IA va faire un jeu un peu plus varié. Toutefois, elle pourrait juste alterner défense et attaque.
    Aussi, j'ai le pressentiment que cela montre que l'IA exploite une faille de gameplay (genre, il y a un coup cheaté, elle le sait, elle ne fait que d'utiliser celui-ci).
    Pour faire un score intéressant à voir pour l'humain, il est possible d'ajouter des contraintes (genre, interdiction d'utiliser plus d'une fois le méga coup, par partie). Ou encore, o peut dire que plus les coups et les défenses sont variées, plus le score (reward) est haut.
    Vous souhaitez participer à la rubrique 2D/3D/Jeux ? Contactez-moi

    Ma page sur DVP
    Mon Portfolio

    Qui connaît l'erreur, connaît la solution.

  6. #6
    Membre confirmé

    Profil pro
    Inscrit en
    janvier 2008
    Messages
    732
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : janvier 2008
    Messages : 732
    Points : 537
    Points
    537

    Par défaut

    Oui Merci LittleWhite c'est ce que je pensais.

    Du coup si j'arrive a un resultat correct je posterais quelques indicateurs.

    Car ce qui est "penalisant" c'est qu'il faut attendre que l'algorithme converge^^.

    Merci bien.

Discussions similaires

  1. Demande d'aide pour une ia de jeu de combat
    Par grego91000 dans le forum C++
    Réponses: 21
    Dernier message: 16/11/2016, 15h53
  2. Quel moteur pour un jeu de combat spatial?
    Par DindonSauvage dans le forum Moteurs 3D
    Réponses: 6
    Dernier message: 31/10/2007, 10h04
  3. [Images] représentation d'une carte pour jeu en php
    Par maniaco_jazz dans le forum Bibliothèques et frameworks
    Réponses: 5
    Dernier message: 29/11/2005, 10h41
  4. SGBDR pour jeu temps réel ?
    Par vmolines dans le forum Décisions SGBD
    Réponses: 6
    Dernier message: 20/07/2005, 16h17
  5. Réponses: 1
    Dernier message: 05/07/2005, 18h07

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo