我试图弄清楚Expectiminimax算法如何应用于Pig Dice游戏。主要问题是我不知道如何评估游戏决策树中的每个节点。根据Wikipedia的“猪骰子游戏”中的Optimal play部分,“相关的决策信息包括玩家的得分,对手的得分和回合总数”。
如何将这些信息转换为伪代码中的heuristic value of node
,如何计算此数值?应该使用什么最小值/最大值?
Wikipedia伪代码:
function expectiminimax(node, depth)
if node is a terminal node or depth = 0
return the heuristic value of node
if the adversary is to play at node
// Return value of minimum-valued child node
let α := +∞
foreach child of node
α := min(α, expectiminimax(child, depth-1))
else if we are to play at node
// Return value of maximum-valued child node
let α := -∞
foreach child of node
α := max(α, expectiminimax(child, depth-1))
else if random event at node
// Return weighted average of all child nodes' values
let α := 0
foreach child of node
α := α + (Probability[child] * expectiminimax(child, depth-1))
return α
游戏规则:
“每回合,玩家反复掷骰子直到掷出1 或玩家决定“持有”:•如果玩家掷出1,则得分 什么也没有,这成为下一个玩家的回合。 •如果玩家滚动 任何其他数字,该数字将加到他们的回合总数和玩家的 转弯继续。 •如果玩家选择“持有”,则其回合总数为 增加到他们的分数,它成为下一个玩家的回合。首先 得分超过100分的玩家获胜。”