领域|强化学习算法DeepCube,机器自行解决复杂魔方问题( 三 )


在该论文之前,魔方复原问题主要有两个研究方向:
使用群论方法,显着减小要搜索的状态空间。这种方法种最典型的包括Kociemba算法;
使用蛮力搜索以及人工定义的启发式搜索,使搜索指向最有可能的方向。典型的如Korth算法,该算法使用A *搜索和大型模式数据库避免选择错误的方向。
本文介绍了第三种方法:通过在海量不同状态的魔方数据集上训练神经网络,获得求解状态方向的策略。该训练不需要提供任何先验知识,仅需要魔方数据集(不是物理魔方,而是计算机模型)。这是其与上述两种方法的最大不同:前两种方法需要大量的领域知识,并以计算机编码进行定义。
后续章节是新的论文方法的详细介绍。
数据表示
我们从数据表示开始介绍。在三阶魔方问题中,我们首先对动作和状态以某种方式进行编码。
动作
此处的动作是指魔方在任何状态下可能的旋转,前文已经说过,我们总共只有12个动作。对于3阶魔方,共有左,右,上,下,前和后六个侧面可以旋转。而对每一面,有两种不同的操作,即该侧的顺时针和逆时针旋转(90°或–90°)。一个很小但非常重要的细节是,当需要旋转的面朝向你时,你能方便的进行操作。例如,你可以哦容易的旋转正面,但对于背面而言,总是有些不太习惯。
根据上述说明,动作名称可以根部不同侧面的首字母做出以下定义。如右侧的顺时针旋转命名为R;至于逆时针的动作,可能会使用不同的符号,包括R'/r/r?。第一种和最后一种表示法对于计算机代码而言不太友好,因此我使用了小写字母来表示动作的逆时针旋转。这样,右侧面的两个动作是R和r,左侧面的两个动作为L和l,依此类推。
在我的代码中,动作空间是通过python枚举实现的,其中每个动作映射为唯一的整数。
状态
状态是指三阶魔方当前的排列组合方式,正如前文介绍的,该状态空间极其庞大(4.33×101?个不同状态)。但除了要面对海量的状态,我们在选择特定的状态表示形式时,还要考虑到以下这些要求:
避免冗余:在极端情况下,我们可以通过记录每侧每个贴纸的颜色来表示魔方的状态。但是,如果你计算一下这些组合的数量,会发现它等于6?*?=6??≈2.25×103?,远远大于三阶魔方的状态空间大小,这意味着这种表示形式是高度冗余的,例如,魔方两侧中心对称的情况。至于为什么得到6?*?,很简单:三阶魔方有6个面,每个面除了中心块外有8个小立方体,所以总共有48个贴面,每个贴面可用6种颜色之一上色。
内存效率:在后续的训练和模型应用过程中,我们需要将大量魔方集的不同状态保存在内存中,这可能会影响流程效率。因此,我们希望表示形式尽可能紧凑。