何时在遗传算法中检查染色体的有效性

时间:2013-02-06 11:17:46

标签: genetic-algorithm

我正在尝试为Rhino开发一个插件,它可以生成建筑平面图(基于Shape Grammars)。该插件使用RhinoCommon API在C#中编写。使用不同的规则,表示为染色体中的基因,我转换起始几何。使用GA,适应度函数确定转换规则的最佳序列,以生成与参数标准(区域,视图,最小构造等)匹配的几何。

由于几何体代表了体系结构,因此需要遵循一些建设性规则。我的问题是关于遗传算法的一般方法: 我什么时候检查染色体创建的几何体的有效性?在基因插入点或者我只是给无效的几何形状一个不好的适应值?

当我向染色体添加基因(代表几何变换操作)时,我可以检查这是否会导致无效的几何体。例如: 我的起始形状是一个矩形:

rectangle

一个转换选项是将一个矩形边分成两部分。该基因看起来像这样:[DIVIDE:TOP:0.25]。这将创建包含两个段的一侧,在四分之一标记处分开:

split rectangle

如果我已经知道一个片段必须具有一定长度,则该基因可能会产生无效的几何体。在上面的示例中,顶部的红色部分太短。我是否在基因插入点实现了这种几何检查(对于其他规则可能比在所示示例中更复杂),或者我是否等到适应度函数来验证它?在这个例子中,检查是当我添加一个段拆分基因时,我检查结果段是否在允许的范围内? 不检查可能导致由染色体组成的群体产生无效的几何形状,或者个体具有非常差的适应性。检查可以保证具有“有效”染色体的群体,但染色体的产生可能需要更长的时间。

什么是更好的策略?

2 个答案:

答案 0 :(得分:3)

我认为这两种方法实际上都可以正常工作,并且根据您的其他参数,它们的行为几乎相同。只要无效的基因组从未被选择为亲本,让无效的基因组通过将与在基因插入点移除它们相同,只要在第一种情况下您的群体明显大于第二种情况。假设您估计大约33%的基因插入导致无效的基因组。那么,当你让无效的基因组通过时,你希望你的群体是你生产时拒绝无效基因组的3倍。在这两种情况下,该算法将仅允许选择有效的基因组作为亲本,从而产生非常相似的结果。

在您的情况下,在插入点拒绝无效的基因组可能更容易,这将确保所有潜在的父母都有效。

我最后要指出的是,如果您使用大量的评估时间拒绝无效的基因组,您可能需要考虑改变遗传算子的方法,以便它们只能产生有效的基因组。我不确定在你的遗传算法中做到这一点的最佳方法,但通常在遗传编程中使用一种发展方法,它只对“胚胎”解决方案进行有效的改变。

答案 1 :(得分:0)

我认为检查必须在胚胎发育(绘图)功能和适应性中,因为两个有效父母之间的交叉(DIVIDE:TOP:0.25)和(DIVIDE:BOTTOM:0.05)可以创造后代像( DIVIDE:TOP:0.05)即使允许语法,也会创建太短的段。由于这必须通过适应度函数来评估,因此检查基因创建或突变点是多余的。