五子棋AI 中的局势评估函数,求提示

目前在用python做一个五子棋的AI,当检索深度为4的时候,一步耗时超过4秒。
主要成本在于数棋盘上的线条,看是否组成了活2、活3、活4,等等,主要是在gen函数里面。

因为 inside_make_line 是局势评估和启发函数的前提,所以每走一步都要执行一次,而这个函数每次执行大概是在 8 ms 左右。

现在的做法是:

  1. 遍历棋盘上的棋子:
  2. 针对每个棋子,判断八个方向的直线。
  3. 将直线分组(活三、活四)等。
  4. 对于局势评估(evaluate函数),根据活三、活四的数量分别给分;对于启发式搜索(gen函数),优先堵冲四活三,这里类似一个决策树。

想到的办法是,启发式搜索不改,仅仅修改局势评估,并且允许误差:
(新的局势评估函数)

  1. 将棋盘进行霍夫变换。
  2. 判断霍夫变换后的空间,点的权重情况,根据这个给分。
    这样就会遇到问题:
  • 假如用最朴素的变换方法(y = ax + b),处理不了水平线条。
  • 假如用极坐标变换,感觉三角函数的计算很可能也很耗时。

所以求提示呢:

  1. 假如用霍夫变换,有没有计算量较低,不用极坐标又能兼容垂直线条的思路
  2. 假如不用霍夫变换,现在的 inside_make_line 有什么优化思路呢?
阅读 4.1k
撰写回答
你尚未登录,登录后可以
  • 和开发者交流问题的细节
  • 关注并接收问题和回答的更新提醒
  • 参与内容的编辑和改进,让解决方法与时俱进
推荐问题