我有两个球员,我想模拟他们之间的比赛。两者都有一些属性(权力、智慧.)以及不同的行动。某些行为的结果是基于属性值和一些运气因素。
算法:
所以,这基本上是极小极大算法。不过,我几乎没有什么问题:
谢谢。
发布于 2011-03-26 21:11:37
虽然通常情况下,您的算法是有意义的,但我们无法保证这个算法是最好的。例如,让我们想象两个游戏:
所以你是否需要这个移动树,,很大程度上取决于你的游戏规则。
我看到的关于运气因子的主要选项是是否将它的影响包含到移动树中。这取决于运气因素是否以相同的方式影响每个动作。如果为真,则在计算移动树时可以省略运气因子,然后在计算所选操作的结果时应用。否则,如果运气因素以不同的方式影响不同的行为(例如,即使是完全输家也能用枪射击敌人,但用勺子杀死,技能需要好运),那么在计算移动树中的概率时应考虑运气因素。
每个节点之后是否需要重新计算整个树取决于是否能够100%地预测所选操作的结果。例如,在国际象棋中,你可以预测,如果你决定移动一个棋子,那么这个棋子肯定会在你决定的地方移动。这允许您在每一步中选择移动树中的分支,并为其中的每个场景再计算一次移动,而不是从零开始重新计算整棵树。但这是不适用的,如果球员可以决定用枪射击,但由于他是不走运的一天,他会开枪打自己的腿。
发布于 2011-03-27 09:54:21
你应该看看蒙特卡洛树搜索,它听起来似乎很适合你的问题。
它没有使用启发式,而是在扩展树之前使用每个树枝上的随机玩家来运行一个完整的游戏。这样做的好处是,您实际上正在构建一棵概率树,而不必将树扩展到最后,也不必使用启发式方法(如MinMax )来截断。
MCTS也是当前游戏围棋中最好的方法,也是目前在游戏规则未知的情况下玩游戏的最佳方法。为了获得额外的效果,您可以使用一些有限状态机代理而不是随机参与者来使概率更精确。您还可以通过使用跳过某些分支的决定器来降低分支因子,使用机器学习派生的启发式。(但这是你最后一次做的事情,以提高技术的速度)
如果你能做MinMax,你可以在没有太多麻烦的情况下完成MCTS :)并且MCTS可以玩比MinMax任何时候都要复杂得多的游戏,因为它相比于它大大降低了复杂性。(如果你打算继续扩大游戏规则,那就好了)
如果你感兴趣的话,看看这里:
http://www.aaai.org/Papers/AIIDE/2008/AIIDE08-036.pdf
是的,你必须在每个球员的每一步都做到这一点。因此,MinMax和MCTS都是慢的,所有基于游戏树的技术都是缓慢的。
但是,使用MinMax,您可以保留一些树;移动到新状态的分支,并移除它的父树和连接到它的子树。然后在剩下的子树中进一步展开一个深度。但这是推测;我以前从来没有时间这样做过:) (但是,在计算概率时,您将保留错误)。
这些技术的好处是,当你建立它们的时候,它们就能工作了。机器学习技术运行速度快得多,但在使用之前需要几个小时甚至几天的培训;)
发布于 2011-03-26 20:32:02
您所要求的是非常“庞大”的...but已经由许多开发人员完成。
我建议你开始读一本关于游戏设计的书,像这样的:顶部
..。并在www.CodeProject.com和www.codeplex.com中搜索游戏实现的示例。
祝好运,
https://stackoverflow.com/questions/5445060
复制相似问题