交流下五子棋人机对战alpha beta 智能算法

偶是江湖中人 2014-01-08 11:22:46
大家好。请教下各位。我想做一个五子棋人机对战。想利用下alpha beta算法
在网上看了下有如下的伪代码
double alphabeta(int depth, double alpha, double beta) {
 if (depth <= 0 || 棋局结束) {
  return evaluation();
 }
 就当前局面,生成并排序一系列着法;
 for (每个着法 m) {
  执行着法 m;
  double val = -alphabeta(depth - 1, -beta, -alpha);
  撤消着法 m;
  if (val >= beta) {
   return val;
  }
  if (val > alpha) {
   alpha = val;
  }
 }
 return alpha;
}

为表述方便。我称电脑为A方,人为B方。人先下棋。默认depth = 3
在上述的算法中。小弟有几点疑问
1.evaluation评价函数。这个是电脑方A当前的分数总和减去人方B的当前局面的分数总和?还是根据当前的层数Depth来得到分数。比如depth==3,即电脑方下子,则evaluaion是评价电脑方的分数?
2.-alphabeta(depth - 1, -beta, -alpha) 这个递归调用中,最前面的取负。可以理解为对方 的评分。可是参数中alpha 与beta对换,对换后又取负。这个着实不明白。还望各位发表下自己的意见及想法
3.if (val >= beta) {
   return val;
  }
对这步。本来。比beta大的值要舍弃的。为什么还是返回 val值? 这里怎么不是返回 beta的值??

分数给的不多,主要是请大家相互的交流 下,发表下自己的意见了
...全文
208 3 打赏 收藏 转发到动态 举报
写回复
用AI写文章
3 条回复
切换为时间正序
请发表友善的回复…
发表回复
zhuobattle 2014-01-08
  • 打赏
  • 举报
回复
五子期规则还算简单,人机也不复杂,就是不要出现有漏洞下法就行了
新撰组 2014-01-08
  • 打赏
  • 举报
回复
看上去像是博弈树的一部分 就我的理解应该是分成两部分 一部分是胜负判定 另一部分是计算A方放子位置, alphabeta应该是A方放子位置的函数吧
偶是江湖中人 2014-01-08
  • 打赏
  • 举报
回复
引用 1 楼 zhuobattle 的回复:
五子期规则还算简单,人机也不复杂,就是不要出现有漏洞下法就行了
大神,能否顺便回答下偶的疑问了

64,281

社区成员

发帖
与我相关
我的任务
社区描述
C++ 语言相关问题讨论,技术干货分享,前沿动态等
c++ 技术论坛(原bbs)
社区管理员
  • C++ 语言社区
  • encoderlee
  • paschen
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
  1. 请不要发布与C++技术无关的贴子
  2. 请不要发布与技术无关的招聘、广告的帖子
  3. 请尽可能的描述清楚你的问题,如果涉及到代码请尽可能的格式化一下

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