dra*_*mnl 5 java heuristics evaluation-function
我有一个“Connect 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
Run Code Online (Sandbox Code Playgroud)
我需要设计第三个(如果可能的话更好)函数。有什么建议吗?
先感谢您。
你已经解决了基本情况:我的胜利 = 100 分,我的损失 = -100,平局 = 0。你可以杀死的“不确定”情况,它并不反映董事会的“善良”。所以现在你需要填补空白。您想要考虑并为其赋值的案例:
只需计算每个玩家仍然可以制作的行中可能的 4 的数量,然后将其相减。
例如,两个玩家的得分都是7*4 (horizontal) + 4*7 (vertical) + 4*4 (diagonal up) + 4*4 (diagonal down)。如果红色在左下角放一个,那么黄色会失去1 + 1 + 1 + 0 = 3. 但是如果红色将一个放在中间,黄色会失去4 + 1 + 1 + 1 = 7.
当然,如果任何玩家获胜,则其他玩家的得分为-infinity,无论上述系统如何。
| 归档时间: |
|
| 查看次数: |
22616 次 |
| 最近记录: |