最佳单词 本周的Riddler经典是关于病毒文字游戏Wordle公司. 找到一个策略,使你在最多三次猜测中赢得Wordle的概率最大化。 这是我的解决方案: [显示解决方案] 互联网上已经提出了多种解决方案,其中大多数涉及到某种形式的贪婪启发式,这意味着我们只希望在下一步行动后立即优化游戏状态。本质上,这就像下棋,但只需向前看一步。这一让步的原因是搜索空间呈指数级增长,而且向前看很难计算。 然而,本周的Riddler有点不同。如果我们的目标是最大化赢得最多3次猜测的概率,那么我们只需要设计出最好的短期战略。因此,有希望找到最佳策略……事实上,我们会找到的!设$W$是可接受的猜测词的集合(包含12972个词),设$S$是可能的解词的集合(包含2315个词)。让我们定义以下内容价值函数:\[V_k(T)=\left\{\begin{array}{l}\text{我们最多获胜的最大概率}k\text{turns,}\\\文本{假设解包含在集合}T中\\\文本{我们可以使用集合}W中的任何猜测。\结束{数组}\right\}\]请注意,Riddler问题要求我们找到$V_3(S)$。我们的一般方法是动态规划,这需要我们努力达到$k=3$。让我们从最简单的情况开始,$k=1$。 当$k=1$时,我们要求最大化我们一招获胜的概率。考虑到每个单词都有可能被选中,如果我们知道我们的解决方案在$T$中,我们最好的选择是在$T$中选择任何单词,然后我们获得\[V_1(T)=\压裂{1}{|T|},\]其中$|T|$是$T$中包含的字数。因此,我们的战略最后一步应该是从$T$(剩余有效单词列表)中选择任何单词。对于较大的$k$,我们可以使用贝尔曼方程,这是动态编程背后的基本思想。在我们的背景下,它是:\[V_{k}(T)=\max_{w\ in w}\frac{1}{|T|}\sum_{s\in T}V_{k-1}(f(w,s,T))\qquad\text{for}k=2,3,\dots\]其中$f(w,s,T)$是如果我们猜测$w$,仍然可以接受的单词集,而真实单词是T$中的$s\,其中$T$是剩余可能单词的已知列表。这很直观;我们看每一个可能的动作,对于每一个动作,我们看所有可能的解词的平均概率,我们最多可以完成$k-1$个动作。 对于$k=2$,Bellman方程可以简化。假设我们正在考虑以w$表示的猜测$w\。应用此猜测将集合$T$拆分为$M_w$可能的组,这基于我们可以收到的响应猜测$w$的不同可能的绿色和黄色瓷砖集合$M_w。换句话说,\[|T|=n_1+n_2+\cdots+n_{M_w}\]其中$n_i$是如果我们收到响应$i$,则可能解决方案缩减池中的字数。如果我们收到响应$i$,那么一招中获胜的概率必须是$1/n_i$,如上所述。因此,我们可以应用Bellman方程得出:\开始{align}V_{2}(T)&=\max_{w\in w}\frac{1}{|T|}\biggl(\underrace{1}{n_1}+\cdots+\trac{1}{n_1})\\&=\max_{w\在w}\frac{M_w}{|T|}中\结束{align}所以无论我们在w$中选择什么单词$w\,决定我们在两步或更少的移动中获胜概率的是“分割”$M_w$的数量,也就是我们做出选择后$T$被分割成的集合数。因此倒数第二步就是选择最大化分割数的单词。 我们现在已经找出了最后两步的最佳策略。剩下的就是第一步。不幸的是,上面的论点似乎没有推广到$k=2$以外,所以我们必须转向暴力搜索。然而,由于我们已经知道如何在第二步和第三步中采取最佳行动,因此这可以非常有效地进行。我们发现,最佳的第一个词是TRACE,在3步或更少的动作中获胜的相关概率为$\frac{1388}{2315}\约0.599568$;只差60%。 基于之前借助于文森特·特詹(我们的代码可以在上找到github),我们确定了当最大化分割(作为贪婪的启发式)时,要选择的最佳第一个单词也是TRACE。因此,对于这个问题,要在三步或更少的动作中获胜的最佳策略实际上是最大化前两步的分路次数。据我所知,这是一个巧合;例如,如果我们使用不同的单词表,第一步的最佳策略可能会有所不同。 注:就我所知,证明max-splits启发式是最优的证据只能应用于倒数第二步(在我们的例子中是第二步)。事实证明,这对于第一次行动来说也是最佳的,这似乎是一个巧合。事实上,如果我们将这个问题扩展到更多的移动,或者使用不同的单词表,我怀疑max-splits启发式将不再是第一个移动的最佳方法。 有趣的异常 如果我们在每一回合都采用“最大分裂”启发法,下面是不同单词获胜所需时间的分布: 因此,根据这种方法,我们应该在3轮或更少的回合中获胜,概率为$\frac{1+74+1233}{2315}=\frac}{1308}{2315}\约0.565美元。为什么这个结果与上面的$\frac{1388}{2315}$不一样?原因是,虽然“最大分割”是前两步的正确策略,但它不是最后一步的正确战略。使用最大拆分通常会导致选择不属于有效解决方案的单词,因此永远不会导致在下一轮中获胜! 为了说明这是如何发生的,请考虑以下示例,由文森特·特詹。假设我们从TRACE通常的第一个猜测开始,然后我们收到响应。根据此响应,解决方案必须是以下之一:{BIRCH、LURCH、PORCH}。我们的任务是最大限度地提高我们在最多两步(总共三步)中获胜的概率。事实证明,从三个可能的解决方案单词中选择一个作为我们的第二个猜测是错误的策略!下面是我们第二个猜测的不同选择的结果。 真正的解决方案 探针。比赛总共持续 猜猜看 桦木 LURCH公司 保时捷 2圈 3圈 4圈 桦木 1/3 1/3 1/3 LURCH公司 1/3 1/3 1/3 保时捷 1/3 1/3 1/3 区域 0 1 0 如果我们猜测BIRCH,我们将以1/3的概率幸运地当场获胜。但如果我们猜错了,剩下的只有两个单词。可能需要一到两次猜测才能获胜,每次猜测的概率为1/3。因此,我们在最多3次移动中获胜的概率是2/3。在这种情况下,列表中有两个“分裂”(不同的可能响应)和三个单词,这就是概率为2/3的原因。 然而,如果我们猜测ZONAL,它甚至不在剩下的单词列表中,我们会牺牲当场获胜的可能性,但我们保证在下一步中获胜。这是因为每个可能的解决方案都提供了不同的响应,使我们能够完全区分它们。列表中有三个“拆分”和三个单词,这就是概率为3/3=1的原因。
当$k=2$时,解决方案相对简单,因为它依赖于$k=1$处的解决方案,即$1/|T|$。因此,它有一个很好的公式。但是,当$k=3$时,解决方案依赖于$k=2$处的解决方案,一旦插入该解决方案,得到的表达式就不会像前面的步骤那样简化。为了在w$中找到超过$w\的最大值,您现在必须测试每个$w$,看看哪个得分更高。 答复