【问题标题】:Tower of colored cubes彩色立方体塔
【发布时间】: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


    【解决方案1】:

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

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

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

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

    从那里,您似乎对突变有了适当的处理。您可能会给不匹配的多维数据集带来更高的变异机会,或者查看某个多维数据集是否是半匹配:两个相对的面与“最适合”的 4 显示匹配,因此您只需沿该轴旋转它,保留那些两张脸,然后将另一对换成上下对(注意:这样做的两个方向)。

    这会让你感动吗?

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2021-10-14
      • 1970-01-01
      • 1970-01-01
      • 2019-09-21
      • 1970-01-01
      相关资源
      最近更新 更多