我试图为一些骑行轨迹编写遗传算法,并考虑如何实现突变/交叉。目标是发展a)一个完整的循环和b)一个令人兴奋的旅程(我有这个标准)。
我有大约60件可供选择,但并非所有这些都是相互兼容的。例如,轨道件可以向左倾斜,而另一个轨道件可以向右倾斜。
当允许突变时,我可以努力只允许轨道片段变异为具有兼容角度的其他片段。或者,我只能在共享相同角度的点处交叉两个轨道。然而,这可能会限制进行高级探索的能力,这些探索可能会很有成效。
the popular "Hello World" example的并行,你试图生成任何有效的单词或任何有效的句子。英语有一个规则(为这个例子编写,不知道它是否真的),辅音永远不能跟随Z.你是否只允许元音在Z之后发生变异?
这有什么意义吗?或者你应该只允许每种类型的突变并丢弃坏的突变?
答案 0 :(得分:2)
您可以尝试两种方法:
管理"件兼容性要求"作为约束并使用二维向量作为适应度值。
第一个元素是应用于轨道的惩罚函数的结果(测量约束违规的数量,例如轨道片与最大允许角度的偏差之和)
第二个要素是标准的基本目标函数。
比较两个健身值时:
通过这种方式,您可以对不可行的解决方案施加选择性压力,使其更接近可行区域(但不允许进行探索)。
这是An Efficient Constraint Handling Method for Genetic Algorithms - Kalyanmoy Deb
尝试类似于automated synthesis of analog electrical circuits by means of genetic programming的方法。
程序树必须通过一个以简单的“胚胎轨道”开头的成长过程映射到轨道。通过在轨道构建程序中应用各种功能来逐步开发轨道电路 树。
可能是电路构建程序中的功能 树可以通过兼容的签名进行分组,strongly typed genetic programming方法可行。
答案 1 :(得分:0)
manlio回答的另一种方法是使用间接编码。您可以设计此类编码,以确保所有解决方案的有效性。查看语法进化和解决方案编码的方式,甚至直接使用描述解决方案的语法。