Changeset 26 for branches

Show
Ignore:
Timestamp:
20.08.2008 16:23:36 (4 years ago)
Author:
sylvain
Message:

Suite du ticket #5: optimisation de l'IA par rapport au ticket 5:
dans JoueurIA.cpp fonction listeSousNoeuds, ajout d'une partie de
code pour n'ajouter que des noeuds différents: si le nombre de critère
est inférieur ou égal à 3, on ne crée pas des sous-noeuds pour des
pièces identiques.

REM:
- ce changement doit être vérifié et validé, je suis pas totalement sûr
que cela ne change rien aux autres fonctions,
- cette partie du code doit être optimisé,
- idéalement, les pièces devraient être dans un tel ordre dans LaDonne?
qu'on devriat faire le minimum de test, mais cela peut faire que les
grandes pièces cachent les grandes,
- l'IA choisit systématiquement la première pièce sur la plateau si
plusieurs sont identiques.

Location:
branches/ticket5/src
Files:
2 modified

Legend:

Unmodified
Added
Removed
  • branches/ticket5/src/JoueurIA.cpp

    r23 r26  
    333333{ 
    334334    vnoeud liste; 
     335     
     336    //si on joue avec toutes les piÚces, elles sont forcément différentes 
     337    bool testDiff =string_to_int(Config::getInstance()->get("nbr_criteres"))<=4; 
     338 
    335339    // on fait la liste des n° des piÚces libres 
    336340    vector<Uint8> liste_pieces_libres; 
     341     
    337342    for(Uint8 i=0; i<16; i++){ 
    338         if(noeud.getPieceLibre(i)!=P_NO_FORME){ 
     343      Uint8 pieceCourante= noeud.getPieceLibre(i); 
     344      if(pieceCourante!=P_NO_FORME){ 
     345        if(testDiff && !liste_pieces_libres.empty()){ 
     346          //parcourt de la liste déjà remplie n'ajoute la piÚce que si elle est différente des autres 
     347          Uint8 size = liste_pieces_libres.size(); 
     348          bool isDiff=true; 
     349          for(Uint8 k=0; k<size; k++){ 
     350            //compare la piÚce k dans la liste déjà contruite et la piÚce i 
     351            if(noeud.getPieceLibre(liste_pieces_libres[k])==pieceCourante) { isDiff=false; break;} 
     352            } 
     353            if(isDiff) liste_pieces_libres.push_back(i);//on ajoute la piÚce à la liste 
     354          } 
     355          else 
     356            //on ajoute la piÚce à la liste 
    339357            liste_pieces_libres.push_back(i); 
    340358        } 
    341359    } 
     360 
     361 
    342362    Uint8 size = liste_pieces_libres.size(); 
     363 
     364 
    343365    // ensuite on parcour toutes les places disponibles sur le plateau 
    344366    for(Uint8 i=0; i<4; i++){ 
  • branches/ticket5/src/JoueurIA.h

    r24 r26  
    6666                void pieceFirstWait(LaDonne donne); 
    6767                void pieceWait(LaDonne donne); 
    68         void cercleWait(LaDonne donne); 
     68    void cercleWait(LaDonne donne); 
    6969 
    7070    private: 
    7171                void meilleurCoup(LaDonne donne); 
    72         void strategie(NoeudIA noeud); 
    73         vnoeud listeSousNoeuds(NoeudIA noeud); 
    74         void noeudHasard(NoeudIA noeud); 
    75         vnoeud listeFacile(vnoeud liste_IA); 
    76         vnoeud listeMoyen(vnoeud liste_IA); 
    77         vnoeud listeDifficile(vnoeud liste_IA); 
     72    void strategie(NoeudIA noeud); 
     73    vnoeud listeSousNoeuds(NoeudIA noeud); 
     74    void noeudHasard(NoeudIA noeud); 
     75    vnoeud listeFacile(vnoeud liste_IA); 
     76    vnoeud listeMoyen(vnoeud liste_IA); 
     77    vnoeud listeDifficile(vnoeud liste_IA); 
    7878//        vnoeud listeImpossible(vnoeud liste_IA); 
    79         void dernierCoup(NoeudIA noeud); 
     79    void dernierCoup(NoeudIA noeud); 
    8080//        void testLigne(Uint8 piece_1, Uint8 piece_2, Uint8 piece_3, Uint8 piece_4, bool *duo, bool *trio); 
    8181};