|
1
2
维基百科的样本正在做Negamax
您可以通过直截了当地命名来获得帮助:
你的
|
|
|
2
1
您的minimax()函数应该记住迄今为止找到的最佳移动方式。因此,代替此代码:
你应该这样做:
当然,您需要一个变量“best move”和一种将找到的最佳移动返回给调用者的方法。 |
|
|
3
1
添加
也,
|
|
|
4
1
从游戏树搜索开始的一个好地方是 chess programming wiki . 关于移动的问题:我认为最常见的是有两个max函数。两个max函数的区别在于,一个只返回分数,另一个返回分数和最佳移动。递归调用顺序如下:
关于alpha-beta算法的伪代码有一些很好的论文: 对于评论中的问题: 和math.max(alpha,score)或math.min(alpha,score)alpha是布尔值吗?! 没有alpha是alpha-beta算法中的窗口绑定。alpha值将用新值更新。因为alpha和beta与negamax函数的递归调用交换,所以alpha变量在下一个递归调用中引用beta变量。 playerturn变量的一个注意事项是:minimax或alpha beta算法不需要这些信息。所以我会把信息——下一个是谁——放到董事会结构中。函数findpossiblemoves和boardval从Board结构中获取所需的所有信息。
递归中断条件的一个注意事项:如果我正确理解了您的代码,那么您只有一个
|
|
|
5
0
在伪代码中,节点变量必须包含有关当前板位置(或其他)的所有信息。这些信息将包括轮到谁移动。 |
|
AstralHex · 矩阵乘法代码工作不正常 1 年前 |
|
|
Fishie · 作为类成员的智能指针是否仍然自动释放?[关闭] 1 年前 |
|
|
Die4Toast · 递归调用成员箭头运算符-> 1 年前 |
|
|
Anka Hanım · 关于结构和动态数组地址的问题 1 年前 |