实施 MiniMax 算法 IN JAVA 加随机启发式

Implementing MiniMax Algorithm IN JAVA plus random heuristic

我正在尝试在 java 中从头开始实现极小极大算法。 一般点是众所周知的,通过树我试图找到最好的可能移动。 我现在没有要显示的关键代码,首先我希望有人给我一个通用的方法,这样我就可以启动项目,然后用我的代码更新 post。

除此之外,我还将为我的游戏实现一个随机启发式算法,它将随机选择下一步行动并将其传递给游戏,但这将在稍后添加。

我将在这个问题上增加赏金。

P.S.

不是副本,我不想复制别人的代码,我必须自己完成整个代码。

所以要遵循的主要思路如下: 使用给定的游戏领域和评级机制计算最佳移动 field 输入字段 ratingMechanisms 对移动进行评级的机制和 return 最佳移动。

更深入的分析: Minimax 算法的关键是两个玩家之间的来回,"turn it is" 的玩家希望选择得分最高的着法。反过来,每个可用动作的得分由对方玩家决定其可用动作中哪个得分最低。对方玩家移动的分数再次由 turn-taking 试图最大化其分数的玩家决定,依此类推,直到移动树一直向下到结束状态。

算法的描述,假设 X 是 "turn taking player," 看起来像:

-如果游戏结束,return X 视角的得分。

-否则获取每一步可能的新游戏状态列表

-创建分数列表

-对于这些状态中的每一个,将该状态的极小极大结果添加到分数列表中

-如果轮到 X,return 分数列表中的最大分数

-如果轮到O,return分数列表中的最低分数

-你会注意到这个算法是递归的,它在玩家之间来回翻转直到找到最终分数。

在主要部分,您应该使用 for 来最小化或最大化每个级别(您也可以尝试像这样添加一些调试://System.out.println("max/min level " + i);),然后在获取树的当前级别时检查是否它是 null 所以你没有例外,并且对于那个级别将它添加到最大节点,同时在最小节点中解析。

为了使用最大和最小节点,您已经为它们创建了函数。

算法的最大化部分:节点将获得其 children 的最大评级。警告:如果 child 不存在,则评分将是最低

对于算法的最小化部分。该节点将获得他的 children 的最低评级。警告:如果 child 不存在,评分将是最大值