【问题标题】:Find the best game tactic against an other tactic, for example in the card game Toepen找到对抗其他策略的最佳游戏策略,例如在纸牌游戏 Toepen
【发布时间】:2012-07-27 01:11:12
【问题描述】:

我想测试一些纸牌游戏战术,我的目标是了解女巫战术在现实生活中会更好。为此,我做了一个模拟,但我不知道我是否做了一个好的模拟。所以我想知道如何创建一个好的模拟。

您无法模拟现实生活中的每一个因素,例如虚张声势。还有一些因素是可以消除的,我尽量消除。剩下的因素,比如虚张声势,已经超出了范围。无法模拟这些。

我使用我的模拟项目来比较一些策略。通过这种方式,您可以看到可以针对其他策略使用的策略。这样做的缺点是,如果您知道其他玩家的战术,您只能使用它。当您不知道可以使用什么策略来对付它时,那么您需要一台计算机来测试它。所以你只能用这个项目来审视你的演奏风格。

这个问题不是关于创造一个“上帝战术”,而是关于编写好的模拟软件,可以用来模拟例如纸牌游戏。所以我想知道如何才能做出好的模拟:

  • 我需要携带什么?
  • 你怎么知道你的模拟是一个好的模拟?
  • 我应该如何处理情况?例如生成一些随机牌,或尝试所有可能性。

【问题讨论】:

  • 您能否将您的问题改写为更通用的方法?我想了解更多有关如何进行良好模拟的信息。

标签: methods simulation


【解决方案1】:

三个问题的答案:

  1. 卡片粘在一起和不同的洗牌技术等因素并不重要。我假设您将通过使用伪随机噪声源(如 rand())来对洗牌进行建模,以随机化牌的顺序。大多数洗牌技术可能已经足够好,这对于您的目的来说是一个完全足够的模型。

  2. 我不太了解游戏,无法知道如何简单地描述策略。你所描述的测试应该回答当它们正面交锋时哪种战术会获胜的问题。如果只有这两种策略,并且它们足够简单,可以完全实施,那么是的,你的测试会告诉你哪个更好。如果该游戏与大多数此类游戏一样,并且涉及许多不同的策略和微妙之处,那么知道这两种策略中的哪一种会在两者正面交锋时获胜可能不会告诉您哪个策略实际上更好。

  3. 我在回答你的第二个问题时基本上涵盖了这一点,但如果你已经 100% 正确编程了战术,那么机器人对峙的结果将很有用,因为它们会告诉你其中哪些当他们正面交锋时,两种策略会更频繁地获胜。不过,我认为在大多数这样的游戏中,仅凭这一点并不能告诉您该策略的整体效果有多好。再说一次,我对这款游戏的了解不够肯定,但如果游戏涉及许多可能的策略,那么测试可能不会告诉你太多超级有用的东西。

【讨论】:

    【解决方案2】:

    您无法使用这种模拟来证明任何事情。你真正倾向于的是模拟 A 比 B 更好,但不是它们在现实世界中的工作方式或与其他 策略。

    您可以大致了解什么可能会更好或更坏,但仅此而已。

    【讨论】:

    • 你甚至都不知道。如果你有一次模拟 A 与模拟 B 获胜,那么你只有现在,模拟 A 赢了一次。这可能是因为模拟 A 更好,或者只是偶然。这些运行是non-deterministic。您必须重复它们并进行一些统计。
    【解决方案3】:

    我的答案不是基于研究,而是我认为在小范围内模拟战术的方式。

    这就是我进行模拟的方式:

    您需要做的第一件事是确保您可以实施您想要比较的策略。如果您无法对它们进行编程,那么您就无法自行测试它们。

    写下测试范围,每次有新想法时,您都可以扩展您的项目。当你这样做时,你正在创建一个永远不会完成的项目。因此,请标记您想要做什么并考虑每个选项。诈唬就是一个很好的例子。进行虚张声势的模拟几乎是不可能的,你可以计算你有多少获胜的机会,但是一个普通人会虚张声势,例如当他认为其他人会通过或他会赢时。在程序中实现“感觉”是一项艰巨的工作。 并不是每个人都对虚张声势有相同的感受。但是你可以做出不同的诈唬牌(感觉),让机器人在每一种战术中使用它们。这将是很多工作,对我来说这是不值得的。

    找出您希望如何比较策略。您想知道要赢多少零钱吗?或者您是否出于其他原因想做一些随机游戏?

    每个游戏都有更多方言,找出你想遵循的规则。执行这些规则。如果不这样做,模拟将不正确。

    实施所有策略,并尽可能使用相同的功能。这样您就可以自动测试核心功能。使用这种方法,您可以更快地完成工作,并且您会发现从未被发现的错误。

    测试系统。测试对于模拟来说非常重要一个小问题可能会导致错误的结果。使用调试器检查您的代码,以了解它是否可以执行操作。 创建一个“调试模式”,在此模式下显示每场比赛的结果并查看它们。另外让其他人查看游戏的玩法

    【讨论】:

      【解决方案4】:

      在您要求提供更多详细信息时:

      什么是重要的?

      如何才能做出好的模拟?

      你怎么知道它在现实生活中是相关的。

      第一个问题的答案只能由游戏中的专家来回答;创建 AI 并非易事,要创建出色的 AI,您需要了解游戏中的所有策略,并且需要编写这些策略。然后您要么需要知道何时使用这些策略,要么知道你是什么人试图确定让计算机循环遍历所有组合。

      进行良好的模拟很大程度上取决于您要达到的目标。您可以使用国际象棋方法,让 AI 播放所有可能的场景并选择最好的场景。这实际上会完全从游戏中移除策略,但它也可能会提出一些新策略;但是好的国际象棋程序使用开书之类的东西。为了模拟现实生活,您可能需要使用一些策略组合,并根据情况发挥所有可能的动作。

      另外,你说你不能诈唬,但这不一定是真的。如果这是游戏中的一种策略,那么您可能应该对诈唬进行编程,并尝试对诈唬做出反应。如果你打算这样做,你需要实施一个诈唬技能并检测诈唬技能以及诈唬百分比。有了它,您还可以了解对于给定的现实生活技能水平而言,虚张声势的频率是多少。如果您确实实施了虚张声势,您可能希望能够在打开或关闭它的情况下运行模拟。

      为了测试您的模拟器,并确保它与现实生活准确,我建议让计算机面对所有已知的组合/结果,并确保结果与您在现实生活中看到的相同。之后开始循环,但慢慢增加测试,首先运行一些策略并检查结果,然后再添加一些。如果你从一开始就把所有的策略都放进去,你将很难发现其中一个不能正常工作。

      【讨论】:

      • 那么你将如何实施诈唬呢?你可以进行几种类型的诈唬,但是有很多原因可以说明为什么有人会在某种情况下诈唬。除此之外,在现实生活中,你会虚张声势还有很多其他原因。例如:您可以检测到他在“撒谎”时所做的事情。我知道一个非常好的董事会需要有一个“虚张声势的实施”。但是当你真的想要实现它时,你将需要做很多工作来实现一个好的实现。我想你需要对诈唬进行长期研究才能发现一种游戏风格。
      • 非常正确 - 我不知道您所指的游戏的具体细节,但如果您对扑克 AI 进行一些研究,您应该能够找到一些好的信息并能够将其用作如果/当你决定在组合中加入诈唬时,这是一个起点。
      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2020-09-23
      • 2011-11-02
      • 2013-04-09
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多