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

JavaScript Discussion :

[défi n°9] Si ça vous gratte...


Sujet :

JavaScript

  1. #41
    Expert confirmé
    Avatar de javatwister
    Homme Profil pro
    danseur
    Inscrit en
    Août 2003
    Messages
    3 681
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Calvados (Basse Normandie)

    Informations professionnelles :
    Activité : danseur

    Informations forums :
    Inscription : Août 2003
    Messages : 3 681
    Points : 5 221
    Points
    5 221
    Par défaut
    ah ok!
    pour mon bug, c'est une bête histoire de priorité dans le traitement des messages; pas grave!


    pour ton AI, j'ai pas eu le courage de regarder le code, je l'ai juste copié (soirée dure dure: graveur en panne + virus)

    mais j'aime bien sa manière de jouer

  2. #42
    Membre éprouvé
    Avatar de Celelibi
    Profil pro
    Inscrit en
    Janvier 2004
    Messages
    1 087
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Janvier 2004
    Messages : 1 087
    Points : 1 122
    Points
    1 122
    Par défaut
    Citation Envoyé par javatwister
    mais j'aime bien sa manière de jouer
    En fait la particularité c'est que je n'ai introduit aucune "connaissance" dans le programme. À partir de la situation du jeu dans laquelle on se trouve, il va essayer toutes les parties possibles et imaginables, puis séléctionner le meilleur coup en supposant qu son adversaire joue au mieux.

    Le fait que l'ordinateur choisis tout seul le prochain coup à jouer en fonction de la situation de jeu me semble plus proche de l'idée que je me fais d'une AI que de gérer au cas par cas.

  3. #43
    Expert confirmé
    Avatar de javatwister
    Homme Profil pro
    danseur
    Inscrit en
    Août 2003
    Messages
    3 681
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Calvados (Basse Normandie)

    Informations professionnelles :
    Activité : danseur

    Informations forums :
    Inscription : Août 2003
    Messages : 3 681
    Points : 5 221
    Points
    5 221
    Par défaut
    Citation Envoyé par Celelibi
    À partir de la situation du jeu dans laquelle on se trouve, il va essayer toutes les parties possibles et imaginables.
    oui... ce qui est plutôt lourd

  4. #44
    Membre éprouvé
    Avatar de Celelibi
    Profil pro
    Inscrit en
    Janvier 2004
    Messages
    1 087
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Janvier 2004
    Messages : 1 087
    Points : 1 122
    Points
    1 122
    Par défaut
    Citation Envoyé par javatwister
    Citation Envoyé par Celelibi
    À partir de la situation du jeu dans laquelle on se trouve, il va essayer toutes les parties possibles et imaginables.
    oui... ce qui est plutôt lourd
    Mais c'est ça que le rend imbattable.

    Il n'y a peut-être que 511 grilles finales possibles , il y a des tas de parties qui mènent à la même grille.


    Heureusement que tu ne nous a pas demandé de coder une AI d'échec...

  5. #45
    Expert confirmé
    Avatar de javatwister
    Homme Profil pro
    danseur
    Inscrit en
    Août 2003
    Messages
    3 681
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Calvados (Basse Normandie)

    Informations professionnelles :
    Activité : danseur

    Informations forums :
    Inscription : Août 2003
    Messages : 3 681
    Points : 5 221
    Points
    5 221
    Par défaut
    et pourtant, je le bas dès la 3e partie... chose que je ne peux pas faire contre mon modeste système

  6. #46
    Expert confirmé
    Avatar de javatwister
    Homme Profil pro
    danseur
    Inscrit en
    Août 2003
    Messages
    3 681
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Calvados (Basse Normandie)

    Informations professionnelles :
    Activité : danseur

    Informations forums :
    Inscription : Août 2003
    Messages : 3 681
    Points : 5 221
    Points
    5 221
    Par défaut
    j'avoue que j'ai du mal à comprendre une telle dépense d'énergie pour un tableau de 3 sur 3 et un jeu terminé en 9 coups maximum!

    j'ai simplement distingué
    1 premier coup: qui offre très peu de possibilités optimales, selon le joueur qui commence;
    1 second coup intéressant parce qu'il révèle 2 algos simples et efficaces;
    les coups suivants sont joués à partir de règles très simples: on attaque si on peut, sinon, on défend de la meilleure manière possible: étant donné que tout se joue au second coup et que le nombre de situations diminue au fur et à mesure de coups, il était inutile d'échafauder des stratégies au-delà;

    détail du test "homme / machine" avec ton script:

    sur 20 parties:

    15 nuls
    1 victoire AI
    4 victoires pour moi

  7. #47
    Membre éprouvé
    Avatar de Celelibi
    Profil pro
    Inscrit en
    Janvier 2004
    Messages
    1 087
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Janvier 2004
    Messages : 1 087
    Points : 1 122
    Points
    1 122
    Par défaut
    Citation Envoyé par javatwister
    et pourtant, je le bas dès la 3e partie... chose que je ne peux pas faire contre mon modeste système
    Pourtant moi j'ai gagné contre ton AI, et il suffit de recommencer la même partie à chaque fois. (0, 7, 6, 3)

    Si tu arrives à gagner contre mon AI, tu pourrais me donner les détails de la partie ? (tes coups ainsi que ceux de la machine)
    À moins d'une erreur de programmation il ne doit pas pouvoir perdre.

    j'avoue que j'ai du mal à comprendre une telle dépense d'énergie pour un tableau de 3 sur 3 et un jeu terminé en 9 coups maximum !
    Simplement parceque selon moi c'est le programme qui doit trouver lui même le prochain coup à jouer et pas appliquer des règles du style "si il joue là, je joue là". De plus après les messages de sub0 j'ai eut envi de faire quelque chose de facilement adaptable à une grille plus grande.

    détail du test "homme / machine" avec ton script:

    sur 20 parties:

    15 nuls
    1 victoire AI
    4 victoires pour moi
    Détails avec le tien :
    Nombre de parties : 20
    Ordinateur : 0
    Visiteur : 10
    Match nul : 10

    Détails des 2 uniques parties différentes joués :
    Lorsque l'humain (c'est moi ) commence :
    Humain : 0, 7, 6, 3
    AI : 4, 1, 8
    Je gagne !

    Lorsque l'ordinateur commence :
    AI : 4, 0, 5, 7, 6
    Humain : 8, 2, 3, 1
    Match nul !


    Enfin voilà je serais curieux de savoir quels parties tu as joué pour réussir à gagner.

  8. #48
    Expert confirmé
    Avatar de javatwister
    Homme Profil pro
    danseur
    Inscrit en
    Août 2003
    Messages
    3 681
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Calvados (Basse Normandie)

    Informations professionnelles :
    Activité : danseur

    Informations forums :
    Inscription : Août 2003
    Messages : 3 681
    Points : 5 221
    Points
    5 221
    Par défaut
    mort de rire parce que j'attendais ton message! je viens de tester ce denier bug (je travaille dessus);

    pour ton AI, je refile la clé de la réussite quand j'ai réparé la mienne ^_^

  9. #49
    Expert confirmé
    Avatar de javatwister
    Homme Profil pro
    danseur
    Inscrit en
    Août 2003
    Messages
    3 681
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Calvados (Basse Normandie)

    Informations professionnelles :
    Activité : danseur

    Informations forums :
    Inscription : Août 2003
    Messages : 3 681
    Points : 5 221
    Points
    5 221
    Par défaut
    voilà, j'ai réparé... mais évidemment, je n'ai pas tout retesté

  10. #50
    Expert confirmé
    Avatar de javatwister
    Homme Profil pro
    danseur
    Inscrit en
    Août 2003
    Messages
    3 681
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Calvados (Basse Normandie)

    Informations professionnelles :
    Activité : danseur

    Informations forums :
    Inscription : Août 2003
    Messages : 3 681
    Points : 5 221
    Points
    5 221
    Par défaut
    pour ton problème et en attendant mieux (je viens de rejouer 4 parties, juste pour rire, et j'en ai gagné 3 contre un nul), je constate simplement que le morpion, auquel je n'avais jamais vraiment joué, est un jeu qui repose sur la stratégie du "piège", comme le puissance 4 : si tu te crées à un moment 2 occasions de conclure, tu as gagné.
    Tout le reste, c'est du pipo!

  11. #51
    Expert confirmé
    Avatar de javatwister
    Homme Profil pro
    danseur
    Inscrit en
    Août 2003
    Messages
    3 681
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Calvados (Basse Normandie)

    Informations professionnelles :
    Activité : danseur

    Informations forums :
    Inscription : Août 2003
    Messages : 3 681
    Points : 5 221
    Points
    5 221
    Par défaut
    à part ça, un exemple de bug:




    tu remarqueras que l'ordi a été le premier à jouer et qu'il n'a pas réagi à un alignement dans la rangée du haut; bref, je n'ai plus qu'à poser mon troisième pion;

  12. #52
    Membre éprouvé
    Avatar de Celelibi
    Profil pro
    Inscrit en
    Janvier 2004
    Messages
    1 087
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Janvier 2004
    Messages : 1 087
    Points : 1 122
    Points
    1 122
    Par défaut
    En fait j'aimerais connaitre les positions exactes joués, ou du moins les 3 derniers coups.

  13. #53
    Expert confirmé
    Avatar de javatwister
    Homme Profil pro
    danseur
    Inscrit en
    Août 2003
    Messages
    3 681
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Calvados (Basse Normandie)

    Informations professionnelles :
    Activité : danseur

    Informations forums :
    Inscription : Août 2003
    Messages : 3 681
    Points : 5 221
    Points
    5 221
    Par défaut
    autre exemple, concernant le principe du piège qu'ignore ton AI:

    je commence en 4 et l'ordi joue 1: d'ores et déjà il a perdu, ce n'est meme pas la peine de continuer...

  14. #54
    Expert confirmé
    Avatar de javatwister
    Homme Profil pro
    danseur
    Inscrit en
    Août 2003
    Messages
    3 681
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Calvados (Basse Normandie)

    Informations professionnelles :
    Activité : danseur

    Informations forums :
    Inscription : Août 2003
    Messages : 3 681
    Points : 5 221
    Points
    5 221
    Par défaut
    bon, après de nouveaux essais, ce n'est pas un bug, juste l'effet du piège; donc, c'est bien ce point que tu dois travailler (et rassure-toi, ton AI ne commet pas d'erreur! elle est simplement débutante et ne sait pas que si tu commences sur une case impaire, tu as toutes les chances de perdre)

  15. #55
    Membre éprouvé
    Avatar de Celelibi
    Profil pro
    Inscrit en
    Janvier 2004
    Messages
    1 087
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Janvier 2004
    Messages : 1 087
    Points : 1 122
    Points
    1 122
    Par défaut
    En ce qui concerne la grille dont tu as pris un screen : je n'ai pas trouvé de partie qui puisse mener à cette grille.

    Lorsque tu commence en 4 l'ordi ne peut normalement pas jouer en 1.
    Il suffit pour cela de rajouter dans le code un alert(scoreCases.toSource()); aux alentours de la ligne 199 (juste après le while qui élimine les solutions à ne pas jouer.)
    On vois que si tu commence en 4, les seuls cases qu'il se propose de jouer sont : 0, 2, 6, 8 -> seulement les coins.
    info : scoreCases est un tableau qui contient des tableaux qui associent à chaque case jouable un score.
    Et lorsque tu joue en 4, scoreCases contient :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    [[0, 0],
    [2, 0],
    [6, 0],
    [8, 0]]
    Ce qui signifie qu'il ne peut jouer que dans les coins et ce pour donner un match nul.

    Ceci dit j'ai très légèrement modifié mon code depuis que je l'ai posté, mais les modifications ne devraient pas influencer sa façon de jouer.
    voir ici la dernière version.

    Edit : voilà les modifications effectués (sortie donnée par la commande diff si tu comprends son "code") :
    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
    42c42
    <      
    ---
    >       
    70c70
    <         var vertz = vzalign << i;
    ---
    >         var vertz = vzalign << i; 
    100c100
    <      
    ---
    >       
    180,182c180,182
    <    /***************/
    <    /*Début de l'AI*/
    <    /***************/
    ---
    >       /***************/
    >       /*Début de l'AI*/
    >       /***************/
    196,198c196,197
    <       while (scoreCases.length > 1) {
    <         if (scoreCases[0][1] > scoreCases[scoreCases.length-1][1]) scoreCases.pop();
    <         else break;
    ---
    >       while (scoreCases[0][1] > scoreCases[scoreCases.length-1][1]) {
    >         scoreCases.pop();
    199a199
    >       //alert(scoreCases.toSource());
    277c277
    <     <div>Nombre de parties gagnés par <em>l'autre</em> : <var id="nbGagne2">0</var></div>
    ---
    >     <div>Nombre de parties gagnés par <em>l'ordinateur</em> : <var id="nbGagne2">0</var></div>

  16. #56
    Expert confirmé
    Avatar de javatwister
    Homme Profil pro
    danseur
    Inscrit en
    Août 2003
    Messages
    3 681
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Calvados (Basse Normandie)

    Informations professionnelles :
    Activité : danseur

    Informations forums :
    Inscription : Août 2003
    Messages : 3 681
    Points : 5 221
    Points
    5 221
    Par défaut
    ne sois pas de mauvaise foi...

    là tu as visiblement corrigé ton script, c'est bien!

  17. #57
    Expert confirmé
    Avatar de javatwister
    Homme Profil pro
    danseur
    Inscrit en
    Août 2003
    Messages
    3 681
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Calvados (Basse Normandie)

    Informations professionnelles :
    Activité : danseur

    Informations forums :
    Inscription : Août 2003
    Messages : 3 681
    Points : 5 221
    Points
    5 221
    Par défaut
    Citation Envoyé par Celelibi
    si tu comprends son "code"
    ah non, désolé, c'est du chinois

  18. #58
    Membre éprouvé
    Avatar de Celelibi
    Profil pro
    Inscrit en
    Janvier 2004
    Messages
    1 087
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Janvier 2004
    Messages : 1 087
    Points : 1 122
    Points
    1 122
    Par défaut
    Si il n'est plus possible de battre mon script c'est que le bug devait résider dans le while ligne 197.

    Pour le format de sorti de diff :
    42c42 signifie que ce qui suit va transformer la ligne 42 en la ligne 42.
    quand une ligne commence par "<" ça signifie un retrait, et ">" un ajout.
    196,198c196,197 signifie que les lignes 196 à 198 vont être transformés en les lignes 196 à 197 (il y aura une ligne en moins).

    Lorsqu'il ne s'agit pas d'un remplacement mais d'un ajout, la lettre n'est pas "c" mais "a". Lorsqu'il y a un "d" c'est une déletion.

    Certains changements se font juste au niveau des espaces ou des lignes vides.

    En fait le seul changement dans le code JS est celui là :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    196,198c196,197
    <       while (scoreCases.length > 1) {
    <         if (scoreCases[0][1] > scoreCases[scoreCases.length-1][1]) scoreCases.pop();
    <         else break;
    ---
    >       while (scoreCases[0][1] > scoreCases[scoreCases.length-1][1]) {
    >         scoreCases.pop();
    D'ailleur je ne comprends pas trop pourquoi l'ancien code provoquait ce bug. :s


    PS : j'ai du mal à comprendre toutes les subtilités de ton code pour pouvoir faire jouer mon AI contre la tienne.
    Donc si ça te dit, mon constructeur AI_new est assez simple.
    Lors de l'instanciation il faut lui passer un objet function qui sera appellé avec comme paramètre la place où il joue (première case = 0).
    Ensuite à chaque fois que son adversaire a joué, il faut appeller sa méthode played avec comme paramètre la place où son adversaire à joué.
    Sa méthode 'joue' le fait jouer (il appellera tout seul la fonction transmise lors de l'instanciation).
    Et enfin sa méthode 'restart' doit être appellée à chaque fois qu'une nouvelle partie doit commencer.

    À vrai dire j'ai du mal à savoir où je dois appeller les différentes méthodes dans ton code.
    Donc si ça te dis...

  19. #59
    Expert confirmé
    Avatar de javatwister
    Homme Profil pro
    danseur
    Inscrit en
    Août 2003
    Messages
    3 681
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Calvados (Basse Normandie)

    Informations professionnelles :
    Activité : danseur

    Informations forums :
    Inscription : Août 2003
    Messages : 3 681
    Points : 5 221
    Points
    5 221
    Par défaut
    ouais, les boucles réservent toujours des surprises;

    en tout cas, tu avoueras que ton jeu devient plus "sobre" avec ce changement; ce qui me conforte dans mon idée que le morpion est virtuellement gérable en 30 lignes de code;

  20. #60
    Membre éprouvé
    Avatar de Celelibi
    Profil pro
    Inscrit en
    Janvier 2004
    Messages
    1 087
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Janvier 2004
    Messages : 1 087
    Points : 1 122
    Points
    1 122
    Par défaut
    (J'ai édité mon précédent message)

    Il es vrai que le jeu de mon code devient moins "fantaisiste". Il n'empêche que le premier coup peut être joué n'importe où.

    Si tu as envi de faire du code minimal, c'est pas bien compliqué, le morpion ne présente pas 36000 possibilités, donc en gérant au cas par cas (en utilisant des rotations et symétries) on peut s'en tirer avec un code vraiment très court, mais personnellement je ne considère pas ça comme une AI.

    Selon moi une véritable AI devrait avoir aucune connaissance préalable et ne connaitre que les règles* du jeu (et encore). Puis apprendre tout seul au fur et à mesure qu'il joue.



    * les règles d'un jeu définissent comment à partir de l'état d'un jeu on peut passer à l'état suivant.

+ Répondre à la discussion
Cette discussion est résolue.
Page 3 sur 4 PremièrePremière 1234 DernièreDernière

Discussions similaires

  1. Défi : La chanson qui vous reste en tête !
    Par Hikage dans le forum La taverne du Club : Humour et divers
    Réponses: 527
    Dernier message: 27/02/2014, 22h35
  2. Le grand mode d'emploi du forum, à lire si vous souhaitez tout savoir !
    Par Anomaly dans le forum Mode d'emploi & aide aux nouveaux
    Réponses: 2
    Dernier message: 03/06/2013, 17h36
  3. Que pensez vous des défis ?
    Par ram-0000 dans le forum Défis C
    Réponses: 12
    Dernier message: 05/10/2009, 08h40
  4. [défi n°2] "Etes-vous String?"
    Par javatwister dans le forum Général JavaScript
    Réponses: 20
    Dernier message: 20/08/2005, 15h28

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