魔方吧·中文魔方俱乐部

 找回密码
 注册
搜索
热搜: 魔方
查看: 12032|回复: 10
打印 上一主题 下一主题

[资料] 用矩阵探索魔表的复原 [复制链接]

Rank: 1

积分
88
帖子
17
精华
1
UID
1352338
性别
保密
居住地
广州市
WCA ID
2013ZHAN41
兴趣爱好
速度
跳转到指定楼层
1#
发表于 2021-3-15 20:30:57 |只看该作者 |倒序浏览
本帖最后由 blueten 于 2021-3-15 21:21 编辑

0 前言

    魔表是WCA的官方比赛项目,比较冷门,参与人数不多,但是学习起来却非常容易,即便是初学者也能在很短的时间学会复原。目前针对魔表的研究并不多,即便是高手使用的复原方法基本上也只是在初级方法的基础上做了一些小的调整而已。本文通过建立数学模型来对魔表进行求解,并据此对魔表的复原方法进行探索。

已有 3 人评分经验 收起 理由
otischeng + 20 看不懂也先加分!
2frcat + 20 厉害!
cube_master + 20

总评分: 经验 + 60   查看全部评分

Rank: 1

积分
88
帖子
17
精华
1
UID
1352338
性别
保密
居住地
广州市
WCA ID
2013ZHAN41
兴趣爱好
速度
2#
发表于 2021-3-15 20:36:19 |只看该作者
本帖最后由 blueten 于 2021-4-12 21:11 编辑

1 术语

    首先,我们对魔表的指针、立柱和转动表示方法进行说明。

    魔表一共有2个面(这里称之为F面和B面),4个立柱,18个指针,其中角上的指针都是互相关联的,因此实际上我们只需要关注14个指针的变动,这14个指针的名字见下图。

图1 魔表构件示意图

    本文将抬起立柱对应的外轮称之为F轮,按下立柱对应的外轮称之为B轮。

    转动表示法参考“李老豆”在魔表预算法教程中的方法——A(f, b)。其中f表示F轮的转动点数,b表示B轮的转动点数;数字是正数则表示顺时针,负数则表示逆时针。A表示立柱的状态,共16种,分别为:

    (01)UR:ur立柱抬起,其他三个按下;

    (02)DR:dr立柱抬起,其他三个按下;

    (03)DL:dl立柱抬起,其他三个按下;

    (04)UL:ul立柱抬起,其他三个按下;

    (05)U:ul、ur立柱抬起,其他两个按下;

    (06)R:ur、dr立柱抬起,其他两个按下;

    (07)D:dr、dl立柱抬起,其他两个按下;

    (08)L:dl、ul立柱抬起,其他两个按下;

    (09)UR-DL:ur、dl立柱抬起,其他两个按下;

    (10)UL-DR:ul、dr立柱抬起,其他两个按下;

    (11)ur:ur立柱按下,其他三个抬起;

    (12)dr:dr立柱按下,其他三个抬起;

    (13)dl:dl立柱按下,其他三个抬起;

    (14)ul:ul立柱按下,其他三个抬起;

    (15)ALL:四个立柱都抬起;

    (16)all:四个立柱都按下。

使用道具 举报

Rank: 1

积分
88
帖子
17
精华
1
UID
1352338
性别
保密
居住地
广州市
WCA ID
2013ZHAN41
兴趣爱好
速度
3#
发表于 2021-3-15 20:48:38 |只看该作者
本帖最后由 blueten 于 2021-3-15 22:53 编辑

2 数学模型

    16种立柱状态中,除了all只有B轮、ALL只有F轮以外,其他14种状态都同时存在F轮和B轮,因此外轮一共有30种转动方法。在下表中我列出了这30种转动方法对需要调整的14个指针的影响,其中“1”、“-1”、“0”分别表示指针的转动与外轮转动方向相同、相反、无关。

各转动方法对指针的影响.png

    魔表一共有14个指针需要调整,在没有跳步的情况下,一次拨动只能调整1个指针,因此需要拨动14次才能完全复原。我们假设某一指针打乱后的初始点数为β14次转动对该指针的影响分别为a1,a2,a3,…,a1414次转动的点数分别为x1,x2,x3,…,x14,则我们可以得到如下关系式:

算式1.png

    以此类推,对于全部14个指针都能列出类似的关系式,我们将得到如下的方程组:

算式2.png

    上述方程组可以表示成的Ax+β=12N形式,其中 算式4.png

算式5.png 算式6.png 算式7.png

    我们称A为变换矩阵,x为操作向量,β为初始状态向量(14个分量按表从上到下的顺序排列)。

    令N=0,则方程简化为Ax+β=0,可解得 算式8.png

    至此,魔表的复原便简化为一个14阶线性非齐次方程组的求解。|A|=0时方程无解,|A|≠0时方程有唯一解。

如果你对数学原理不感兴趣,那么可以直接跳到第5节,那里有本文探索出的新方法。

使用道具 举报

Rank: 1

积分
88
帖子
17
精华
1
UID
1352338
性别
保密
居住地
广州市
WCA ID
2013ZHAN41
兴趣爱好
速度
4#
发表于 2021-3-15 20:57:34 |只看该作者
本帖最后由 blueten 于 2021-3-15 21:25 编辑

3 对初级复原法建模

    初学者复原魔表的步骤一般为

    (1)将一面的四个棱指针与中心指针对齐;

    (2)将中心指针和四个棱指针调整至零点;

    (3)翻面后,将这一面的四个棱指针与中心指针对齐;

    (4)将所有指针对齐;

    (5)将所有指针调整至零点。

    我们将翻面后的面定为F面,翻面前的定为B面,则以上步骤对应的操作分别为:

    第1:U(0,x1)、R(0,x2)、D(0,x3)、L(0,x4);

    第2:all(x5);

    第3:U(x6,0)、R(x7,0)、D(x8,0)、L(x9,0);

    第4:ur(x10,0)、dr(x11,0)、dl(x12,0)、ul(x13,0);

    第5:ALL(x14)。

    我们从表1中将以上14个操作对应的变换列抽取出来组成变换矩阵:

算式9.png

    求其负逆矩阵得

算式10.png

    将负逆矩阵和初始状态向量代入方程的解即可求得操作向量x,再将x的各个分量转换成转动表示法的形式,即可得到魔表的解法。

    例打乱公式:UR0+ DR2- DL2+ UL4+ U2+ R5- D4-L5+ ALL5+ y2 U4- R2- D1+ L5- ALL5+ UR UL

img_0326.png

    由图可知,初始状态向量 算式11.png

,代入 算式8.png 中可解得操作向量 算式12.png ,通过加减12将所有的分量调整到-5~6之间,可得 算式13.png 。将其整理成复原步骤——U(0,-4) R(0,5) D(0,6) L(0,-1) all(1) U(4,0) R(2,0) D(-1,0) L(5,0)ur(2,0) dr(0,0) dl(-4,0) ul(-2,0) ALL(-1),操作一下你会发现这就是初学者常用的解法。

使用道具 举报

Rank: 1

积分
88
帖子
17
精华
1
UID
1352338
性别
保密
居住地
广州市
WCA ID
2013ZHAN41
兴趣爱好
速度
5#
发表于 2021-3-15 21:02:44 |只看该作者
本帖最后由 blueten 于 2021-4-22 23:54 编辑

4 探索其他复原方法

    为了改进现在的复原方法,我们可以从3个方面着手——转动次数、立柱状态变换次数和翻面。减少转动次数目前只能寄希望于跳步,尽管已经证明魔表的上帝之数是12,但是目前我们还没有在12次转动之内复原魔表的能力。那么我们就只能从减少立柱状态变换次数和不翻面这两个方面来探索了。

    想要做不翻面,难度没有想象的那么大,能够盲拧一个十字其实就可以做到不翻面,但这是有风险的,很容易DNF

    由于魔表的操作满足交换律,因此将同样立柱状态的复原步骤合并,就可以减少立柱状态变换次数。以上一节所述的初级方法为例,第1步和第3步的复原步骤中,立柱状态完全一样,那么我们就可以将解法合并为——U(4,-4)R(2,5) D(-1,6) L(5,-1) all(1) ur(2,0) dr(0,0) dl(-4,0) ul(-2,0) ALL(-1)。这样一来,立柱状态变换次数由14次减少到了10次。(这其实就是“李老豆”的“魔表预算法”。)

    还能不能再合并下去呢?至少上面的这个方法不能了,剩下的6个立柱状态都不一样。

    16种立柱状态中,除了all只有B轮、ALL只有F轮以外,其他14种状态都同时存在F轮和B轮。那么我们可不可以从这14种状态中,选择7种状态,每种状态下都转动F轮和B,完成魔表的复原呢?如果可以,那么我们就将立柱状态变换次数由14次减少到了7次。

    从14种状态中选择7种状态,一共有3432种组合,但并不是每种组合都能复原魔表。第2节中的结论告诉我们,当变换矩阵A是奇异矩阵时,这种组合是不能复原魔表的。除此之外,魔表又是高度对称的(上下对称、左右对称、前后对称、两个斜对称、中心对称),剩下的那些满足条件的组合中还可以排除对称情况。笔者精力有限,没有对这3432种状况进行逐一分析,希望能有数学和编程方面高手能助我一臂之力。

    在此我就只介绍我发现的一种组合——L、R、UL、DR、ur、dl、UL-DR,从表1中将这7个立柱状态的14个操作对应的变换列抽取出来组成变换矩阵。

算式14.png


    求其负逆矩阵得

算式15.png


    还以上一节中的打乱为例,将负逆矩阵与初始状态向量代入中 算式8.png

,并将所有的分量调整到-5~6之间,可得 算式16.png

    将其整理成复原步骤——L(1,5) R(3,-3) UL(4,-1) DR(-1,6) ur(-4,6) dl(0,-4) UL-DR(2,-2),操作一下你会发现魔表复原了。这说明这一节的思路是可行的。

    笔者在此只验证了其中一种组合的情况,剩下的三千多种组合中或许还能找到与此组合不同构的可解组合。

使用道具 举报

Rank: 1

积分
88
帖子
17
精华
1
UID
1352338
性别
保密
居住地
广州市
WCA ID
2013ZHAN41
兴趣爱好
速度
6#
发表于 2021-3-15 22:28:34 |只看该作者
本帖最后由 blueten 于 2021-3-15 22:30 编辑

5 矩阵探索方法在速拧中的应用
    以上是理论分析,但我们终究还是要回到实际复原上。如果我们能计算出操作向量,那么不但可以将立柱状态变换次数降至7次,还能避免翻面。但是显然15秒的观察内我们根本做不到这一点。从上一节我们得到的矩阵来看,最后两行一共有7个非零项,也就是说我们需要计算27个数字的加减法。对于这样的项,显然我们只能通过初学者常用的“对齐”的方式来操作。因此UL-DR这个立柱状态必须放在最后。
    另有4行是4个非零项,显然我们也没有时间全部计算,因此也需要尽可能多地使用“对齐”方式。而且如果想要不翻面的话,涉及到背面的“对齐”就只能自己预先计算了。此外,为了更好地变换立柱状态,我们也需要对立柱状态的先后顺序进行一定的安排。
    还以上一节中的方法为例。
    我们先将矩阵解法表示成算式的形式。

算式17.png


    现在,我来介绍一下怎么用这个组合复原魔表:
    (1)L
状态:转动F轮使DFRF对齐,转动BbL点;
    (2)UL
状态:转动F轮和B轮使CF、RF、DF、DR对齐;
    (3)R
状态:转动F轮使UF与LF对齐,转动BbR点;
    (4)DR
状态:转动F轮和B轮使CF、LF、UF、UL对齐;
    (5)ur
状态:转动Ffur点,转动Bbur点;
    (6)dl
状态:转动Bbdl点,再转动F轮使UR与DL对齐;
    (7)UL-DR
状态:转动F轮和B轮使所有指针指向零点。
    (注:也可以将
RDR放到LUL前面,urdl也可以互换。)
    这种方法下,我们只需要计算
5个点数——bLbRfurburbdl,除了fur4个数字相加减外,其他4个点数都是2个数字相减。另外的9个点数都可以靠“对齐”来解决。而且由于已经预先计算转动点数,本方法不需要翻面。对于速算能力比较强的选手来说,还是能够在观察时间内计算出5个数字的。
    如果你觉得以自己的能力无法在观察阶段算出这
5个数字,或者你觉得不翻面没有足够的把握复原魔表,那么你可以选择在前4个立柱状态完成后翻面,之后的ur、dlUL-DR状态,翻面后会变成UL、DRUL-DR状态,你会发现只要重复翻面前UL、DRUL-DR状态的做法就可以完成复原,而这个方法只需要计算下面这2个数字,这一点对于大多数人来说应该都是轻而易举的。

算式18.png


    此外,在上面的立柱状态的顺序下,变动立柱状态需要按动立柱的次数仅为10~12次,远远少于目前常用的复原方法:
    (1)
打乱L(或R)(0~2次):
    (2)L→UL
,按下dl立柱(1次);
    (3)UL→R
,按下ul立柱,抬起urdr立柱(3次);
    (4)R→DR
,按下ur立柱(1次);
    (5)DR→ur
,抬起uldl立柱(2次);
    (6)ur→dl
,按下dl立柱,抬起ur立柱(2次);
    (7)dl→UL-DR
,按下ur立柱(1次)。
    而且,无论是否翻面,我们都只在最后的
UL-DR状态才会将指针都指向零点,因此在前面的6个立柱状态下,你甚至可以无视魔表的朝向。
    对比一下初级方法、“李老豆”的预算法和本文中的两种矩阵法
,我们发现,除了计算数字的个数比较多以外,矩阵法在另外三个指标上都优于初级方法和预算法。

算式19.png


使用道具 举报

Rank: 1

积分
88
帖子
17
精华
1
UID
1352338
性别
保密
居住地
广州市
WCA ID
2013ZHAN41
兴趣爱好
速度
7#
发表于 2021-3-15 22:35:28 |只看该作者
本帖最后由 blueten 于 2021-3-15 22:45 编辑

6 结语

    本文通过建立数学模型得出了用矩阵计算魔表解法的方法,并介绍了根据此方法找到的一种复原方法,该方法大大提升了魔表的操作效率。但本文只验证了3432种组合形式中的一种,在那些还未验证的方案中或许还有更好的组合形式等待发掘。希望能有数学和编程方面的高手来继续我未完成的工作,也希望能有魔表的玩家尝试一下这种方法,或许这种方法能在魔表速拧上起到很大的作用,使魔表的成绩有飞速的提升。

蓝十 2013ZHAN41

2021314


使用道具 举报

Rank: 7Rank: 7Rank: 7

积分
712
帖子
872
精华
0
UID
106356
性别
保密
居住地
济南市
WCA ID
2012XUHA04
兴趣爱好
收藏

收藏爱好者 十年元老 十二年元老

8#
发表于 2021-3-16 08:36:51 |只看该作者
仔细想想,考完研到现在也就5年,线性代数的东西基本都还给老师了。现在想求个逆求个转置都得现查公式,颇多感慨。
数学与魔方结合的力作,先mark为敬,有时间一定仔细拜读

使用道具 举报

Rank: 1

积分
27
帖子
26
精华
0
UID
1350146
性别
兴趣爱好
破解
9#
发表于 2021-3-21 20:30:58 |只看该作者
高技术力贴!强!

使用道具 举报

Rank: 3Rank: 3

积分
761
帖子
752
精华
0
UID
1351822
兴趣爱好
DIY

两年元老

10#
发表于 2021-6-24 14:30:55 |只看该作者
真厉害!回头我也试试

使用道具 举报

您需要登录后才可以回帖 登录 | 注册

Archiver|手机版|魔方吧·中文魔方俱乐部

GMT+8, 2024-4-20 19:26

Powered by Discuz! X2

© 2001-2011 Comsenz Inc.

回顶部