首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >如何模拟两位玩家之间的战斗?

如何模拟两位玩家之间的战斗?
EN

Stack Overflow用户
提问于 2011-03-26 20:23:02
回答 3查看 1.8K关注 0票数 1

我有两个球员,我想模拟他们之间的比赛。两者都有一些属性(权力、智慧.)以及不同的行动。某些行为的结果是基于属性值和一些运气因素。

算法:

  • 为两个玩家构建一个包含所有可能移动的游戏树
    • 游戏树可能会有有限的深度
    • 每个级别都属于不同的玩家。

  • 在叶节点上使用一些启发式方法来找出必须移动的玩家获胜的概率。
  • 向上传播概率(就像极小极大算法一样)
  • 选择概率最高的移动
  • 在此算法开始时继续

所以,这基本上是极小极大算法。不过,我几乎没有什么问题:

  1. 如何考虑运气因素?
  2. 当我移动一步时,我是否必须再次运行整个算法?(构建具有+1深度和新根节点的树,计算新的概率.)
  3. 还有其他方法来模拟一场战斗吗?

谢谢。

EN

回答 3

Stack Overflow用户

回答已采纳

发布于 2011-03-26 21:11:37

虽然通常情况下,您的算法是有意义的,但我们无法保证这个算法是最好的。例如,让我们想象两个游戏:

  1. 在第一场比赛中,每个玩家都有两个动作:用枪射击,用剑。在这个游戏中,每个步骤都不影响其他步骤,所以构建一个移动树在这里没有任何意义。每个玩家只需选择武器,并继续射击/攻击和叫喊‘有盾牌或在它上!’直到死亡或胜利。
  2. 第二局也有第三招--偷走对手的盾牌。在这种情况下,移动树会更有意义,因为很明显,如果你决定偷敌人的盾牌,那么在用剑攻击之前偷它会更有意义。

所以你是否需要这个移动树,,很大程度上取决于你的游戏规则。

我看到的关于运气因子的主要选项是是否将它的影响包含到移动树中。这取决于运气因素是否以相同的方式影响每个动作。如果为真,则在计算移动树时可以省略运气因子,然后在计算所选操作的结果时应用。否则,如果运气因素以不同的方式影响不同的行为(例如,即使是完全输家也能用枪射击敌人,但用勺子杀死,技能需要好运),那么在计算移动树中的概率时应考虑运气因素。

每个节点之后是否需要重新计算整个树取决于是否能够100%地预测所选操作的结果。例如,在国际象棋中,你可以预测,如果你决定移动一个棋子,那么这个棋子肯定会在你决定的地方移动。这允许您在每一步中选择移动树中的分支,并为其中的每个场景再计算一次移动,而不是从零开始重新计算整棵树。但这是不适用的,如果球员可以决定用枪射击,但由于他是不走运的一天,他会开枪打自己的腿。

票数 2
EN

Stack Overflow用户

发布于 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,您可以保留一些树;移动到新状态的分支,并移除它的父树和连接到它的子树。然后在剩下的子树中进一步展开一个深度。但这是推测;我以前从来没有时间这样做过:) (但是,在计算概率时,您将保留错误)。

这些技术的好处是,当你建立它们的时候,它们就能工作了。机器学习技术运行速度快得多,但在使用之前需要几个小时甚至几天的培训;)

票数 3
EN

Stack Overflow用户

发布于 2011-03-26 20:32:02

您所要求的是非常“庞大”的...but已经由许多开发人员完成。

我建议你开始读一本关于游戏设计的书,像这样的:顶部

..。并在www.CodeProject.comwww.codeplex.com中搜索游戏实现的示例。

祝好运,

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/5445060

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档