遺伝的アルゴリズムと GA 全体についていくつか質問があります。
曲線にポイントを指定すると、この曲線を生成した関数を見つけようとする GA を作成しました。
例は次のとおりです。 ポイント
{{-2, 4},{-1, 1},{0, 0},{1, 1},{2, 4}}
関数
x^2
関数をまったく生成しないポイントを与える場合もあれば、関数を生成する場合もあります。初期ツリーの深さに依存することさえあります。
いくつかの質問:
- ポイントを評価して満足のいく関数を生成しようとする際に、ツリーの深さが重要なのはなぜですか?
- 時期尚早の収束が発生し、サイクルの場合に GA が発生しないのはなぜですか?
- 早期収束を防ぐにはどうすればよいですか?
- アニーリングはどうですか?どのように使用できますか?
私のコードを簡単に見て、何か明らかに問題があるか教えていただけますか? (これはテスト コードです。コードをクリーンアップする必要があります。)
https://github.com/kevkid/GeneticAlgorithmTest
ソース:http://www.gp-field-guide.org.uk/
編集:トーマスの提案がうまくいったように見えます。非常に高速な結果が得られ、早期収束が少なくなります。遺伝子プールを増やすとより良い結果が得られるように感じますが、実際に世代ごとに改善されているのか、それともランダムであるという事実が正しい解決策を見つけることを可能にしているのかは正確にはわかりません.
編集 2: トーマスの提案に従って、適切に機能させることができました。生存者の取得と遺伝子プールの拡大に問題があったようです。また、他の誰かが見たい場合は、最近 GA テストに定数を追加しました。