1

我想写一个遗传算法的骑行轨道,并思考如何实现突变/交叉。目标是发展a)完整的循环和b)令人兴奋的旅程(我有这个标准)。允许在遗传算法交叉不兼容的变化

我有大约60件可供选择,但不是所有它们都相互兼容。例如,一个轨道片可能被留下,另一个轨道片可能被存入权限。

当允许突变时,我可能会努力只允许跟踪片段以相容的角度突变为其他片段。或者,我只能在共享相同角度的点上交叉两条曲目。然而,这可能会限制进行高级探索的能力,这些探索可能是成功的。

一个并行的the popular "Hello World" example会是,你试图产生任何有效的单词,或任何有效的句子。英语有一个规则(弥补这个例子,不知道是否是真的),一个辅音不能跟随一个Z.你应该只允许元音在Z之后变异吗?

这是否有意义?还是应该允许每种类型的突变并丢弃这些突变?

回答

2

有两种方法可以尝试:

  • 管理“一块兼容性要求”作为约束,并使用双维向量作为锻炼价值。

    第一元件是施加于磁迹中的罚函数的结果(测量约束违反的量,例如从最大一个轨道件的偏差的和允许的角度)

    第二元件标准的基本目标函数。

    当比较两个适应值:

    1. 任何可行的解决方案是优选的,以任何不可行解
    2. 可行的解决方案中,具有更好的目标函数值的一个优选
    3. 不可行解中,所述一个具有较小的违反约束条件是优选的

    通过这种方式,您可以对不可行解决方案施加选择性压力呃并且在可行区域内(但是不可行的解决方案允许用于勘探)。

    这是An Efficient Constraint Handling Method for Genetic Algorithms描述的方法 - 格利亚莫伊·德布

  • 尝试类似automated synthesis of analog electrical circuits by means of genetic programming的方法。

    程序树必须通过以简单的“萌芽轨道”开始的增长过程映射到轨道。通过在轨道构建程序 树中应用各种功能逐渐开发轨道电路。

    可能树电路构建程序 中的功能可以按兼容签名分组,并且strongly typed genetic programming方法可能是可行的。

0

与manlio回答的不同方式是使用间接编码。您可以设计这样的编码,确保所有解决方案的有效性。看看语法进化和解决方案的编码方式,甚至直接用描述解决方案的语法来使用它。