文法の進化を利用して遺伝的アルゴリズムをプログラミングしています。私の問題は、局所的な最適値(早期収束)に到達し、それが発生したときに何をすべきかわからないことです。突然変異率を上げることを考えています(5%がデフォルト値です)が、いつ必要かを判断する方法がわかりません。
私がすべての世代で持っているデータは、最初の列がその適合性である二次元配列です
adn[i][0] ← fitness
row → is the values of the Grammar
column ↓ Each indiviual result
説明が必要な場合は、お問い合わせください。変更させていただきます。これは私の母国語ではなく、間違いやご不便をおかけして申し訳ありません。
リクエストに答えると、私の操作は次のとおりであり、この順序で正確に:
- ランダムな母集団(乱数を含む行列)を生成します
- 希望する結果を含む行列を生成します。これを行うために、私はさらに+ -5%のバリエーションを持ついくつかの関数を実装しました。例:fun(x)=(2 * cos(x)+ sen(x)-2X)* (0,95+ (0と0,1の間で振動する数値)、xには0からN(Nは行のサイズ)までのすべてのf(x)が含まれ、yにはまったく同じ(より多くの結果)が含まれます
- アルゴリズムを開始します(世代が変わり始めます
すべての世代を作るアクションは次のとおりです。
- 突然変異:すべての染色体の乱数は任意の遺伝子で突然変異する可能性があります→adn [i] [ランダム] =乱数(これが発生する確率の5%)
- クロスオーバー:私はすべてのadnを他のadnと交差させます(80%はすべてのペアの突然変異の可能性です)。ペアリングのために、乱数を選び、adn [i]とadn [(i + j)mod NumADNs]に直面します。
翻訳。ワンステップの転写で作成したf(0からN)の値を含む行列を取得し、画像に文法を適用して翻訳します
-fitness:取得した値を期待値と比較し、適合度を更新します。
-エリート主義:その後、私は最高の4つのADNを選択し、それをトップにします、それらは選択されます
-選択:非エリート主義のadnは完全にランダムなadnに直面し、その適応度が低い(低いほうが良い)が優勢であり、悪い方が生き残る可能性があります