📜  pytwisty:魔方解算器Python项目

📅  最后修改于: 2022-05-13 01:54:42.705000             🧑  作者: Mango

pytwisty:魔方解算器Python项目

pytwisty是一个求解器的极其快速和高效的Python 3 实现,用于许多曲折的谜题,包括 1x2x2、1x2x3 和 2x2x2 魔方谜题。

介绍

现代加速器使用记忆的移动序列(称为算法)求解魔方,他们部署这些算法以逐部分求解立方体。每个算法对应于立方体上不同排列的彩色贴纸。当加速器发现他识别的排列时,他会执行相应的算法,使立方体更接近求解。

然而,传统的计算机化求解器只是使用复杂的搜索技术从立方体上所有可能位置的子集中寻找最佳解决方案。其中最快的是 Kociemba 算法,该算法可识别 200 亿个职位的子集。该算法实际上还用于计算机器人中的解决方案,该机器人拥有目前机器人最快解决方案的吉尼斯世界纪录。为了实验,我们将 Herbert Kociemba 自己在我的机器上开发的 2x2x2 求解器与 Korf 算法的其他两种实现和求解立方体的 2 路 BFS 方法进行了比较,这两种方法也是目前最快的求解方法之一。在测量他们的平均求解时间后,Kociemba 的求解器确实被证明是其中最快的。

相比之下,我们将开发一个使用“人类方法”来解决难题的求解器。具体来说,它结合了稍微改变的逐层 (LBL) 和 CFOP 方法。当我们在同一组随机打乱上运行 2x2x2 求解器时,它的求解时间平均比上述 Herbert Kociemba 求解器的求解时间快 350 倍。我们使用 timeit 模块来测量求解器的求解时间,结果以秒为单位的平均求解时间约为 10^-5 秒,而 Kociemba 求解器所用的时间约为 10^-2秒在我的机器上使用 CPython。



执行

求解器具有极高的速度和效率背后的主要原因是它基于一种我喜欢称之为“最小思维”技术的开发技术。简单来说,这是一种通过识别问题类型并使用预定结果直接跳到解决方案来最小化解决任何问题背后的思考过程的技术。在解谜的每个步骤中,解算器都会识别拼图各个部分的当前排列和方向,并将这些部分重新排列和重新定向到相应算法会导致的最终状态,如果它是手动执行的。这就像speedcubers,在解魔方的每一层,看魔方的排列,执行相应的算法,都是不假思索的。

示例用法:

使用求解器解决 1x2x3 魔方随机打乱的示例。这里,“OGBYWR”是用户魔方的配色方案,“WYBOOBGORBGRRGYW”是给定的争夺。可以在 PyPI 或 GitHub 存储库自述文件中找到有关如何正确输入立方体颜色对齐和打乱的说明。 1x2x3 求解器输出一系列步骤:['U', 'D', 'R', 'U']。每一步的形式为 U、D、R、L 或 M,每个步骤分别代表上层、底层、右面、左面和中间层的 180 度转弯。当用户在他的立方体上执行这些步骤时,他将得到一个求解的立方体。

应用

这个魔方解算器只是极简思维技术在现代人工智能中可能具有的几个应用之一。它可以用来简化每个程序的问题解决部分,方法是训练它使用人类或人工智能已经建立的结果,并直接跳到解决方案,而不必自己解决整个问题。尽管解决魔方的“人为方法”存在无法始终提供最佳解决方案的缺点,但 350 倍的程序效率提升有效地超过了任何此类潜在缺点。对于在短短 10 毫秒内在物理魔方上执行每个动作的现代机器人来说,执行少量额外动作几乎是微不足道的任务。在大多数现实生活中的问题中,最佳解决方案可能并不总是被证明是最好的解决方案,特别是当它以极其缓慢和过度消耗内存的程序为代价生成时。不管现代人工智能如何发展到机器人往往具有自主“思考”潜力的地步,即使在完全自主的程序中进行很小的人类交互也会对其效率产生巨大影响,如本例所示魔方解算器。

Github 链接: https : //github.com/prakharguptafaips/pytwisty

PyPI 链接: https ://pypi.org/project/pytwisty/