建築フロア プラン (シェイプ グラマーに基づく) を生成する Rhino 用のプラグインを開発しようとしています。プラグインは、RhinoCommon API を使用して C# で記述されています。染色体内の遺伝子として表されるさまざまなルールを使用して、開始ジオメトリを変換します。GA を使用して、適応度関数は変換ルールの最適なシーケンスを決定し、パラメトリック基準 (面積、ビュー、最小限の構成など) に一致するジオメトリを生成します。
ジオメトリはアーキテクチャを表すため、従うべき建設的なルールがいくつかあります。私の質問は、遺伝的アルゴリズムの一般的なアプローチに関するもの です。染色体によって作成されたジオメトリの有効性を確認するのはいつですか? 遺伝子挿入ポイントで、または無効なジオメトリに悪い適合値を与えるだけですか?
遺伝子 (幾何学的変換操作を表す) を染色体に追加すると、これが無効なジオメトリにつながるかどうかを確認できます。例: 私の開始形状は長方形です:
変換オプションの 1 つは、長方形の 1 つの辺を 2 つの部分に分割することです。遺伝子は次のようになります: [DIVIDE:TOP:0.25]。これにより、4 分の 1 マークで分割された 2 つのセグメントを含むサイドが作成されます。
セグメントが特定の長さでなければならないことが既にわかっている場合、この遺伝子が無効なジオメトリを作成している可能性があります。上の例では、上部の赤いセグメントが短すぎます。遺伝子挿入ポイントでこのジオメトリ チェック (表示されている例よりも他のルールではより複雑になる可能性があります) を実装しますか、それとも適合関数がそれを検証するまで待ちますか? この例では、セグメント分割遺伝子を追加するときに、結果のセグメントが許容範囲内にあるかどうかをチェックしますか? チェックしないと、無効なジオメトリを生成する染色体で構成される母集団、または適応度が非常に低い個体が生じる可能性があります。チェックにより、「有効な」染色体を含む母集団が保証される可能性がありますが、染色体の生成にはさらに時間がかかる可能性があります。
より良い戦略は何でしょうか?