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

d19901217 2012-03-27 11:58:56
研究了好一阵子,最后也只能写成这样、
深度是偶数的时候才能得出最好的值,深度是奇数的最后出来都是最差的值。
搞不定了、

// 极小值极大值搜索函数
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; // 返回找到的最佳局面评分
}
...全文
363 2 打赏 收藏 转发到动态 举报
写回复
用AI写文章
2 条回复
切换为时间正序
请发表友善的回复…
发表回复
d19901217 2012-03-28
  • 打赏
  • 举报
回复
有路过的兄弟、、、
Mainstream_Code 2012-03-28
  • 打赏
  • 举报
回复
α-β 恍惚的记得在初中几何的时候见过 阿拉法 肥塔 还有一个叫 嘎麻
【资源说明】 基于Python实现蒙特卡洛树搜索以及极大极小+α-β剪枝算法实现五子棋AI源码.zip 基于Python实现蒙特卡洛树搜索以及极大极小+α-β剪枝算法实现五子棋AI源码.zip 基于Python实现蒙特卡洛树搜索以及极大极小+α-β剪枝算法实现五子棋AI源码.zip 基于Python实现蒙特卡洛树搜索以及极大极小+α-β剪枝算法实现五子棋AI源码.zip 基于Python实现蒙特卡洛树搜索以及极大极小+α-β剪枝算法实现五子棋AI源码.zip 基于Python实现蒙特卡洛树搜索以及极大极小+α-β剪枝算法实现五子棋AI源码.zip 基于Python实现蒙特卡洛树搜索以及极大极小+α-β剪枝算法实现五子棋AI源码.zip 【备注】 1.项目代码均经过功能验证ok,确保稳定可靠运行。欢迎下载体验! 2.主要针对各个计算机相关专业,包括计算机科学、信息安全、数据科学与大数据技术、人工智能、通信、物联网等领域的在校学生、专业教师、企业员工。 3.项目具有丰富的拓展空间,不仅可作为入门阶,也可直接作为毕设、课程设计、大作业、初期项目立项演示等用途。 4.当然也鼓励大家基于此行二次开发。在使用过程中,如有问题或建议,及时沟通。 5.期待你能在项目中找到乐趣和灵感,也欢迎你的分享和反馈!

62,614

社区成员

发帖
与我相关
我的任务
社区描述
Java 2 Standard Edition
社区管理员
  • Java SE
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧