在JAVA和随机启发式

时间:2016-04-19 19:46:58

标签: minimax

我正试图在Java中从零开始实现minimax算法。 通用点是众所周知的,通过树我试图找到最好的移动。 我现在没有代码显示的重要内容,首先我希望有人给我一个通用的方法,这样我就可以启动项目,然后用我的代码更新帖子。

除此之外,我还将为我的游戏实施随机启发式,随机选择下一步并将其传递给游戏,但稍后会添加。

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

P.S。

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

1 个答案:

答案 0 :(得分:0)

所以要遵循的主要思路如下: 使用给定的游戏区域和评级机制计算最佳移动 字段输入字段从ratingMechanisms计算机制,以评估移动并返回最佳移动。

进行更深入的分析: Minimax算法的关键是在两个玩家之间来回,其中"转向的玩家是"希望以最高分获得此举。反过来,每个可用移动的得分由对方玩家决定其可用移动中的哪一个具有最小分数来确定。并且对手球员移动的得分再次由轮流球员试图最大化其得分以及从移动树一直到最终状态一直决定。

算法的描述,假设X是"轮流玩家,"看起来像是:

- 如果游戏结束,请从X的角度返回分数。

- 以其他方式获取每个可能移动的新游戏状态列表

- 创建一个分数列表

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

- 如果轮到X,请从分数列表中返回最高分

- 如果轮到它,请从分数列表中返回最低分数

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

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

为了使用max和min节点,您可以为这些节点创建函数。

算法的最大化部分:节点将获得他孩子的最高评级。警告:如果不存在儿童,则评级为最小值。

用于最小化部分算法。该节点将获得他孩子的最低评级。警告:如果不存在儿童,则评级为最高。