algorithm - 2048 游戏的最佳盲算法是什么?

标签 algorithm artificial-intelligence

<分区>

游戏2048自 2014 年 2 月发布以来迅速流行。有关游戏的描述和最佳算法的讨论,请参阅 What is the optimal algorithm for the game 2048? .这是 source code .

2048 的盲算法 是一种看不到棋盘的算法;算法收到的唯一反馈是是否发生了尝试滑动(我们可以假设阻塞的滑动会产生可听见的哔哔声)。盲算法对于在 2048 中入门非常有用,而无需全神贯注于游戏。

这是我的具体问题:是否有一种针对 2048 的盲算法在 10^6 次试验中始终比平均分数 3500 更好? (仅发布您已验证的答案)

这是LADDER算法的性能,可以记为(LD* RD*)* (+U)。也就是说,循环“向左,向下重复直到卡住,向右,向下重复直到卡住”并向上按当且仅当左,右和下都被阻塞,如果顶行完全为空并且底部行已满。我将此算法称为 LADDER,因为字母 LDDR,并且因为我想象像大金刚中的马里奥一样爬下梯子。该算法的动机是保持从棋盘顶部到底部的渐增梯度,类似于许多非盲算法。

这是 10^6 次 LADDER 试验的直方图,由最终板上的顶部图 block 着色,bin 宽度为 32,平均值为 3478.1。我通过在 Python 中模拟游戏和算法来生成此数据,使用 0.9 的概率,每个新瓷砖都是 2,就像在原始游戏中一样。你看不到这个垂直尺度的 1024 场比赛,但它们稀疏地分布在 8000 到 16000 之间。分形结构与顶部瓷砖、倒数第二个瓷砖等的出现次数有关。相比之下,随机按钮混合在 10^4 次试验中给出的平均值约为 800。

enter image description here

最佳答案

2048 游戏中最重要的是将高数集中在边界而不是中间。所以一个很好的策略是尽可能长时间地把所有东西都放在底部。您的 LADDER 算法可以做到这一点,但我想更多地关注左侧而不是完全切换到右侧。这是伪代码中的算法:

while(true)
    {
    if (down)
        continue;
    elseif(left)
        continue;
    elseif (right)
        continue;
    else
        {
        up;
        down; //if forced to go up; go back down immediately
        }
    }

使用您的约定,这将是:

((D*L)*R)U

换句话说:尽可能往下走;如果你不能;向左走;如果你不能向左走;向右走。您几乎不需要上去。

因为我很快就没有时间来实现它来使用它 10⁶ 次;我希望其他人可以为此给出正确的统计数据,但我的猜测是这将胜过您的 LADDER 算法

关于algorithm - 2048 游戏的最佳盲算法是什么?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/22748313/

相关文章:

c - 为什么我在比较线性搜索和二分搜索时每次都得到零?

algorithm - 请识别此算法 : probabilistic top-k elements in a data stream

machine-learning - 类型对象 'GridSearchCV' 没有属性 'cv_results_' ?

machine-learning - 使用 scikit 选择层次凝聚聚类中的簇数

machine-learning - 异构数据分类器

python - 如何为 Conv3D 模型预处理视频

algorithm - 在基数和幂都是二进制的情况下,找到二进制值的幂的最佳算法方法是什么?

c++ - 帮我理解这个算法(简单)

artificial-intelligence - 人工智能项目

algorithm - 如何有效地为特定宽度的字符串找到理想的列数?