Mathematical Analysis of 2048, The Game论文分享

2023-11-11 06:38

本文主要是介绍Mathematical Analysis of 2048, The Game论文分享,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!

0 摘要

游戏 2048 席卷了互联网,产生了无数的盗版。 世界各地的人们倾注了数百万小时试图创造 2048 棋子。 除了令人上瘾的游戏外,该游戏还提供了探索数学的有趣机会。 本文试图通过数学归纳法、数论、模糊论和拓扑学对博弈进行数学分析,在此过程中也试图找到确保胜利的最优策略。
关键词:数学分析,2048,帕斯卡三角 (Pascals Triangle),优化

1 引言

2048 是由Gabriele Cirulli 开发的滑块益智游戏。 这是一个在 4x4 网格上玩的游戏,棋子编号为 2 n 2^n 2n,其中“n”代表自然数。 游戏的目标是将相同编号的棋子组合在一起,最终形成数字 2048。用户可以在四个基本方向上移动,每次移动后,网格中随机生成一个新的棋子,编号为 2 或 4 概率约为 0.10。 如果至少一个棋子可以滑入一个空白点,或者如果棋子可以在所选方向上组合,则移动是合法的。 当用户没有任何合法移动时,游戏结束。 不禁要问一个问题,既然游戏是基于数学的,是否可以通过应用不同的数学概念来优化移动以提高我们的分数。

2 数学归纳法

在游戏开始时,我们会在随机位置获得两块棋子。 棋子可以用前面讨论的概率编号为 2 或 4。 通过观察,可以看出网格只能包含 2 n 2^n 2n 形式的数字。 我们也可以通过使用数学归纳法在数学上证明这一点。
第一步:一开始给出的棋子都是2,2和4,或者都是4。 总共有 2!2! -1 = 3 例。 这里的数字可以用 2 n 2^n 2n 的形式表示。
第二步:假设经过k步后,网格中的数字可以用 2 n 2^n 2n 的形式表示。
第三步:在第(k+1)步,出现以下情况
I. 我们把棋子滑到一个空的地方,没有棋子相互结合
II. 我们将两个或多个现有的棋子相互组合
III. 案例 1 和 2 的组合
在所有这三种情况下,都会随机生成一个新棋子,编号为 2 或 4,默认情况下可以表示为 2 的幂。

在第一种情况下,除了第 k 步的数字之外,我们只有一个新数字,它都可以用 2 的幂表示。在另一种情况下,由于编号为 2 r 2^r 2r 的棋子将组合成编号为 2 r + 1 2^{r+1} 2r+1 的棋子, 所有的棋子仍然可以用 2 的幂来表示。

所以我们可以说,在任何时候,网格都只有可以用 2 n 2^n 2n 表示的数字。

3 最大棋子

从前面的讨论中,我们知道所有的棋子都是 2 n 2^n 2n 的形式,所以最大的棋子也将是相同的形式。
让我们假设 2 r 2^r 2r r ∈ N r \in N rN 的最大棋子。
要创建此棋子,需要 2 个 2 r − 1 2^{r-1} 2r1 的棋子,要创建 2 r − 1 2^{r-1} 2r1 的图块,需要 2 个 2 r − 2 2^{r-2} 2r2 的图块,依此类推。
棋子的数量受网格上的空间限制,即 16 个空间,这意味着 r = 16 r = 16 r=16
因此,如果我们最后得到 2,则 2 16 = 65536 2^{16}=65536 216=65536 是最大的棋子。
假设我们很幸运,最后得到编号为 4 的棋子; 2 r + 1 2^{r+1} 2r+1 将是最大的棋子。
所以 2 17 = 131072 2^{17}=131072 217=131072 将是最大的棋子。

4 最大可能总和 (Sn)

所有的棋子都是 2 n 2^n 2n 的形式。 假设最好的情况是没有两个相同编号的棋子,并且我们在网格中拥有最高编号的棋子,可以很容易地看到它们将形成一个几何级数(GP)。 此外,由于我们正在考虑最佳情况,我们可以将最小的数字设为 4 而不是 2。总和 Sn 将由下式给出:
S n = 2 2 + 2 3 + 2 4 + … … … + 2 17 = 2 ( 2 17 − 1 ) / ( 2 − 1 ) − 2 1 = 262142 − 2 = 262140 \begin{aligned} \mathrm{S}_{\mathrm{n}} &=2^{2}+2^{3}+2^{4}+\ldots \ldots \ldots+2^{17} \\ &=2\left(2^{17}-1\right) /(2-1)-2^{1} \\ &=262142-2 \\ &=262140 \end{aligned} Sn=22+23+24++217=2(2171)/(21)21=2621422=262140
如果 最后一块是 2 而不是 4,那么总和将是:
S n ′ = 2 1 + 2 3 + 2 4 + … … … + 2 17 = 2 ( 2 17 − 1 ) / ( 2 − 1 ) − 2 2 = 262142 − 4 = 262138 \begin{aligned} \mathrm{S}_{\mathrm{n'}}{ } &=2^{1}+2^{3}+2^{4}+\ldots \ldots \ldots+2^{17} \\ &=2\left(2^{17}-1\right) /(2-1)-2^{2} \\ &=262142-4 \\ &=262138 \end{aligned} Sn=21+23+24++217=2(2171)/(21)22=2621424=262138
或者我们可以做:
S n ′ = 262140 − 2 = 262138 \begin{aligned} \mathrm{S}_{\mathrm{n'}} &=262140-2 \\ &=262138 \end{aligned} Sn=2621402=262138

5 最少获胜回合数 ( T m i n T_{min} Tmin)

通过创建 2048 棋子来赢得游戏(尽管可以选择继续玩,直到没有更多的合法移动)。由于棋子是随机生成的; 2 的概率为 0.9 ( P 2 = 0.9 P_2 = 0.9 P2=0.9) 和 4 的概率为 0.1 ( P 4 = 0.1 P_4 = 0.1 P4=0.1); 我们无法给出 T m i n T_{min} Tmin 的确切数字,但我们可以给出一个范围。

  1. 假设最好的情况是我们得到的所有棋子都是 4 号,并且我们所做的每一步都会导致 2 个棋子合并为 1 个棋子。
    现在,要制作 2048,我们至少需要 512 个棋子( 512 × 4 = 2048 512 \times 4=2048 512×4=2048)。 但是我们从 2 个棋子开始,这意味着我们需要 512-2=510 圈才能获得所有需要的棋子。 我们得到的最后一个棋子必须组合成 8,然后将 8s 组合成 16,将 16s 组合成 32,依此类推,直到我们将 1024s 组合成 2048。
    所以我们得到,
    T min ⁡ = 512 − 2 + 9 = 519 turns  \begin{aligned} \mathrm{T}_{\min } &=512-2+9 \\ &=519 \text { turns } \end{aligned} Tmin=5122+9=519 turns 
    得到所有编号为4的棋子的概率是 0. 1 519 = 1 0 − 519 0.1^{519}=10^{-519} 0.1519=10519

  2. 考虑一个例子,我们得到所有编号为 2 而不是 4 的棋子。如上所述,我们需要 1024 个棋子来生成 2048,然后将我们得到的最后一个棋子与另一个编号为 2 的棋子组合起来,最终得到 2048。
    同理:
    T min ⁡ = 1024 − 2 + 10 = 1032 turns  \begin{aligned} \mathrm{T}_{\min } &=1024-2+10 \\ &=1032 \text { turns } \end{aligned} Tmin=10242+10=1032 turns 
    得到所有 2 个编号的棋子的概率是: 0. 9 1032 ∼ 6.0 × 1 0 − 48 0.9^{1032} \sim 6.0 \times 10^{-48} 0.910326.0×1048
    因此,假设我们玩一场完美的游戏,赢得游戏所需的最少回合数在 [519, 1032]。

这篇关于Mathematical Analysis of 2048, The Game论文分享的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!



http://www.chinasem.cn/article/388202

相关文章

Golang操作DuckDB实战案例分享

《Golang操作DuckDB实战案例分享》DuckDB是一个嵌入式SQL数据库引擎,它与众所周知的SQLite非常相似,但它是为olap风格的工作负载设计的,DuckDB支持各种数据类型和SQL特性... 目录DuckDB的主要优点环境准备初始化表和数据查询单行或多行错误处理和事务完整代码最后总结Duck

将Python应用部署到生产环境的小技巧分享

《将Python应用部署到生产环境的小技巧分享》文章主要讲述了在将Python应用程序部署到生产环境之前,需要进行的准备工作和最佳实践,包括心态调整、代码审查、测试覆盖率提升、配置文件优化、日志记录完... 目录部署前夜:从开发到生产的心理准备与检查清单环境搭建:打造稳固的应用运行平台自动化流水线:让部署像

C#读取本地网络配置信息全攻略分享

《C#读取本地网络配置信息全攻略分享》在当今数字化时代,网络已深度融入我们生活与工作的方方面面,对于软件开发而言,掌握本地计算机的网络配置信息显得尤为关键,而在C#编程的世界里,我们又该如何巧妙地读取... 目录一、引言二、C# 读取本地网络配置信息的基础准备2.1 引入关键命名空间2.2 理解核心类与方法

Golang使用etcd构建分布式锁的示例分享

《Golang使用etcd构建分布式锁的示例分享》在本教程中,我们将学习如何使用Go和etcd构建分布式锁系统,分布式锁系统对于管理对分布式系统中共享资源的并发访问至关重要,它有助于维护一致性,防止竞... 目录引言环境准备新建Go项目实现加锁和解锁功能测试分布式锁重构实现失败重试总结引言我们将使用Go作

Python中列表的高级索引技巧分享

《Python中列表的高级索引技巧分享》列表是Python中最常用的数据结构之一,它允许你存储多个元素,并且可以通过索引来访问这些元素,本文将带你深入了解Python列表的高级索引技巧,希望对... 目录1.基本索引2.切片3.负数索引切片4.步长5.多维列表6.列表解析7.切片赋值8.删除元素9.反转列表

Python中处理NaN值的技巧分享

《Python中处理NaN值的技巧分享》在数据科学和数据分析领域,NaN(NotaNumber)是一个常见的概念,它表示一个缺失或未定义的数值,在Python中,尤其是在使用pandas库处理数据时,... 目录NaN 值的来源和影响使用 pandas 的 isna()和 isnull()函数直接比较 Na

Ilya-AI分享的他在OpenAI学习到的15个提示工程技巧

Ilya(不是本人,claude AI)在社交媒体上分享了他在OpenAI学习到的15个Prompt撰写技巧。 以下是详细的内容: 提示精确化:在编写提示时,力求表达清晰准确。清楚地阐述任务需求和概念定义至关重要。例:不用"分析文本",而用"判断这段话的情感倾向:积极、消极还是中性"。 快速迭代:善于快速连续调整提示。熟练的提示工程师能够灵活地进行多轮优化。例:从"总结文章"到"用

【专题】2024飞行汽车技术全景报告合集PDF分享(附原数据表)

原文链接: https://tecdat.cn/?p=37628 6月16日,小鹏汇天旅航者X2在北京大兴国际机场临空经济区完成首飞,这也是小鹏汇天的产品在京津冀地区进行的首次飞行。小鹏汇天方面还表示,公司准备量产,并计划今年四季度开启预售小鹏汇天分体式飞行汽车,探索分体式飞行汽车城际通勤。阅读原文,获取专题报告合集全文,解锁文末271份飞行汽车相关行业研究报告。 据悉,业内人士对飞行汽车行业

AI hospital 论文Idea

一、Benchmarking Large Language Models on Communicative Medical Coaching: A Dataset and a Novel System论文地址含代码 大多数现有模型和工具主要迎合以患者为中心的服务。这项工作深入探讨了LLMs在提高医疗专业人员的沟通能力。目标是构建一个模拟实践环境,人类医生(即医学学习者)可以在其中与患者代理进行医学

论文翻译:arxiv-2024 Benchmark Data Contamination of Large Language Models: A Survey

Benchmark Data Contamination of Large Language Models: A Survey https://arxiv.org/abs/2406.04244 大规模语言模型的基准数据污染:一项综述 文章目录 大规模语言模型的基准数据污染:一项综述摘要1 引言 摘要 大规模语言模型(LLMs),如GPT-4、Claude-3和Gemini的快