2

建築フロア プラン (シェイプ グラマーに基づく) を生成する Rhino 用のプラグインを開発しようとしています。プラグインは、RhinoCommon API を使用して C# で記述されています。染色体内の遺伝子として表されるさまざまなルールを使用して、開始ジオメトリを変換します。GA を使用して、適応度関数は変換ルールの最適なシーケンスを決定し、パラメトリック基準 (面積、ビュー、最小限の構成など) に一致するジオメトリを生成します。

ジオメトリはアーキテクチャを表すため、従うべき建設的なルールがいくつかあります。私の質問は、遺伝的アルゴリズムの一般的なアプローチに関するもの です。染色体によって作成されたジオメトリの有効性を確認するのはいつですか? 遺伝子挿入ポイントで、または無効なジオメトリに悪い適合値を与えるだけですか?

遺伝子 (幾何学的変換操作を表す) を染色体に追加すると、これが無効なジオメトリにつながるかどうかを確認できます。例: 私の開始形状は長方形です:

矩形

変換オプションの 1 つは、長方形の 1 つの辺を 2 つの部分に分割することです。遺伝子は次のようになります: [DIVIDE:TOP:0.25]。これにより、4 分の 1 マークで分割された 2 つのセグメントを含むサイドが作成されます。

長方形を分割

セグメントが特定の長さでなければならないことが既にわかっている場合、この遺伝子が無効なジオメトリを作成している可能性があります。上の例では、上部の赤いセグメントが短すぎます。遺伝子挿入ポイントでこのジオメトリ チェック (表示されている例よりも他のルールではより複雑になる可能性があります) を実装しますか、それとも適合関数がそれを検証するまで待ちますか? この例では、セグメント分割遺伝子を追加するときに、結果のセグメントが許容範囲内にあるかどうかをチェックしますか? チェックしないと、無効なジオメトリを生成する染色体で構成される母集団、または適応度が非常に低い個体が生じる可能性があります。チェックにより、「有効な」染色体を含む母集団が保証される可能性がありますが、染色体の生成にはさらに時間がかかる可能性があります。

より良い戦略は何でしょうか?

4

2 に答える 2

4

どちらのアプローチも実際にはうまく機能し、他のパラメーターに応じて、ほぼ同じ動作になると思います。無効なゲノムが親として選択されない限り、無効なゲノムを通過させることは、最初のケースの人口が2番目のケースよりも大幅に大きい限り、遺伝子挿入ポイントでそれらを削除することと同じです. 遺伝子挿入の約 33% が無効なゲノムになると推定したとしましょう。次に、無効なゲノムが生成されたときに無効なゲノムを拒否する場合と比べて、無効なゲノムを通過させるときの人口を 3 倍にする必要があります。どちらの場合も、アルゴリズムは有効なゲノムのみを親として選択できるようにするため、非常に類似した結果が得られます。

ただし、あなたの場合、挿入ポイントで無効なゲノムを拒否する方が簡単な場合があります。これにより、潜在的なすべての親が有効になります。

最後に指摘しておきたいのは、評価にかなりの時間を費やして無効なゲノムを拒否している場合は、有効なゲノムのみを生成できるように遺伝演算子を変更する方法を検討することをお勧めします。あなたのGAでこれを行う最善の方法はわかりませんが、遺伝的プログラミングでは多くの場合、「初期」ソリューションに対して有効な変更のみを強制する開発アプローチが使用されます。

于 2013-02-06T14:59:26.913 に答える
0

2 つの有効な親 (DIVIDE:TOP:0.25) と (DIVIDE:BOTTOM:0.05) の間のクロスオーバーにより、(DIVIDE:TOP:TOP :0.05) 構文が許可されている場合でも、非常に短いセグメントが作成されます。これは適合度関数によって評価される必要があるため、Gene-creation または Mutation-point でのチェックは不要です。

于 2013-02-08T14:01:03.080 に答える