我正在尝试为 Rhino 开发一个插件,它可以生成建筑平面图(基于 Shape Grammars)。该插件是使用 RhinoCommon API 用 C# 编写的。使用不同的规则,表示为染色体中的基因,我转换了起始几何。使用 GA,适应度函数确定变换规则的最佳序列,以生成符合参数标准(面积、视图、最小构造等)的几何图形。
由于几何代表建筑,因此需要遵守一些建设性的规则。我的问题是关于遗传算法的一般方法: 我什么时候检查染色体创建的几何形状的有效性?在基因插入点还是我只是给无效的几何图形一个不好的适应值?
当我向染色体添加一个基因(代表几何变换操作)时,我可以检查这是否会导致无效的几何形状。例如:我的起始形状是一个矩形:
一种转换选项是将一个矩形边分成两部分。该基因看起来像这样:[DIVIDE:TOP:0.25]。这将创建一个包含两个段的边,在四分之一处拆分:
如果我已经知道一个片段必须有一定的长度,那么这个基因可能会创建无效的几何图形。在上面的示例中,顶部的红色部分太短。我是在基因插入点实施此几何检查(对于其他规则可能比所示示例更复杂),还是等到适应度函数验证它?在这个例子中,检查将是当我添加一个片段分割基因时,我检查结果片段是否在允许的范围内?不检查可能会导致由生成无效几何形状的染色体组成的群体,或适应度非常差的个体。检查可以保证具有“有效”染色体的种群,但染色体的生成可能需要更长的时间。
什么是更好的策略?