IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

Intelligence artificielle Discussion :

Aide pour algorithme sur jeu de dés


Sujet :

Intelligence artificielle

  1. #1
    Membre du Club
    Inscrit en
    Février 2005
    Messages
    242
    Détails du profil
    Informations personnelles :
    Âge : 32

    Informations forums :
    Inscription : Février 2005
    Messages : 242
    Points : 63
    Points
    63
    Par défaut Aide pour algorithme sur jeu de dés
    Bonjour,

    je dois finir mon projet de tpe pour lundi qui est un programme informatique qui est censé simulé un adversaire au jet de dés. Mon but est de programmer l'IA du joueur virtuel mais le problème c'est que je ne sais pas du tout comment attaquer l'algorithme

    au début je pensait faire par l'étude de cas genre (en admettant d1, .. d4 les chiffres des dés 1 ...4)

    on range d'abord le lancé dans le bonne ordre pour l'évaluation de la figure
    ex: 4 - 5 - 6 - 1 --> 1 - 4 - 5 - 6

    Rappel: 1er lancé + 2 relance ( à 4 dés)

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
    36
    37
    38
    39
    40
    SI D1=D2=D3=D4 ALORS
      // carré
      // dans ce cas le joueur ne fait rien puisque qu'il a une très bonne figure
    SINON SI D1=D2-1 ET D2=D3-1 ET D3=D4-1 ALORS
      //suite
      // idem que pour le carré
    SINON SI D1=D2=D3 OU D2=D3=D4
      // brelan
      // le joueur est en bonne position : qu'il soit à la deuxième ou à la première relance, il relance le dernier dé pour tenter d'améliorer son jeu
    SINON SI D1=D2 ET D3=D4
      // double paire
      SI 1ere relance
        // le joueur choisit de relancer la plus faible paire, en effet il a une chance non négligeable de sortir un brelan (1 sur 6), ce qui lui rapporterait plus de point
     
      SI 2eme relance // il garde son jeu
     
    SINON SI D1=D2 OU D2=D3 OU D3=D4 ALORS
      SI 1ere relance
        SI D4-D1 <= 3 ALORS
        // si l'écart entre le plus garnd et le plus petit nombre est inférieur ou égal à 3, une suite est possible à ce stade, en effet
         ex . 1 - 1 - 2 - 3
         écart = 2
         paire de 1
     
    dans ce cas le joueur relance un des nombre de la paire (D1=D2) pour tenter la suite (1/6)
     
    en cas d'échec, il lui reste une autre relance
      SI 2eme relance
        Le joueur relance les chiffres qui ne font pas partie de la paire pour tenter un brelan (1/6) moins fort que la suite mais aussi moins risquée à ce stade 
     
      FINSI
      SINON SI D4-D1 > 3 aLORS
      // La suite n'est plus possible,
       1 - 1 - 5 - 6
      1ere relance -> on relance la paire
      2eme relance -> on garde la paire et on relance le reste
     
    SINON
      //rien 
      le joueur garde le dé le + fort et relance le reste
    je sais pas si mon raisonnement est bon mais s'il y a un autre moyen genre faire une bdd de cas particulier et comparer le jeu en cours avec les situation de la bdd par similairté ou encore calculer tous les figures possible et acceptables pour un jeu données et aussi anticiper la prochaine relance ce qui voudrait dire une double itération

    si quelqu'un a une petite idée de comment organiser tout ça, n'hésiter pas

    merci de votre aide

  2. #2
    Membre du Club
    Profil pro
    Inscrit en
    Septembre 2006
    Messages
    38
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Septembre 2006
    Messages : 38
    Points : 46
    Points
    46
    Par défaut
    La solution serait de faire une fonction de cout, qui te permettrait de calculer en fonction du type de figure que tu veux obtenir et du nombre de dé que tu veux garder quel est la probabilité de chance que tu obtiennes le résultat.

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    fct_cout( type de figure, nombre_de_de[])
    Exemple tu as les dés 1 - 1 - 1 - 2 :
    Tu vas essayé via la fonction de cout, de calculer la probabilité d'obtenir un carré en gardant 1 dé [(1), (1), (1), (2)], puis 2 dés [(1, 1), (1, 1), (1, 2), etc...], puis 3 dés [(1, 1, 1), (1, 1, 2), etc...]. Tu constates que la meilleure solution est de garder tes 3 dés à 1 et de relancer le dé à 2, (puisque tu as 1/6 chances d'obtenir le dé à 1).

    Tu l'auras compris, pour obtenir la meilleure solution il faut a chaque lancé regarder via ta fonction le résultat sur tous les dés, mais aussi et surtout sur toutes les types de figures possibles (carré, brelan, suite, etc..). Tu gardes la meilleure probabilité et tu as ta solution. J'espére avoir été assez clair avec mes explications.

    Rangé les dés dans l'ordre pour une évaluation n'est pas forcément la bonne stratégie (sous entendu ca ne sert à rien). Par contre, il y a des heuristiques à mettre en place dans cet algorithme, pour éviter de calculer toutes les possibilités. Je te laisse les chercher par toi même, elles sont vraiment évidentes à trouver.

  3. #3
    Membre du Club
    Profil pro
    Inscrit en
    Septembre 2006
    Messages
    38
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Septembre 2006
    Messages : 38
    Points : 46
    Points
    46
    Par défaut
    Vite fait voilà un début de réponse à ton problème, j'avais un petit doute sur la faisabilité du probléme. Le code est du ruby (don't stress).

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
     
    CARRE = 0
    BRELAN = 1
     
    def fct_cout(figure, de)
    	if figure == CARRE
    		de.each do |de1|
    			min_probablite = 1.0
    			de.each do |de2|
    				min_probablite *= 1.0/6.0 if de1 != de2
    			end
    			puts de1.to_s+" "+min_probablite.to_s
    		end
    	end
    end
     
    t = [1, 1, 2, 3]
    fct_cout(CARRE, t)
    Je vais ici calculer la probabilite d'obtenir un carre sur ce lancé 1, 1, 2 et 3. Voici la sortie de mon programme :
    1 0.0277777777777778
    1 0.0277777777777778
    2 0.00462962962962963
    3 0.00462962962962963

    Tu constates qu'en gardant le 1 on a une probabilité de 0.0277777777777778 d'obtenir les 2 autres 1 et que c'est la meilleure probabilité. Aprés il faut que tu calcules pour le reste des figures mais c'est basé sur le même principe. J'espére t'avoir aidé au mieux.

  4. #4
    Membre du Club
    Inscrit en
    Février 2005
    Messages
    242
    Détails du profil
    Informations personnelles :
    Âge : 32

    Informations forums :
    Inscription : Février 2005
    Messages : 242
    Points : 63
    Points
    63
    Par défaut
    bonjour

    merci beaucoup pour ton aide

    je crois avoir compris le principe mais quand tu dis

    Rangé les dés dans l'ordre pour une évaluation n'est pas forcément la bonne stratégie (sous entendu ca ne sert à rien). Par contre, il y a des heuristiques à mettre en place dans cet algorithme, pour éviter de calculer toutes les possibilités. Je te laisse les chercher par toi même, elles sont vraiment évidentes à trouver.
    C'est quoi des heuristiques ? En gros tu me dis qu'il y a d'autres moyens de réduire les possibilités que de ranger les dés dans l'ordre pendant l'évaluation ? Je ne vois pas trop, mais je vais essayé de trouver

    en tout cas merci beaucoup

Discussions similaires

  1. Aide pour algorithme
    Par Sinclaire dans le forum Langage
    Réponses: 5
    Dernier message: 29/03/2006, 19h58
  2. Besoin d'aide pour requête sur grosse table
    Par Fabouney dans le forum Langage SQL
    Réponses: 3
    Dernier message: 25/01/2006, 09h01
  3. aide pour requete sur 2 tables avec clé étranere
    Par richton95 dans le forum Requêtes
    Réponses: 4
    Dernier message: 02/12/2005, 13h32
  4. aide pour créer un jeu
    Par cstefany dans le forum Général JavaScript
    Réponses: 8
    Dernier message: 23/10/2005, 03h51
  5. Besoin d'aide pour algorithme de traitement d'images
    Par Zenman94 dans le forum Algorithmes et structures de données
    Réponses: 13
    Dernier message: 07/04/2005, 14h31

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