懂α-β剪枝算法的请进!

d19901217 d19901217 墨衍会员 · AI 创作全网分发 墨衍智能分发 通过墨衍一键同步至各平台 可同步平台 CSDN微信公众号微博知乎掘金百家号博客园抖音小红书 你的文章也可以这样分发 墨衍会员 ¥399起/年,写一次发全网 我也要 + 加入社区
研究了好一阵子,最后也只能写成这样、
深度是偶数的时候才能得出最好的值,深度是奇数的最后出来都是最差的值。
搞不定了、

// 极小值极大值搜索函数
static int MinMaxSearch(int depth, int alpha, int beta) {
int i, genCount, value, bestValue;
int[] allMoves = new int[MAX_GEN_MOVES];
int eatCount;
int[] eatTable = new int[2]; // 还原局面时用

// 如果搜索到指定深度,则返回局面评估值
if (depth == 0) {
return evaluatePosition();
}

// 初始化最佳值
bestValue = -INFINITY_VALUE; // 负无穷

genCount = generateAllMoves(allMoves);

for (i = 0; i < genCount; i++) {
eatCount = makeOneMove(allMoves[i], eatTable); // 走棋
theDepth++;
value = -MinMaxSearch(depth - 1, -beta, -alpha); // 递归
undoOneMove(allMoves[i], eatCount - 1, eatTable); // 还原
theDepth--;
if (value >= beta) {
return value;
}
if (value > bestValue) {
bestValue = value;
if (depth == search_depth) { // 如果是根节点 保存最佳走法
bestMove = allMoves[i];
}
if (value > alpha) {
alpha = value;
}
}
}

// 如果是杀棋,就根据距杀棋的步数给出评价
if (currentPlayer == BLACK) { // 如果是黑方
if (bestValue == INFINITY_VALUE) {
return INFINITY_VALUE - theDepth;
}
} else { // 是白方
if (bestValue == -INFINITY_VALUE) {
return theDepth - INFINITY_VALUE;
}
}
return bestValue; // 返回找到的最佳局面评分
}
...全文

相关推荐

α-β剪枝算法编程实例 代码

详细解析α-β剪枝算法过程,并且对原理进行了详细的说明。在最后用matlab代码实践了这个算法在五子棋中的应用。并且特别点名了该算法中容易犯错的地方。

csuyhb

井字棋 tictactoe 极大极小算法 α-β剪枝算法【python】

文章目录一、 实验内容二、 极大极小算法和α-β剪枝算法总结1.极大极小算法2.α-β剪枝三、 实验步骤以及结果1.极大极小算法完成井字棋游戏2.α-β剪枝四、 结果、反思与分析1.极大极小算法运行结果、发现的问题与解决方式2.α-β剪枝运行结果、发现的问题与解决方式3.极大极小算法和α-β剪枝的比较总结 一、 实验内容 实验利用极大极小算法和α-β剪枝算法完成对井字游戏的实现。 大家首先下载对应代码;另外需要安装pygame库;pipinstall pygame 项目中主要包含两个文件 runner.

秋千的千秋

α-β剪枝技术

α-β剪枝技术的核心在于通过合理的剪枝规则,在不影响最终结果的前提下,尽可能地减少不必要的计算,从而提高算法的整体性能。

浣熊

人工智能课程设计,基于α-β剪枝算法的井字棋

由于其简单的规则和有限的决策空间,井字棋常被用作教学人工智能算法的基础案例。α-β剪枝算法是优化搜索树的策略,广泛应用于棋类游戏的决策过程中。

CarefulM

基于α-β剪枝python实现五子棋人机对战pygame

AI使用alpha-beta剪枝算法进行落子决策,评估

番茄牛腩煲
评论 2
收藏 已收藏
分享
返回顶部
d19901217
Java SE 62,620 成员 307,251 内容