文号
t32935
阅读
8832
回复
4
收藏
3
[原创]围棋AI棋块存活预测算法
2011/04/05
IP:浙江
       完全基于对人类思维的模拟,与MC方法无关。只适合作预判断,博弈模拟需要更严格的模式,不然容易得到错误的结果。
       注意按照下面的代码BUG百出,其中还有很多问题没有考虑,比如落下的子会不会被马上叫吃或者被提掉,以及其它子对棋块的影响。最后的存活判断只根据围空数进行判断也是错误的,比如当围空数是4的时候,空点呈正方形分布是不能存活的但呈L形分布则可以存活。

=====================================================================

        如图1,当白棋落下后黑棋在右边防守限制白旗进入右侧,此时白棋必需选择增加气数避免被叫吃并尽量增加自己的围空范围。

1.jpg
(图1)
     如图2,白棋向左,黑棋继续限制白棋围空,白棋降低高度继续围空。
2.jpg
(图2)
     此时黑棋不能继续限制白棋围空,因为上一个子只有2口气且和下一个子共用1口气,白棋占据共用气点后可以连续叫吃从而围取更大的面积。
   3.jpg
(图3)
        对于右侧亦然。白棋可以不断降低高度继续前进,黑棋则在避免连续叫吃的情况下进行限制。
     实验表明,黑棋采取直接进攻的方法并不明智,白棋在没有限制的情况下能获得更多的实地。
     需要指出的是,其它子可以影响连续叫吃的出现,需要额外的判断所以黑棋不一定不能连续压迫白棋。
cpp code:
+400
科创币
科创网
2011/04/27
辛苦了。
15年9个月前IP:未同步
288147
1楼
if流………………其实我没太听懂围棋算法…………
引用
评论
phpskycn作者
15年9个月前IP:未同步
288151
2楼
本来是一堆goto,怕被喷改回来就了。这个算法说简单了就是一个判断在防守方的压制下进攻方能否获得足够的存活空间。防守方每二步向下压制一下。不够严密的地方在于其它子的存在可能使得并不一定要按前面那样压制。如果要改进可以再判断下每个关键点落子后的气数,会不会被叫吃或者直接吃掉。模仿人类思维真的很累。。。很容易把主观臆断的东西加进去。
引用
评论
15年8个月前IP:未同步
292672
3楼
呵呵,这个写的很有趣,但是算法局限也很大,严格来说并不具备AI特征,但是思路是在模拟人的思考方式,说是不具备AI特征是指,没有学习能力,无法通过对手增强自己;

这个代码测试了没有的?试过2个CPU 对弈冒?
引用
评论
phpskycn作者
15年8个月前IP:未同步
293784
4楼
回 3楼(joyeep) 的帖子
这个贴子中提到的只能用于检测偏远的子能否另成活棋,同时指出了模拟的方向:扩张与反扩张。另最近大概补充了50次模拟。结果表明需要检查更多的地方。。。。其它部分正在制作中
引用
评论
笔记
{{note.content}}
{{n.user.username}}
{{fromNow(n.toc)}} {{n.status === noteStatus.disabled ? "已屏蔽" : ""}} {{n.status === noteStatus.unknown ? "正在审核" : ""}} {{n.status === noteStatus.deleted ? '已删除' : ''}}
  • 编辑
  • 删除
  • {{n.status === 'disabled' ? "解除屏蔽" : "屏蔽" }}
我也是有底线的