1

遺伝的アルゴリズム (GA) を使用して解決したいパラメーター選択の問題に直面しています。3000 の可能なパラメーターから 4 つ以下のパラメーターを選択することになっています。バイナリ染色体表現を使用することは、自然な選択のように思えます。評価関数は、あまりにも多くの「選択された」属性を罰し、属性の数が許容できる場合は、選択を評価します。

問題は、これらのまばらな条件では、GA が人口をほとんど改善できないことです。平均フィットネス コストも、「最悪」の個人のフィットネスも世代を超えて向上しません。私が見ているのは、最良の個人のスコアがわずかに (ごくわずかでも) 改善されていることだけです。これは、ランダム サンプリングの結果であると思います。

パラメータのインデックスを使用して問題をエンコードしても機能しません。これはおそらく、染色体には方向性があるが、選択の問題には方向性がないためです (つまり、染色体 [1, 2, 3, 4]; [4, 3, 2, 1]; [3, 2, 4, 1] 等は同一)

どのような問題表現を提案しますか?

PSこれが重要な場合は、PyEvolveを使用します。

4

2 に答える 2

2

私は PyEvolve に詳しくありませんが、遺伝的アルゴリズムについて思い出す限り、あなたは 4 つのステップに関心があります。

  1. 染色体の評価(おそらくすでにこれを理解しているでしょう)
  2. 染色体の初期化
  3. 染色体クロスオーバー
  4. 染色体変異

リストでこれをうまく行うことができると思います。いくつかの演算子をオーバーロードする必要がありますが、PyEvolveではこれを実行できるようです 。簡単なことは、リスト表現を保持し、染色体を返す前に番号順にソートすることです。

あなたの問題についてもっと知る必要がありますが、ここに私の提案があります。パラメータの数は可変であるため、染色体内のパラメータ数のある種の確率分布を考え出す必要があります。ここでは 1,2,3,4 の一様乱数を想定していますが、それが気に入った場合は別の方法を試すこともできます。この分布を P_n と呼ぶことにします。

  1. 初期化。集団に (少なくとも) 3000 の染色体を播種します。これらを c_1,...,c_3000 と呼びます。P_n から n_j を描画します。j を c_j に入れます。残りのパラメータから一様ランダム分布で残りの n_j - 1 パラメータを選択します。
  2. クロスオーバー。染色体が2本あるとしましょう。C_1 と C_2。染色体 C_3 を作成 (および返却) します。{n_1, n_2} から n_3 をそれぞれ確率 1/2 で選択します。ここで、C_1 と C_2 のパラメーターを 1 つのリストに入れます (そしてそれらを一意にします。したがって、 C_1 と C_2の両方にパラメーター 1 が含まれている場合、リストには 1 回だけ含まれます)。ジョイント リストから n_3 個のパラメーターを引き出し、それらを染色体 C_3 に配置します。
  3. 突然変異。染色体 C_1 が与えられた場合、P_n から n_1* を描画します。n_1* が < n_1 の場合、n_1* 要素になるまで C_1 から要素をランダムに削除します。n_1* = n_1 の場合、C_1 から 1 つの要素をランダムに選択し、C_1 にないものからランダムに選択されたパラメーターに置き換えます。n_1* > n_1 の場合、サイズが n_1* になるまで要素を C_1 にランダムに追加します。

これには多くの方法があるため、問題に最も適した方法を実行してください。

于 2009-05-26T04:17:47.217 に答える
0

ここでは、パラメーター数の制限により、特異値分解 ( http://en.wikipedia.org/wiki/Singular_value_decomposition ) の方が適切であると思います。

于 2009-05-26T04:22:50.650 に答える