【发布时间】:2019-03-26 23:03:52
【问题描述】:
考虑一组具有彩色面的 n 个立方体(每个面都有特定的颜色 4 种可能的 - 红色、蓝色、绿色和黄色)。使用适当的旋转(一个立方体的 12 个位置)形成可能的最高的 k 个立方体(k ≤ n)塔,因此塔的侧面将具有相同的颜色,使用和进化算法。
到目前为止我做了什么:
我认为下面的表示是合适的:Individual 可以是一个由 n 个整数组成的数组,每个数字的值介于 1 和 12 之间,表示立方体的当前位置(输入文件包含 n 行,每行显示有关立方体每个面的颜色的信息)。
然后,人口由多个个体组成。
Crossover 方法应该创建一个新的子节点(Individual),其中包含来自其父节点的信息(大约来自每个父节点的一半)。
现在,我最大的问题与变异和健身方法有关。 在 Mutate 方法中,如果突变概率(比如 0.01),我应该将随机立方体的位置更改为其他随机位置(例如,第三个立方体的位置(旋转)可以从 5 更改为 12)。 在健身方法中,我认为我可以两两比较来自个人的立方体,看看它们是否有共同的面孔。如果它们有共同的面,则“计数”变量将随着共同面的数量而增加,如果这 2 个立方体的所有 4 个侧面都相同,则计数将随着点数的增加而增加。比较所有相邻的立方体后,返回计数变量。我们的目标是尽可能多地获得具有相同侧面的相邻立方体,即最大化 Fitness 方法。
我的问题如下: 如何实现轮换?我的意思是,如果一个立方体的位置(旋转)从 3 变为 10,我们如何知道面的新排列?或者,如果我对一个立方体进行突变,如果选择随机旋转数,旋转这个立方体的过程是什么?
我认为我应该为每个立方体创建一个包含6个元素(每个面的颜色)的向量,但是当修改一个立方体的旋转值时,我不知道它的向量的元素以什么方式面应该重新排列。 打乱它们是不正确的,因为这样做,两个相对的面可能会变得相邻,这意味着向量不再代表那个特定的立方体(显然,两个相对的面不能相邻)。
【问题讨论】:
标签: python artificial-intelligence evolutionary-algorithm