局面估价函数:给每个局面(state)规定一个估价函数值f,评价它对于己方的有利程度。胜利的局面的估价函数值为,而失败的局面的估价函数为-
Max局面:假设这个局面轮到己方走,有多种决策可以选择,其中每种决策都导致一个子局面(sub-state)。由于决策权在我们手中,当然是选择估价函数值f最大的子局面。因此,该局面的决策函数等于子局面f值的最大值,把这样的局面称为max局面。
Min局面:假设这个局面轮到对方走,它也有多种决策可以选择,其中每种决策都也会导致一种子局面,但由于决策权在对方手中,在最坏的情况下,对手当然选择估价函数值f最小的子局面。因此,该局面的决策函数值等于子局面f值的最小值,把这样的局面称为min局面。
终结局面:如果双方都不能走,显然胜负已分,f值根据规定取值。综上所述,得到了最单纯的极大极小算法。
完全极在极小过程:对于一个局面,递归计算它所有子局面的估价函数值。如果是max层,转移到其中函数值最大的子局面,否则转移到函数值最小的子局面。可以把已经算过估价函数值的局面都记录下来,以免重复工作。
function minmax(State, Player:Integer):integer
begin
if WeWon then minmax:=+
else if WeLost then minmax:=-
else begin
min:=+
max:=-
for Move:=1 to MoveCount do
begin
NewState:= DoMove(State, Move);
Value:= minmax(NewState, Next(Player));
if Value < min then min:=Value
if Value > max then max := Value
end
if Player = MyProgram then minmax:= max
if Player = Oppoent then minmax:=min
end
end