1

我正在尝试为骑行轨迹编写遗传算法,并考虑如何实现突变/交叉。目标是发展 a) 一个完整的循环 b) 一个令人兴奋的旅程(我对此有标准)。

我有大约 60 件可供选择,但并非所有件都相互兼容。例如,一个轨道件可以向左倾斜,而另一个轨道件可以向右倾斜。

当允许突变时,我可以努力只允许轨道片段突变为具有兼容角度的其他片段。或者,我只能在具有相同角度的点处交叉两条轨道。然而,这可能会限制进行高级探索的能力,而这些探索可能会取得丰硕的成果。

流行的“Hello World”示例类似的是,您正在尝试生成任何有效的单词或任何有效的句子。英语有一个规则(为这个例子弥补,不知道它是否属实)辅音不能跟随 Z。你应该只允许元音在 Z 之后发生变异吗?

这有任何意义吗?还是应该只允许所有类型的突变并丢弃不好的突变?

4

2 回答 2

2

您可以尝试两种方法:

  • 管理“片兼容性要求”作为约束,并使用二维向量作为适应值。

    第一个元素是应用于轨道的惩罚函数的结果(测量违反约束的数量,例如轨道块与最大允许角度的偏差总和)

    第二个元素是标准的、基本的目标函数。

    比较两个适应度值时:

    1. 任何可行的解决方案都优于任何不可行的解决方案
    2. 在可行的解决方案中,具有更好目标函数值的解决方案是首选
    3. 在不可行的解决方案中,具有较小约束违反的解决方案是首选

    通过这种方式,您可以对不可行的解决方案施加选择压力,使其靠近可行区域并进入可行区域(但允许探索不可行的解决方案)。

    这是遗传算法的有效约束处理方法- Kalyanmoy Deb中描述的方法

  • 尝试一种类似于通过基因编程自动合成模拟电路的方法

    程序树必须通过从简单的“胚胎轨道”开始的生长过程映射到轨道。轨道电路是通过在轨道构建程序树中应用各种功能而逐步开发的。

    可能电路构建程序树中的功能可以通过兼容的签名进行分组,并且强类型遗传编程方法可能是可行的。

于 2015-04-13T14:11:46.277 回答
0

manlio 回答的另一种方式是使用间接编码。您可以设计这样的编码来确保所有解决方案的有效性。查看 Grammatical Evolution 以及解决方案的编码方式,甚至直接将其与描述您的解决方案的语法一起使用。

于 2015-04-13T19:49:25.953 回答