Fw: [问题] 搜寻算法的问题

楼主: subset (子集合)   2017-08-16 10:39:34
※ [本文转录自 Python 看板 #1PawwIPf ]
作者: subset (子集合) 看板: Python
标题: [问题] 搜寻算法的问题
时间: Wed Aug 16 10:31:43 2017
最近在玩一个小游戏叫做colorcube,(本周免费app,非广告XD)
https://itunes.apple.com/tw/app/colorcube/id1076402133
它的玩法很简单,就是每个图案可以旋转六个方向,颜色可以选择红、绿、蓝 (三原色)
图案交叠的部分会变成两个颜色的相加,例如红 + 绿 = 黄
因此每个图案(形状)的选择是 6(个方向) x 3(种颜色) + 1(不选这个图案) = 19
在一开始的关卡图案只有4种选择,因此hypothesis set只有19 ^ 4其实跑很快。
但是我卡关的题目已经有16种图案,用单纯的深度搜寻或广度搜寻会有19 ^ 16种组合,
根本跑不完。
是可以用一些heuristic rule去做一些删减,
例如答案是红色的方块,不能被三原色的另外两种方块覆蓋。
不过单纯这样去做深度搜寻还是会跑太久。
以前学的算法都忘光光了,是否可以推荐适合的算法?
( P.S. 找不到算法的版,不知道在这里问有没有人回答QQ )
================== 以下补充一下数学模型 ====================
There are 7 colors: R,G,B,Y,M,C,W
Type 1. 三原色:Red, Green, Blue
Type 2. Combined 2 colors: Yellow (R+G), Magenta (R+B), Cyan(G+B)
Type 3. White is original color. White也可以是三原色相加 (R+G+B)
Chessboard is a 6 x 4 matrix:
[[0, 0, 0, 0],
[0, 0, 0, 0],
[0, 0, 0, 0],
[0, 0, 0, 0],
[0, 0, 0, 0],
[0, 0, 0, 0]]
图形一: 正三角形可以表示成matrix: (position 0)
[[1, 1, 1, 1],
[0, 0, 0, 0],
[0, 0, 0, 0],
[0, 0, 0, 0],
[0, 0, 0, 0],
[0, 0, 0, 0]]
图形一选转第一个60度,则变成 (Position 1)
[[0, 0, 0, 0],
[1, 1, 1, 1],
[0, 0, 0, 0],
[0, 0, 0, 0],
[0, 0, 0, 0],
[0, 0, 0, 0]]
图形一涂上红色变成:
[[0, 0, 0, 0],
[R, R, R, R],
[0, 0, 0, 0],
[0, 0, 0, 0],
[0, 0, 0, 0],
[0, 0, 0, 0]]
图形二: 钻石型:
[[0, 0, 0, 1],
[0, 1, 1, 1],
[1, 1, 1, 1],
[1, 1, 0, 1],
[0, 0, 0, 1],
[0, 1, 0, 1]]
总共会有16种图形,都可以用类似的matrix表示,这里就不一一列出。
每种图案都只能被用一次,也可以选择不使用。
因此每个图案(形状)的选择是 6(个方向) x 3(种颜色) + 1(不选这个图案) = 19
假设答案是在底部的蓝色正三角形:
[[0, 0, 0, 0],
[0, 0, 0, 0],
[0, 0, 0, 0],
[B, B, B, B],
[0, 0, 0, 0],
[0, 0, 0, 0]]
就是图形一的Position 3, Color B,加上其他图形的Position 0, Color W组成的。
作者: FRAXIS (喔喔)   2017-08-18 21:30:00
我说match有点麻烦是因为我想写出 integer linear program
作者: yvb   2017-08-18 20:15:00
match 不是问题, pieces 和 puzzle 的 colors 用不同数值,且使用 bitwise AND operator, 不为 0 即 match.PIECE_*: R=1 G=2 B=4 W=8 C=G|B M=B|R Y=R|GPUZZLE_*: R=1|8 G=2|8 B=4|8 W=1|2|4|8 C=G|B M=B|R Y=R|G当然, pieces 的颜色加成, 即使用 bitwise OR operation.
楼主: subset (子集合)   2017-08-18 14:24:00
感谢你!! 我先朝Constraint Satisfaction Problems去读
楼主: subset (子集合)   2017-08-16 10:40:00
这个问题感觉应该在这个版问,转过来。
作者: FRAXIS (喔喔)   2017-08-16 11:16:00
建议你最好把玩法写清楚 最好用数学来表示不然除非有人真的下载来玩 才能回答你问题
作者: moebear (萌熊)   2017-08-16 11:56:00
我刚刚玩了一下 玩法大概是给定目标图形及颜色 然后利用给定的图形去组合成目标图 小图形可以转60度*5
楼主: subset (子集合)   2017-08-16 11:58:00
我晚点再用数学符号描述详细点
作者: moebear (萌熊)   2017-08-16 11:58:00
小图形的颜色有三种,可自选
楼主: subset (子集合)   2017-08-16 12:45:00
补充一下抽象化题目成二维矩阵的方式
作者: JameC (智取其乳)   2017-08-16 19:18:00
Android 没有这个游戏QQ,光看模型还真搞不懂这游戏在干嘛
作者: FRAXIS (喔喔)   2017-08-16 20:51:00
如果选了两个图形 不同颜色 但是有 overlap, overlap的颜色是按照你定义的加法? 那如果有三个图形的 overlap加法是怎么定义的?像Yellow + Red 是什么?
作者: moebear (萌熊)   2017-08-16 21:17:00
应该还是yellow?
作者: FRAXIS (喔喔)   2017-08-16 21:29:00
那 Yellow + Cyan 是什么?
作者: moebear (萌熊)   2017-08-16 22:02:00
大概会变白色?
楼主: subset (子集合)   2017-08-16 22:37:00
一个颜色不管重叠几次都算一次 Y+R=R+G+R=R+G=YY+C=R+G+G+B=R+B+G=W
作者: FRAXIS (喔喔)   2017-08-17 08:07:00
Yellow + White 是 Yellow 还是 White?
楼主: subset (子集合)   2017-08-17 08:20:00
如果W是原始的白色Y+W=Y; 若W=RBG组成的 那Y+W=W
作者: FRAXIS (喔喔)   2017-08-17 08:44:00
但是原始的白色跟 RBG 的白色可以 match.. 这地方有点麻烦https://cs.stackexchange.com/q/47870 这些 heuristic你都试过了吗?

Links booklink

Contact Us: admin [ a t ] ucptt.com