java – 我应该如何为Connect 4设计一个好的评估函数?
作者:互联网
我有一个“连接4”游戏的java实现(具有可变数量的列和行).
此实现使用(根据用户的选择)Mini-max的Mini-max算法,使用Alpha-beta修剪,最大搜索maxDepth深度
我现在的问题是为板的状态设计一个好的评估函数(这是在maxDepth返回的值).
该值介于-100(最差选择,它对应于失败情况)和100(最佳选择,它对应于获胜情况),其中0应该是“抽奖”情况.
实际上我已经实现了两个函数(我报告伪代码,因为代码很长)
1)
>没有胜利/没有失败
– >如果表格已满==>画(0)
– >如果表格不满==>不确定的情况(50)
>胜利
– >如果我赢了:100
– >如果赢了对手:-100
2)
Of me:
- InARow[0] = maximum number of pieces in a HORIZONTAL in a row
- InARow[1] = maximum number of pieces in a VERTICAL in a row
- InARow[2] = maximum number of pieces in a DIAGONAL (ascending) in a row
- InARow[3] = maximum number of pieces in a DIAGONAL (descending) in a row
Of the opponent
- InARow2[0] = maximum number of pieces in a HORIZONTAL in a row
- InARow2[1] = maximum number of pieces in a VERTICAL in a row
- InARow2[2] = maximum number of pieces in a DIAGONAL (ascending) in a row
- InARow2[3] = maximum number of pieces in a DIAGONAL (descending) in a row
value = (100* (InARow[0] + InARow[1] + InARow[2] + InARow[3]) )/16 - (100* (InARow2[0] + InARow2[1] + InARow2[2] + InARow2[3]) )/16
我需要设计第三个(如果可能的话更好)功能.有什么建议吗?
先感谢您.
解决方法:
只计算每个玩家仍然可以制作的4行数,并相互减去.
例如,两个玩家都以7 * 4(水平)4 * 7(垂直)4 * 4(对角线向上)4 * 4(对角线向下)的得分开始.如果红色在左下角放置一个,则黄色失去1 1 1 0 = 3的分数.但如果红色将一个放在中间,则黄色失去4 1 1 1 = 7的分数.
当然,如果任何一个玩家获胜,那么另一个玩家的得分是-infinity,无论上面的系统如何.
标签:heuristics,java,evaluation-function 来源: https://codeday.me/bug/20190823/1696280.html