58
}
} ;
return true ;
3.9.6 Alpha-Bêta avec tables de transposition
Ta bles de Transposition
On reprend le code pour la recherche Alpha-Bêta avec l'heuristique du coup nul et
l'heuristique de l'historique et on lui aj oute la mise à jour incrémentale d'un hashcode
dans la classe virus et la gestion des transpositions dans l' Alpha-Bêta à l'aide de la classe
Table générique. On ne donne dans ce qui suit que les modifications par rapport au corrigé
de l'heuristique du coup nul (les classes et fonctions qui restent inchangées sont omises).
unsigned long long HashArray [Taille ] [Taille ] [2];
/* initialisation des nombres aléa toires */
void initHash () {
}
for ( int i = O; i < Taille ; i++)
for ( int j = O; j < Taille ; j ++)
for (int k = O; k < 2; k++) {
HashArray [i] [j ] [k] = O;
for (int b = O; b < 64; b++)
}
i f ((rand ( ) / (RAND_MAX + 1.0)) > 0.5)
HashArray [i] [j ] [k] I= (lULL « b);
class Virus {
public :
char damier [Taille ] [Taille ];
int nbNoirs , nbBlancs ;
int nbModifications ;
int pileModifications [20 * Taille * Taille ];
unsigned long long hashcode ;
Virus () {
init ();
}
unsigned long long hash () { return hashcode ; }
void init () {
fo r (int i = O; i < Taille ; i++)
for (int j = O; j < Taille ; j++)
damier [ i ] [ j] = '+' ;
hashcode = 0;
damier [0] [O] = '@ ' ;
}
} ;
return true ;
3.9.6 Alpha-Bêta avec tables de transposition
Ta bles de Transposition
On reprend le code pour la recherche Alpha-Bêta avec l'heuristique du coup nul et
l'heuristique de l'historique et on lui aj oute la mise à jour incrémentale d'un hashcode
dans la classe virus et la gestion des transpositions dans l' Alpha-Bêta à l'aide de la classe
Table générique. On ne donne dans ce qui suit que les modifications par rapport au corrigé
de l'heuristique du coup nul (les classes et fonctions qui restent inchangées sont omises).
unsigned long long HashArray [Taille ] [Taille ] [2];
/* initialisation des nombres aléa toires */
void initHash () {
}
for ( int i = O; i < Taille ; i++)
for ( int j = O; j < Taille ; j ++)
for (int k = O; k < 2; k++) {
HashArray [i] [j ] [k] = O;
for (int b = O; b < 64; b++)
}
i f ((rand ( ) / (RAND_MAX + 1.0)) > 0.5)
HashArray [i] [j ] [k] I= (lULL « b);
class Virus {
public :
char damier [Taille ] [Taille ];
int nbNoirs , nbBlancs ;
int nbModifications ;
int pileModifications [20 * Taille * Taille ];
unsigned long long hashcode ;
Virus () {
init ();
}
unsigned long long hash () { return hashcode ; }
void init () {
fo r (int i = O; i < Taille ; i++)
for (int j = O; j < Taille ; j++)
damier [ i ] [ j] = '+' ;
hashcode = 0;
damier [0] [O] = '@ ' ;
