色的立方体塔

问题描述 投票:1回答:1

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

到目前为止我做了什么:

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

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

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

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

我的问题如下:如何实施轮换?我的意思是,如果立方体的位置(旋转)从3变为10,我们如何知道面部的新排列?或者,如果我在立方体上执行变异,如果选择随机旋转数,旋转此立方体的过程是什么?

我认为我应该为每个立方体创建一个包含6个元素的矢量(每个面的颜色),但是当修改立方体的旋转值时,我不知道它的面部矢量的元素应该以什么方式存在。重新排列。改组它们是不正确的,因为通过这样做,两个相对的面可能变得相邻,这意味着矢量不再代表那个特定的立方体(显然,两个相对的面不能相邻)。

python artificial-intelligence evolutionary-algorithm
1个回答
0
投票

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

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

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

那个类是你问题的一个大子系统;另一方面,遗传算法,你似乎掌握得很好。随机堆叠所有立方体; “适应度”是堆叠中最流行的4节目(4面的序列)的计数。一开始,这通常是1,因为什么都不匹配。

从那里,你似乎对变异有适当的处理。您可能更有可能改变不匹配的立方体,或者看看某个立方体是否是半匹配:两个相对的面匹配“最佳拟合”4个展示,因此您只需沿着该轴旋转它,保留那些两个面,并交换另一对为顶部 - 底部对(注意:两个方向来做到这一点)。

那会让你感动吗?

© www.soinside.com 2019 - 2024. All rights reserved.