彩色立方体塔

时间:2019-03-26 23:03:52

标签: python artificial-intelligence evolutionary-algorithm

考虑一组n个带有彩色小平面的立方体(每个立方体具有特定的颜色) 在4种可能的颜色中-红色,蓝色,绿色和黄色)。使用进化算法,形成适当旋转的k个立方体(k≤n)(立方体的12个位置)的最高可能塔,因此塔的侧面将具有相同的颜色。

我到目前为止所做的:

我认为以下表示形式将是合适的:“个人”可以是n个整数的数组,每个数字的值都在1到12之间,指示多维数据集的当前位置(输入文件包含n行,每行显示有关立方体每个面的颜色的信息)。

然后,人口由多个个体组成。

Crossover方法应该创建一个新的孩子(个人),其中包含来自其父母的信息(大约每个父母的一半)。

现在,我最大的问题与Mutate和Fitness方法有关。 在突变方法中,如果发生突变的概率(例如0.01),则应将一个随机立方体的位置更改为其他随机位置(例如,第三个立方体的位置(旋转)可以从5更改为12)。 在“适应度”方法中,我认为我可以将“个人”中的多维数据集两两进行比较,以了解它们是否具有相同的面孔。如果它们具有公共面,则“ count”变量将随公共面的数量增加,并且如果这两个立方体的所有4个侧面都相同,则计数将随着其他点的数量而增加。比较所有相邻的多维数据集之后,将返回count变量。我们的目标是获得尽可能多的具有相同侧面的相邻立方体,即最大化Fitness方法。

我的问题如下: 如何实施轮换?我的意思是,如果一个多维数据集将其位置(旋转)从3更改为10,我们如何知道这些面的新排列?或者,如果我对一个多维数据集执行了变异操作,那么如果选择了随机的转数,那么旋转这个多维数据集的过程是什么?

我认为我应该为每个多维数据集创建一个包含6个元素(每个面的颜色)的向量,但是当修改多维数据集的旋转值时,我不知道其向量的元素以什么方式面孔应该重新排列。 对它们进行改组是不正确的,因为这样做,两个相对的面可能会相邻,这意味着向量不再代表特定的多维数据集(显然,两个相对的面不能相邻)。

1 个答案:

答案 0 :(得分:0)

首先,我不确定您如何旋转12圈;我得到24:4个方向,底部6个面中的每个面。使用标准的D6(6面模具),看看有多少种不同的布局。

显然,您需要构建的第一件事是一个东西(一个类?),它可以在任何可用方向上准确地表示一个多维数据集。我建议您使用一种简单的结构,该结构可以按顺序返回四个面(例如,从右到右,从左到左),并给出一个立方体和旋转数。

我认为您可以有效地将一个立方体表示为三对相对的边。一旦您表示了反对意见,剩下的组织就是任意编号:任何有效的选择都与其他任何同构。每次旋转将产生两个相反对的交错序列。例如,标准D6具有相对的对[(1、6),(2、5),(3、4)]。前8个旋转会将1和6放置在隐藏的表面(顶部和底部)上,从而在4旋转及其反转中分别为序列2354。

该类是您的问题的一个大子系统;另一个,遗传算法,您似乎掌握得很好。随机堆叠所有多维数据集; “适合度”是堆栈中最普遍的4个显示(4个边的顺序)的计数。开始时,通常为1,因为没有将匹配。

从那里开始,您似乎对突变有了适当的处理。您可能会给突变不匹配的多维数据集的可能性更高,或者查看某个多维数据集是否为半匹配项:两个相对的面与“最佳拟合” 4-show匹配,因此您仅沿该轴旋转即可,两个脸,然后将另一对换成上下一对(请注意:有两个方向可以做到这一点)。

这会让你动起来吗?