我非常了解minimax和alpha-beta修剪在返回“最佳值”方面的工作原理。然而,我不确定“最佳行动”应该分配到哪里。
我知道最好的动作需要来自传入的原始棋盘,因为我正在寻找一个最大值,所以它必须在最大化玩家下分配。然而,使用我当前的代码会导致最佳动作被一次又一次地重新分配。
例如,如果原始棋盘是O-\n---\n---,那么最佳动作就变成了
OX-\n---\n---,然后重新分配给O-X\n---\n---等等。
public int minimax(Board board, int depth, boolean maximizing,int alpha,int beta) {
int bestValue;
if (board.isTerminal()) {
bestValue = board.calculateValue();
} else if (maximizing) {
bestValue = alpha;
for (Action action : board.makePossibleActions()) {
int childValue = minimax(board.makeCopy().takeAction(action),depth+1,false,bestValue,beta);
if (bestValue <= childValue) {
bestValue = childValue;
if (board.equals(originalBoard)) {
bestAction = action;
}
}
bestValue = Math.max(bestValue,childValue);
if (beta <= bestValue) {
break;
}
}
} else {
bestValue = beta;
for (Action action : board.makePossibleActions()) {
int childValue = minimax(board.makeCopy().takeAction(action),depth+1,true,alpha,bestValue);
bestValue = Math.min(bestValue,childValue);
if (bestValue <= alpha) {
break;
}
}
}
return bestValue;
}
根据游戏的复杂性,一个实用的极大极小算法的实现需要一些这些特性。
1) 董事会的低级别实施,允许快速分析职位并生成有效的行动。
2)一个哈希表,用于输入评估分数并为每个哈希键移动,这也将在强制移动期间提供帮助。
3) 一个移动表,用相应的哈希键输入所有之前的移动,以帮助避免重复移动,并帮助撤消和重做移动。
4) 由于需要响应的GUI用户界面,因此可以在后台实现minimax算法,最好在另一个线程上实现。
5) 由于玩家可能喜欢使用强制移动或改变游戏级别,实际上需要迭代深化搜索。
因此,在评估了最佳移动之后,我更愿意将结果传递给主调用线程。
因此,如果max player要播放,则您位于树的根,并且max move的值被更新,然后还将move存储在类变量中以返回。(不是取最大值,而是测试该值是否更大,然后一起更新最大值和最佳移动。)
在C 03中,我们有模板显式实例化定义(
我在Spring重新认识了豆子的不同范围。 每次我在xml中创建bean时,我都从未使用scope属性,这意味着它是单例的。" 对于原型,我读到“有状态bean首选原型范围” 有状态bean是什么意思?谁能给我一个实时的例子,我们在哪里有原型范围?
我正在尝试模拟测试中的系统使用的外部(REST)服务器。我选择MockServer(http://www.mock-server.com/)来模拟外部REST服务器。 萨克斯, R
问题内容: 我对这个问题进行了一些搜索,但发现了非常模糊的答案。在redux中,我们知道状态存储为对象。但是这种状态实际上存储在哪里?它是否以某种方式保存为文件,以后我们可以访问?我所知道的是,它不会以Cookie格式或浏览器的本地存储方式存储它。 问题答案: Redux中的状态存储在Redux存储中的内存中。 这意味着,如果刷新页面,该状态将消失。 您可以想象该商店看起来像这样: redux中的
本文向大家介绍我们在jQuery的哪里使用$ .extend()方法?,包括了我们在jQuery的哪里使用$ .extend()方法?的使用技巧和注意事项,需要的朋友参考一下 jQuery.extend()方法用于将两个或更多对象的内容合并在一起。该对象将合并到第一个对象中。 您可以尝试运行以下代码以了解如何使用方法- 示例
在Android 4 . 4 . 2 < code > environment . getexternalstoratedirectory()上。getPath()返回< code>/storage/emulated/0但是这个路径在我的Nexus5 Android 4.4.2上不存在。< code > environment . getexternalstoratedirectory()。get