题目分析:
基于这个题目 我大概的翻译一下:
- 魔方是由27个小的立方体的玻璃晶体组成。
2 .由于生产的原因 每个晶体的透明度大有不同,也有可能相同 - 现在求一种算法 是可以把这27个不同透明度的晶体进行有效的排列组合,已达到
题目重读
当一个问题到来的时候 对问题的反复阅读 和罗列从中理解的要点是很重要的。这个无论是做任何行业 都需要掌握的一项技能 和必备素质。
- A. 从要求中我们能读出什么
- 这是一个魔方问题,它是由27立方体组成
- 每一个小的立方体有着不同的透明度,但是可以分为7个等级(行5-行6获取)
- 找到一个最优的排列组合这样可以有一个大致一样的透明度
- 写一个程序来找这个排列组合,同时打印出结果 还有执行时间
分析
从反复阅读题目以后,下一步我们就是进行有效的人工智能分析了 当然这里的人工 就是我们的大脑。
A. 说道魔方 当然我们要把它画出来,立体的对我们有难度 这里我就把它平面化。给没一个 小晶体都分配一个编号
B. 什么是一个大概的透明度 overall transparency。
从我们基本的 立体几何的理论 我们知道 三维的立体中 是分 X,Y, Z 三大坐标系的。 既然这样 我们就不妨 从个个坐标系中 去阐述这个问题。
图中我讲诉了三个坐标,这里我仔细讲解一下X坐标,平行于X坐标的 晶体的组合 应该是9个。就是我们从上图看到的 从左到右的 三个晶体的 组合。 同理 Y 坐标 和 Z 坐标 一样个有9个。
C. 那到底可以对27个晶体划分集中等级呢?
说道这 来点发散思维吧 。如果我们不在乎 那就分为一个等级好了。既然一个等级了 那还用排序吗? 不需要怎么放都可以。 单现实不允许啊。既然一个等级不行 我们多分点吧。 2个? 3个? 说道魔方 脑海里莫名的想到的是三 。那这里我们就分为三个等级吧。
当我们把这个图形画出来的时候,是不是觉得这是一个有规律的样式啊 。同样这个排列的方式 满足了 我们B中的要求公式 对不对啊?
For the X : T(x3) + T(x2) + T(x1) = A+B+C
For the Y: T(y3) + T(y2) + T(y1) = A+B+C
For the Z : T(z3) + T(z2) + T(z1) = A+B+C
建模
好了 上面我们貌似 找到了一些门道。那下面我们就想办法建模吧。把我们想的 都抽象出一个通用的东西出来。
A. 如何划分
B. 如何衡量是不是最优
在这里 我们用平方差来衡量。估计立方差也可以。防止就是 放大一些 求均值。机器学习的一个重要思念。 不多说了。
代码时刻
在这里 我就直接把代码放到了github上 想看的同学自己看吧。不多说了
测试结果:
time consume(ticks): 62
the T(average) is 1.95
the arrangement of the Cube:
— — — — — — — -
Bottom:
0.51 0.71 0.61
0.62 0.52 0.72
0.73 0.63 0.53
Middle:
0.64 0.54 0.74
0.75 0.65 0.55
0.56 0.76 0.66
Top:
0.77 0.67 0.57
0.58 0.78 0.68
0.69 0.59 0.79
— — — — — — — -
the SD : 0.0632456
Program ended with exit code: 0
写到这里也许就可以告一段落了。但是代码的路上 貌似缺了 优化这个女友 会失去很多乐趣和精彩。
优化 1
到目前为止 分三组,怎么说也比分一组 要好。但是有没有更好的方法呢? 回到上面我们分析的 Pattern中 再去寻找规律。我们就会发现一个有意义的事情。是不是很像DNA的,虽然不是 X和Y 。在这应该是 A&B&C了。那既然这样 我们可以不可以去划分一个二级level呢?
就是在目前我们的已经划分的三个level中 再进行二次细分呢? 然后 让有序的 翻转下去。
For A : 内分 大中小 三组
A (S): the smaller cubes in A group
A(L): the Larger cubes in A group
A(M): the Medium cubes in A group
For B :内分大中小
B (S): the smaller cubes in B group
B(L): the Larger cubes in B group
B(M): the Medium cubes in B group
For C :内分大中小
C (S): the smaller cubes in C group
C(L): the Larger cubes in C group
C(M): the Medium cubes in C group
这里来点英文啊 我英文差 需要多练习 见谅。所以这个图形如下:
到现在,我们可以发现 这个规律很对称,螺旋式的对称
A (L-S-M-L-S-M-L-S-M)
C (M-L-S-M-L-S-M-L-S)
B (S-M-L-S-M-L-S-M-L)
酸菜继续上代码
测试结果
The Result:
time consume(ticks): 83
the T(average) is 1.95
the arrangement of the Cube:
— — — — — — — -
Bottom:
0.57 0.74 0.61
0.64 0.51 0.77
0.71 0.67 0.54
Middle:
0.62 0.58 0.75
0.78 0.65 0.52
0.55 0.72 0.68
Top:
0.76 0.63 0.59
0.53 0.79 0.66
0.69 0.56 0.73
— — — — — — — -
the SD : 0.02
到这里是不是很开心? 我们成功的把精度 从 0.0632456 提高到了 0.02. 这说明优化很成功啊 。
二次优化
try to do the improvement again
From the spiral DNA-like method(Step5):
A(L-S-M-L-S-M-L-S-M)
C(M-L-S-M-L-S-M-L-S)
B(S-M-L-S-M-L-S-M-L)
For every A, B, C, they have 3 groups of (L-S-M, M-L-S, S-M-L).
Also for X(L), Y(M), Z(S), X,Y,ZÎ{A,B,C} , They have three entities. Sounds there are some patterns. But need more time to learn math to catch up. I want to leave the left task to the computer. Doing(10077696) [3!3!3!][ 3!3!3!][ 3!3!3!] Times of permutation is easier than 27! Times.
代码
结果
time consume(ticks): 10071786
time consume(sec): 10
the T(average) is 1.95
the arrangement of the Cube:
— — — — — — — -
Bottom:
0.57 0.75 0.63
0.66 0.51 0.78
0.72 0.69 0.54
Middle:
0.62 0.59 0.74
0.77 0.65 0.53
0.56 0.71 0.68
Top:
0.76 0.61 0.58
0.52 0.79 0.64
0.67 0.55 0.73
— — — — — — — -
the SD : 1.86267e-16
the best SD: 1.86267e-16
Program ended with exit code: 0
是不是很开心 我们的精度 从 0.02 降低到了1.86267e-16.
好了 写到这里 也基本快12点了 要睡觉去了。
希望这个分析过程可以 给研究算法的同学一点点启示。Good Night