11.5 Corrigés des exercices
193
flo at Pleft ( int d, int 1) {
flo at p = 0.0;
}
for (in t s = O; s <= d; s++ )
p += Pleftscore (s , d, 1) * Pleftmove (s , d, !);
return p;
flo at Pscore ( in t s, int d, int 1) {
if (( s < 0) Il (d < 0))
}
return 0.0;
else if (P [s] [d] [!] < -0.5 ) {
if ( 1 == 0)
}
P [ s ] [ d] [ 1 ] = C ( d , s )
pow ( 2 , d ) ;
e 1 s e i f ( d <= 1 ) {
}
if ( s == d ) p [ s ] [ d ] [ 1 ] =
1. 0 ;
else P [s] [d] [!] = 0.0;
el se
P [s] [d] [!] = Pleft (d , 1 - 1) *
Pscore ( s - 1, d - 1, 1) +
(1 - Pleft (d , 1 - 1)) *
Pscore ( s, d - 1, 1);
re turn P [s] [d] [!];
Un programme qui joue au nombre de coups à gauche peut s'écrire :
class Problem {
public :
int depth ;
int d, score ;
int variation [MaxScore] ;
void in i t (int de ) {
depth = de ;
d = O;
score = o· .
}
void playMove ( int m) {
if (m == 0)
}
score++ ;
variation [d] = m;
d++ ;
bool leaf () { return (d >= depth ); }
int playout () {
white ( d < depth ) {
193
flo at Pleft ( int d, int 1) {
flo at p = 0.0;
}
for (in t s = O; s <= d; s++ )
p += Pleftscore (s , d, 1) * Pleftmove (s , d, !);
return p;
flo at Pscore ( in t s, int d, int 1) {
if (( s < 0) Il (d < 0))
}
return 0.0;
else if (P [s] [d] [!] < -0.5 ) {
if ( 1 == 0)
}
P [ s ] [ d] [ 1 ] = C ( d , s )
pow ( 2 , d ) ;
e 1 s e i f ( d <= 1 ) {
}
if ( s == d ) p [ s ] [ d ] [ 1 ] =
1. 0 ;
else P [s] [d] [!] = 0.0;
el se
P [s] [d] [!] = Pleft (d , 1 - 1) *
Pscore ( s - 1, d - 1, 1) +
(1 - Pleft (d , 1 - 1)) *
Pscore ( s, d - 1, 1);
re turn P [s] [d] [!];
Un programme qui joue au nombre de coups à gauche peut s'écrire :
class Problem {
public :
int depth ;
int d, score ;
int variation [MaxScore] ;
void in i t (int de ) {
depth = de ;
d = O;
score = o· .
}
void playMove ( int m) {
if (m == 0)
}
score++ ;
variation [d] = m;
d++ ;
bool leaf () { return (d >= depth ); }
int playout () {
white ( d < depth ) {
