[Top][All Lists]
[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]
Re: [Bug-gnubg] Beavers and analysis
From: |
Joern Thyssen |
Subject: |
Re: [Bug-gnubg] Beavers and analysis |
Date: |
Fri, 25 Jul 2003 08:36:23 +0000 |
User-agent: |
Mutt/1.4.1i |
On Thu, Jul 24, 2003 at 08:09:34PM +0200, Jim Segrave wrote
> On Thu 24 Jul 2003 (15:53 +0000), Joern Thyssen wrote:
> > On Thu, Jul 24, 2003 at 04:54:02PM +0200, Jim Segrave wrote
> > > N+3 (the take) is shared with N+2. I would think it the take/pass
> > > is the same as any other take/pass decision except that if you
> > > take, you don't own the cube but you are on roll. At the moment,
> > > the common part with the double doesn't give you any way to see if
> > > you are sharing data with a double, a beaver or a raccoon. Maybe
> > > this is where we need a second marker in the cubedecisiondata
> > > struct - it would also address potential problems with the
> > > doubling decision - say type MOVE_DOUBLE (ordinary double),
> > > MOVE_BEAVER (beaver by new cube owner), MOVE_RACOON (redouble
> > > by player on roll but not cube owner). It would be easy enough to
> > > add if it makes analysis easier
> >
> > I think the following logic should cover all situations:
> >
> > (I assume all equities are calculated for the player on roll)
>
> But the part I don't know, is how the evaluation function factors in
> being on roll and cube ownership. Does it simply do a w/wg/wbg/lg/lbg
> evaluation of the position for player on roll and then manipulate the
> results to factor in cube ownership?
That's true for 0-ply.
Higher ply is slightly more complicated, since gnubg plays according to
score in the intermediate plies and does mini-max over all possible cube
positions and ownerships, so you cannot do a cubeless 2-ply and just
apply the cubeless-to-cubeful formulae.
Anyway, let's look at the equities for a initial double:
ND = fMove on roll, fCubeOwner = -1, nCube = 1
DT = fMove on roll, fCubeOwner = ! fMove, nCube = 2
DP = +1
For the beaver decision we need:
"take" = fMove on roll, fCubeOwner = ! fMove, nCube = 2
= -DT
"pass" = -1 = -DP
"beaver" = fMove on roll, fCubeOwner = ! fMove, nCUbe = 4
= -2 * DT
For the raccoon decision we need:
"take" = fMove on roll, fCubeOnwer = ! fMove, nCube = 4
= 2 * DT
"drop" = -1 = -DP
"raccoon" = fMove on roll, fCubeOwner = ! fMove, nCube = 8
= 4 * DT
Take/drop decision:
"take" = fMove on roll, fCubeOwner = ! fMove, nCube = 2
= -DT
"drop" = -1 = -DP
The interesting point to note is that we need "fMove on roll, fCubeOwner
= ! fMove" for various cube values, but fortunately money equities scale
propertionally with the cube value.
For the N+1 "normal" cube decision (MOVE_DOUBLE) we store ND, DT, and
DP. All needed equities for N+1, N+2, N+3, .. can be calculated
trivially from these, so the equities for N+1 can be shared with N+1,
N+2, N+3 etc. This is only possible for money play, since match play
equities or mwc doesn't scale propionally with the cube value, but
fortunately beavers and raccoons are not allowed in match play(phew!)
Jørn