【问题标题】:Donald Knuth algorithm for Mastermind - can we do better?Mastermind 的 Donald Knuth 算法——我们能做得更好吗?
【发布时间】:2019-05-18 11:21:12
【问题描述】:

我为 Mastermind https://www.cs.uni.edu/~wallingf/teaching/cs3530/resources/knuth-mastermind.pdf 实现了 Donald Knuth 1977 算法

我能够重现他的结果 - 在最坏的情况下 5 次猜测获胜,平均为 4.476。

然后我尝试了一些不同的东西。我反复运行 Knuth 的算法,并在每次开始前随机打乱整个组合列表。在最坏的情况下(如 Knuth),我能够采用 5 次猜测获胜的策略,但平均有 4.451 次猜测获胜。比高德纳更好。

之前是否有任何工作试图平均优于 Knuth 算法,同时保持最坏的情况?到目前为止,我在网上找不到任何迹象。

谢谢!

阿隆

【问题讨论】:

  • 您问题中唯一的问号是“以前是否有任何工作试图在平均表现优于 Knuth 算法的同时保持最坏的情况?”所以这就是我的回答。 :-)

标签: knuth


【解决方案1】:

在论文中,Knuth 描述了如何选择策略:

表 1 是通过在每个阶段选择一个测试模式最小化剩余可能性的最大数量找到的,如果这个最小值可以通过“有效”模式(一种使“四个黑色命中”成为可能的模式)实现,则应使用有效模式。在此条件下,选择了按数字顺序排列的第一个这样的测试模式。幸运的是,这个过程可以保证在五步中获胜。

所以在某种程度上它是一种贪婪的策略(试图在每一步而不是整体上取得最大的进步),而且还有一个临时的平局策略。这意味着它不需要在期望值上是最优的,而 Knuth 确实是这样说的:

从“预期移动次数”的角度来看,表 1 中的策略并不是最优的,但可能非常接近。可以改进的一条线[...]

因此,在论文发表时,Knuth 已经意识到它不是最优的,甚至有一个明确的例子。

当这篇论文在他的收藏Selected Papers on Fun and Games (2010) 中重新发表时,他在 6 页的论文中添加了一个 5 页的附录。在本附录中,他首先在第一段中提到了随机化,并讨论了最小化预期移动次数的问题。他将其分析为对所有 1296 个可能的代码字进行的所有移动的总和,他提到了几篇论文:

  • 他的原始算法给出了 5801(平均 5801/1296 ≈ 4.47608),小幅改进给出了 5800(≈ 4.4753)。

  • Robert W. Irving,“Towards an optimization Mastermind strategy”,Journal of Recreational Mathematics 11 (1978),81-87 [在“最多 5 个”范围内达到 5664 ⇒ ≈4.37]

  • E. Neuwirth,“Mastermind 的一些策略”,Zeitschrift fur Operations Research 26 (1982),B257-B278 [达到 5658 ⇒ ≈4.3657]

  • Kenji Koyama 和 Tony W. Lai,“最佳策划策略”,休闲数学杂志 25 (1993), 251-256 [达到 5626 ⇒ ≈4.34104938]

最后一个是最好的,因为它是通过详尽的深度优先搜索找到的。 (请注意,如果您允许他们有时走 6 步,那么所有这些论文在预期的移动次数上都可以做得稍微好一些……我给出了“最多 5 次”约束的数字,因为这就是这里的问题所要求的.)

您可以通过假设代码生成器是对抗性的并且不会在 1296 个可能的代码字中随机均匀地选择,而是根据任何分布将使其对代码破解者来说最困难,从而使其更通用(更难)。最后,他提到了 Tom Nestor 所做的大量工作,最终解决了许多此类问题。

您可能会很高兴尝试跟进或重现这些结果(例如,编写详尽的搜索程序)。尽情享受吧!

【讨论】:

    【解决方案2】:

    据我所知,到目前为止,还没有关于这种效果的发表作品。我前段时间已经进行了这个观察,通过不总是从“一步前瞻”中选择(规范的)第一次试验可以获得更好的结果。我观察了不同的结果,不是从 1122 开始,而是从例如用5544。也可以尝试随机选择而不是先使用规范。是的,我同意你的观点,这是一个有趣的观点——但非常、非常特别。

    【讨论】:

    • 感谢您提出这个问题;它让我终于查到了。不仅存在更多已发表的作品,其中一些甚至引用自维基百科关于该游戏的文章。 :-)
    • @ShreevatsaR:你是对的,当然多年来存在更好的算法,并且自 1993 年以来,Koyama 发布了一个最优算法。我的回答只是关注 Alon 的观察,使用不同的起始代码可以找到比 Knuth 发布的结果稍好(并使用 Knuth 算法)。
    • @GilShafriri 当找到更好的算法时,不太可能有人会发布有关对更差算法进行调整的详细信息,因此可能确实没有关于 Knuth 选择过程的特定调整的已发表工作。另一方面,Knuth 附录的第一句话是“当然,如果我是真实游戏中的密码破译者,我不会完全遵循表 1 的策略。我会随机化它,……”所以 IMO 已经建议进行某种随机化。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2016-09-14
    • 2021-09-28
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多