五子棋禁手算法(renju forbidden algorithm)

阿麦 2013-04-10 03:04:00
讨论一下五子棋禁手算法。

自己写了一个,多层填子的时候效率比较低
在Intel I5-2300的计算速度为
一层禁手局面在1000~2000kNPS
三层禁手局面猛降到100kNPS左右
希望能多看看其他人的算法,目的是提高自己算法的效率,解决多层禁手的计算瓶颈。

如果有 RelLib 中的 ForbiddenPointFinder.cpp 和 ForbiddenPointFinder.cpp 也成。

同时欢迎同好们讨论禁手算法,或者博弈论相关算法。
当然,配合C++源码更佳





谢绝空谈者。

...全文
890 9 打赏 收藏 转发到动态 举报
写回复
用AI写文章
9 条回复
切换为时间正序
请发表友善的回复…
发表回复
阿麦 2013-04-12
  • 打赏
  • 举报
回复
这几天写了一个中国象棋程序,战绩还行 http://amoyman.com/download/amoymancheese.rar
那个谁谁谁 2013-04-11
  • 打赏
  • 举报
回复
三三禁手判断是有禁规则中比较难处理的部分,根据规则:活三是可以成活四的三。 判断是否三三禁手,基本原理就是判断可以可以形成活四的三有几个(每个位置有四个方向)。同时还要注意:连五算终局,不再计算禁手。 在计算上,可以分两步走:简单禁手判断和填子计算。简单禁手判断只需要在原来的局面中判断是否可以成活四;填子计算就比较复杂了,需要在原局面中增加一个棋子。更复杂的多重禁手判断,会产生较多的递归调用。 多重禁手的判断时间是无禁手局面的几十甚至上百倍是正常的。 renlib的禁手判断程序,因为使用环境的关系,在1毫秒完成是基本符合renlib的要求的。不过,这个问题会导致renlib在计算VCF和VCT时的效率低下吧。 但如果要用在对弈程序,ForbiddenPointFinder明显效率太低。看过ForbiddenPointFinder后的第一感觉就是:重复计算太多。可以保存一些计算结果供其他需要的部分调用(以空间换时间)。估计这样做可以提高到每秒上万次吧。 如果需要更快的速度,就要从基本的数据结构入手了,构造更有效率的数据结构。
赵4老师 2013-04-11
  • 打赏
  • 举报
回复
//○┌─┬─┬─┬─┬─┬─┬─┬─┬─┬─┬─┬─┬─┬─┐
//○├─┼─┼─┼─┼─┼─┼─┼─┼─┼─┼─┼─┼─┼─○
//○├─┼─┼─┼─┼─┼─┼─┼─┼─┼─┼─┼─┼─┼─┤
//○├─┼─┼─┼─┼─┼─┼─┼─┼─┼─┼─┼─┼─┼─┤
//○├─┼─┼─┼─┼─┼─┼─┼─┼─┼─┼─┼─┼─┼─○
//○├─┼─┼─┼─┼─┼─┼─┼─●─┼─┼─┼─┼─┼─┤
//○├─┼─┼─┼─┼─┼─┼─┼─●─●─┼─┼─┼─┼─┤
//○├─┼─┼─┼─┼─┼─●─┼─┼─●─┼─┼─┼─┼─○
//○├─┼─┼─┼─┼─┼─●─●─┼─┼─┼─┼─┼─┼─┤
//○├─┼─┼─┼─┼─┼─┼─●─┼─┼─┼─┼─┼─┼─┤
//○├─┼─┼─┼─┼─┼─┼─┼─┼─┼─┼─┼─┼─┼─○
//○├─┼─┼─┼─┼─┼─┼─┼─┼─┼─┼─┼─┼─┼─┤
//○├─┼─┼─┼─┼─┼─┼─┼─┼─┼─┼─┼─┼─┼─┤
//○├─┼─┼─┼─┼─┼─┼─┼─┼─┼─┼─┼─┼─┼─┤
//○└─┴─┴─┴─┴─┴─┴─┴─┴─┴─┴─┴─┴─┴─┘
赵4老师 2013-04-11
  • 打赏
  • 举报
回复
//┌─┬─┬─┬─┬─┬─┬─┬─┬─┬─┬─┬─┬─┬─┐
//├─┼─┼─┼─┼─┼─┼─┼─┼─┼─┼─┼─┼─┼─○
//├─┼─┼─┼─┼─┼─┼─┼─┼─┼─┼─┼─┼─┼─┤
//├─┼─┼─┼─┼─┼─┼─┼─┼─┼─┼─┼─┼─┼─┤
//├─┼─┼─┼─┼─┼─┼─┼─┼─┼─┼─┼─┼─┼─○
//├─┼─┼─┼─┼─┼─┼─┼─●─┼─┼─┼─┼─┼─┤
//├─┼─┼─┼─┼─┼─┼─┼─●─●─┼─┼─┼─┼─┤
//├─┼─┼─┼─┼─┼─●─┼─┼─●─┼─┼─┼─┼─○
//├─┼─┼─┼─┼─┼─●─●─┼─┼─┼─┼─┼─┼─┤
//├─┼─┼─┼─┼─┼─┼─●─┼─┼─┼─┼─┼─┼─┤
//├─┼─┼─┼─┼─┼─┼─┼─┼─┼─┼─┼─┼─┼─○
//├─┼─┼─┼─┼─┼─┼─┼─┼─┼─┼─┼─┼─┼─┤
//├─┼─┼─┼─┼─┼─┼─┼─┼─┼─┼─┼─┼─┼─┤
//├─┼─┼─┼─┼─┼─┼─┼─┼─┼─┼─┼─┼─┼─┤
//└─┴─┴─┴─┴─┴─┴─┴─┴─┴─┴─┴─┴─┴─┘
赵4老师 2013-04-11
  • 打赏
  • 举报
回复
//┌─┬─┬─┬─┬─┬─┬─┬─┬─┬─┬─┬─┬─┬─┐
//○─┼─┼─┼─┼─┼─┼─┼─┼─┼─┼─┼─┼─┼─○
//├─┼─┼─┼─┼─┼─┼─┼─┼─┼─┼─┼─┼─┼─┤
//├─┼─┼─┼─┼─┼─┼─┼─┼─┼─┼─┼─┼─┼─┤
//○─┼─┼─┼─┼─┼─┼─┼─┼─┼─┼─┼─┼─┼─○
//├─┼─┼─┼─┼─┼─┼─┼─●─┼─┼─┼─┼─┼─┤
//├─┼─┼─┼─┼─┼─┼─┼─●─●─┼─┼─┼─┼─┤
//○─┼─┼─┼─┼─┼─●─┼─┼─●─┼─┼─┼─┼─○
//├─┼─┼─┼─┼─┼─●─●─┼─┼─┼─┼─┼─┼─┤
//├─┼─┼─┼─┼─┼─┼─●─┼─┼─┼─┼─┼─┼─┤
//○─┼─┼─┼─┼─┼─┼─┼─┼─┼─┼─┼─┼─┼─○
//├─┼─┼─┼─┼─┼─┼─┼─┼─┼─┼─┼─┼─┼─┤
//├─┼─┼─┼─┼─┼─┼─┼─┼─┼─┼─┼─┼─┼─┤
//├─┼─┼─┼─┼─┼─┼─┼─┼─┼─┼─┼─┼─┼─┤
//└─┴─┴─┴─┴─┴─┴─┴─┴─┴─┴─┴─┴─┴─┘
阿麦 2013-04-10
  • 打赏
  • 举报
回复
抱歉,上面的图错了一格。更正一下:

//┌-┬-┬-┬-┬-┬-┬-┬-┬-┬-┬-┬-┬-┬-┐
//○-┼-┼-┼-┼-┼-┼-┼-┼-┼-┼-┼-┼-┼-○
//├-┼-┼-┼-┼-┼-┼-┼-┼-┼-┼-┼-┼-┼-┤
//├-┼-┼-┼-┼-┼-┼-┼-┼-┼-┼-┼-┼-┼-┤
//○-┼-┼-┼-┼-┼-┼-┼-┼-┼-┼-┼-┼-┼-○
//├-┼-┼-┼-┼-┼-┼-┼-●-┼-┼-┼-┼-┼-┤
//├-┼-┼-┼-┼-┼-┼-┼-●-●-┼-┼-┼-┼-┤
//○-┼-┼-┼-┼-┼-●-┼-┼-●-┼-┼-┼-┼-○
//├-┼-┼-┼-┼-┼-●-●-┼-┼-┼-┼-┼-┼-┤
//├-┼-┼-┼-┼-┼-┼-●-┼-┼-┼-┼-┼-┼-┤
//○-┼-┼-┼-┼-┼-┼-┼-┼-┼-┼-┼-┼-┼-○
//├-┼-┼-┼-┼-┼-┼-┼-┼-┼-┼-┼-┼-┼-┤
//├-┼-┼-┼-┼-┼-┼-┼-┼-┼-┼-┼-┼-┼-┤
//├-┼-┼-┼-┼-┼-┼-┼-┼-┼-┼-┼-┼-┼-┤
//└-┴-┴-┴-┴-┴-┴-┴-┴-┴-┴-┴-┴-┴-┘
在CSDN画图真难,是我的方法错了吗?
阿麦 2013-04-10
  • 打赏
  • 举报
回复
补充一下:所附图形为多重禁手判断,有六个三三禁手点。
阿麦 2013-04-10
  • 打赏
  • 举报
回复
感谢图灵狗提供的网址。 我在相同的环境下(VC2005,OtW4,Intel i5-2300单线程)下运行了ForbiddenPointFinder 效率太低了 Release执行1000次FindForbiddenPoints()用时985毫秒,也就是速度约 1kNPS 我的程序对同样条件下判断禁手点,执行100000次(100倍)用时897毫秒,速度约114kNPS 差太多了,基本没有参考价值,但还是给了一点思路,我会给图灵狗加分的。 希望有更多的达人们挑战哦。期待ING 另:判断的形势为

//┌┬┬┬┬┬┬┬┬┬┬┬┬┬┐
//○┼┼┼┼┼┼┼┼┼┼┼┼┼○
//├┼┼┼┼┼┼┼┼┼┼┼┼┼┤
//├┼┼┼┼┼┼┼┼┼┼┼┼┼┤
//○┼┼┼┼┼┼┼┼┼┼┼┼┼○
//├┼┼┼┼┼┼┼●┼┼┼┼┼┤
//├┼┼┼┼┼┼┼●●┼┼┼┼┤
//○┼┼┼┼┼┼┼┼●┼┼┼┼○
//├┼┼┼┼┼●┼┼┼┼┼┼┼┤
//├┼┼┼┼┼●●┼┼┼┼┼┼┤
//○┼┼┼┼┼┼●┼┼┼┼┼┼○
//├┼┼┼┼┼┼┼┼┼┼┼┼┼┤
//├┼┼┼┼┼┼┼┼┼┼┼┼┼┤
//├┼┼┼┼┼┼┼┼┼┼┼┼┼┤
//└┴┴┴┴┴┴┴┴┴┴┴┴┴┘
图灵狗 2013-04-10
  • 打赏
  • 举报
回复 2
这里(http://www.renju.se/renlib/opensrc/)全部都可以很容易的下载到,给分吧!

65,170

社区成员

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

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