Open paperplane110 opened 1 year ago
Todo:
links:https://github.com/lihongxun945/myblog/issues/13
按照教程,评估函数返回的是整个棋盘的分数,而非某一位置的分数。
若一个一个点的遍历,对于每个点进行九个方向延伸,数棋型,会出现重复数同一个棋型的情况,这也是我想了很久没想通的地方。
今天想到了另一种方法来评估,
首先列出棋型,简化了对称的情况:1(黑,ai),2(白,玩家,棋盘边界)
注意:
可能有bug
问题在于由于滑动窗口,活三匹配上两次: 011100, 001110
需要添加校验逻辑,在一次 evalLine 中,同一棋子不能被两个 pattern 匹配上
或者扩展pattern为:0011100, 2011100,0011102
同理:
实现ab剪枝后,目前ai可以搜索四层,每次搜索125w节点左右,搜索时长1分钟以上。
局限:局面评估函数是一个O(n^2)复杂度的一个函数,需要优化
加速方法:
昨晚想到,其实每下一步棋子,只会影响其所在的四个方向的pattern的变化,因此整个棋盘的评估可以改成递推式的
需要考虑:是否保存每一步的历史分数
isWin function has bug
Alpha-Beta pruning: https://www.jiqizhixin.com/graph/technologies/56dbb21e-c3f9-4e06-b16a-2e28f25b26c8