44
Minimax, Alpha-Bêta et heuristiques associées
}
2.14.13 Recherche aspirante
int rechercheAspirante ( list & vp ) {
int eval = virus . evaluation ( ' O ' );
}
lis t vpTemp ;
clockStart = clock ();
initHistorique ();
int alpha =- Taille * Taille , beta = Taille * Taille ;
fo r (int d = l;
}
(clock () - clockStart < maxClock ) &&
( d < ProfondeurMax );
d++) {
int evalTemp = alphabeta (d, alpha , beta , ' O ', vpTemp );
if ( evalTemp <= alpha)
evalTemp = alphabeta (d , -Taille * Taille , alpha ,
' O ', vpTemp );
else if (evalTemp >= beta )
evalTemp = alphabeta (d , beta , Taille * Taille ,
'O ' , vpTemp );
if ( clock () - clockStart < maxClock ) {
eval = evalTemp ;
alpha = eval - 2;
beta = eval + 2;
vp = vpTemp ;
}
return eval ;
2.14.14 Recherche avec variation principale
int alphabeta ( int depth , int alpha , int beta , char joueur ,
list & vp ) {
if (clock () - clockStart > maxClock )
return O;
i f ( de p th == 0)
return quiescence (alpha , beta , joueur );
list listeCoups = virus . coupsLegaux (joueur );
if ( listeCoups . empty ())
return virus . evaluationSiPlusDeCoupsPossibles (joueur );
Minimax, Alpha-Bêta et heuristiques associées
}
2.14.13 Recherche aspirante
int rechercheAspirante ( list
int eval = virus . evaluation ( ' O ' );
}
lis t
clockStart = clock ();
initHistorique ();
int alpha =- Taille * Taille , beta = Taille * Taille ;
fo r (int d = l;
}
(clock () - clockStart < maxClock ) &&
( d < ProfondeurMax );
d++) {
int evalTemp = alphabeta (d, alpha , beta , ' O ', vpTemp );
if ( evalTemp <= alpha)
evalTemp = alphabeta (d , -Taille * Taille , alpha ,
' O ', vpTemp );
else if (evalTemp >= beta )
evalTemp = alphabeta (d , beta , Taille * Taille ,
'O ' , vpTemp );
if ( clock () - clockStart < maxClock ) {
eval = evalTemp ;
alpha = eval - 2;
beta = eval + 2;
vp = vpTemp ;
}
return eval ;
2.14.14 Recherche avec variation principale
int alphabeta ( int depth , int alpha , int beta , char joueur ,
list
if (clock () - clockStart > maxClock )
return O;
i f ( de p th == 0)
return quiescence (alpha , beta , joueur );
list
if ( listeCoups . empty ())
return virus . evaluationSiPlusDeCoupsPossibles (joueur );
