私は大学で少し GP (注: ごくわずか) の仕事をしましたが、最近それをいじっています。私の質問は、最初の実行設定に関するものです (人口サイズ、世代数、木の最小/最大深さ、初期木の最小/最大深さ、さまざまな再生操作に使用するパーセンテージなど)。これらのパラメータを設定する通常の方法は何ですか? 人々はどのような論文やサイトを参考にしていますか?
5 に答える
これは、問題のドメイン、特にフィットネス関数の性質、実装 DSL などに大きく依存することがわかります。
いくつかの個人的な経験:
- ノイズの多いフィットネス関数がある場合、母集団のサイズが大きいほどうまく機能するようです。これは、連続する世代にわたる母集団のサブグループの成長が、フィットネス関数のサンプリングを増やすように作用するためだと思います。通常、ノイズの少ない/決定論的な関数には 100 を使用し、ノイズの多い関数には 1000+ を使用します。
- 世代数については、フィットネス関数の改善を測定し、目標基準を満たした時点で停止するのが最善です。私は通常、数百世代を実行して、どのような答えが出てくるかを確認します。改善が見られない場合は、おそらく他の場所に問題がある可能性があります.
- ツリーの深さの要件は、DSL に大きく依存します。私は時々明示的な制限なしで実装しようとしますが、実行時間が長すぎるプログラムにペナルティを課すか排除します (これはおそらくあなたが本当に気にかけていることです....)。また、最大 1000 の合計ノード数が非常に有用なハード リミットであることもわかりました。
- 異なる変異/組換え演算子のパーセンテージは、それほど重要ではないようです。ミューテーションの包括的なセットがある限り、通常、合理的にバランスのとれた分散は機能します。この理由は、基本的には有利な改善を探しているためだと思います。主な目的は、試験的な改善がすべての可能性に合理的に分散されていることを確認することです.
遺伝的アルゴリズムを使用してこれらのパラメーターを最適化してみませんか?:)
コンピュータサイエンスの問題は、別の間接層で解決できます(間接層が多すぎる場合を除く)。
-デビッド・J・ホイーラー
遺伝的アルゴリズムを調べ始めたとき、同じ質問がありました。
非常に単純な問題でパラメータを変化させるデータを収集し、指定された演算子とパラメータ値 (突然変異率など) を人口サイズなどの関数で指定された結果にリンクしたいと考えました。
GA をもう少し使い始めると、膨大な数の変数を考えると、これは巨大な作業であり、一般化は非常に難しいことに気付きました。
私の(限られた)経験から言えば、問題を単純化し、固定された方法を使用してクロスオーバー、選択を実装し、人口サイズと突然変異率(特定の方法で実装)で遊んでいる場合、一般的な結果を考え出そうとします。あまりにも多くの変数がまだ作用していることにすぐに気付くでしょう。なぜなら、結局のところ、統計的にまともな結果が得られるまでの世代数は (decent を定義したい方法が何であれ)、明らかに主に問題に依存しているからです。その結果、ゲノムサイズに影響を与えます (同じ問題を異なる方法で表すと、与えられた GA パラメータの効果に関して明らかに異なる結果につながります!)。
(稀ではあるが優れた) 文献が証明しているように、一連のガイドラインを起草することは確かに可能ですが、目前の問題がまったく同じ方法でコード化でき、フィットネスは、何らかの形で同等の方法で評価されます (これは、多くの場合、非常によく似た問題に取り組んでいることを意味します)。
これらの事柄については、コザの大著をご覧ください。
GP コミュニティ内でも非常に異なる考え方があります - ある人は (少数の) 数千の人口で十分であると考えていますが、コザや他の人は、GP 人口の 100 万人未満の個人で GP を開始する価値があるかどうかをしばしば判断しません。 ;-)
前に述べたように、それはあなたの個人的な好みと経験、リソース、そしておそらく使用される GP システムに依存します!
乾杯、ジャン