编程语言
首页 > 编程语言> > java – 我应该如何为Connect 4设计一个好的评估函数?

java – 我应该如何为Connect 4设计一个好的评估函数?

作者:互联网

我有一个“连接4”游戏的java实现(具有可变数量的列和行).

此实现使用(根据用户的选择)Mini-max的Mini-max算法,使用Alpha-beta修剪,最大搜索maxDepth深度

我现在的问题是为板的状态设计一个好的评估函数(这是在maxDepth返回的值).

该值介于-100(最差选择,它对应于失败情况)和100(最佳选择,它对应于获胜情况),其中0应该是“抽奖”情况.

实际上我已经实现了两个函数(我报告伪代码,因为代码很长)

1)

>没有胜利/没有失败

– &GT如果表格已满==>画(0)

– &GT如果表格不满==>不确定的情况(50)

>胜利

– &GT如果我赢了:100

– &GT如果赢了对手:-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