В предыдущем очерке (Выбор размера популяции для генетического алгоритма) был определен минимальный размер популяции необходимый для работоспособности генетического алгоритма: N = 1 + LOG2(1/(1-P1^(1/L))), где P1 — требуемая вероятность того, что случайный набор хромосом будет содержать все необходимые элементы для каждого локуса; L — длина...
人口規模を計算することを提案する:
記事をありがとう!もしこの記事がなかったら、遺伝的手法とは何かを学ぶことはなかったでしょう :)
しかし、一つ疑問があります!データベースから染色体をチェックする際、一致した場合、データベースの染色体インデックスから1単位が減算されます。なぜですか?また、インデックスがゼロの場合はどうなるのでしょうか?
どこが間違っているのでしょうか?
人口規模を計算することを提案する:
引用されたソースの能力に異議を唱えるつもりはないが、同意しかねる。
最適化問題でGAを使うことの実現可能性は、直接探索に比べて最適を決定するのに必要なFFの実行回数を減らすことにある。
その推奨に従えば
ChromosomeCount=GeneCount*11;1000個の引数を持つ問題は、11000個の個体数を必要とする!そしてそれは、たった1エポックで11000回のFFを実行することになる!ランダムな遺伝子生成を使っても、最適を見つけるという点ではそれほど劣らないだろう。このソースは、大規模な集団の中に、各エポックにおいて集団を改善に向けてさらに発展させるのに十分な遺伝物質が存在するという「賭け」を行っている。私は同じことを達成しようとしているが、FFの実行回数を増やすことなく、遺伝的演算子で確率を操作している。
記事にしてくれてありがとう!もしこの記事がなかったら、遺伝的手法とは何かを学ぶことはなかったでしょう :)
しかし、一つ疑問があります!データベースから染色体をチェックする際、一致した場合、データベースの染色体インデックスから1単位が減算されます。なぜですか?また、インデックスがゼロの場合はどうなるのでしょうか?
どこが間違っているのでしょうか?
データベースに少なくとも1本の染色体がある場合のみチェックします。データベース検索コードの全セクションを引用していません。
したがって、データベースに染色体がないにもかかわらず、溝がチェックされるケースはありえません。
データベース・チェックは、データベースに少なくとも1本の染色体がある場合にのみ実行されます。塩基で検索するコードの全セクションが与えられていません。
したがって、データベースに染色体がないにもかかわらず、溝チェックを行うというケースはありえません。
迅速なご回答ありがとうございます!おっしゃっているような正確な意味ではありません!
1) 仮に、データベースに染色体が1本(ChrCountInHistory = 1、つまり配列の次元が 1)あったとします!(ChrCountInHistoryはデフォルトで0-配列の要素の インデックスは0)。
そして、このインデックスから1を引く:
その上、検索はCh1=0から 始まります。
2)HistoryHromosomes[Ge][Ch1]と比較し、HistoryHromosomes[0][Ch1-1]を代入する。
その通りだ。
その通りだ:
その通りだ。
それでいいんだ:
うーん。
現在、HistoryHromosomes[0][Ch1]で"Array out of range"となっています。
joo:
ありがとう。
どういたしまして!前よりうまく動くようになったことが大きいよ :)
joo:
うーん。
HistoryHromosomes[0][Ch1]で "Array out of range "となっています。
解析するコードが違うので、理由はわかりません。たぶん "position "変数のせいでしょう。記事のコードを10回くらい見たけど、どこにバグがあるのか理解できなかったよ。
P.S. : 変数が~150個の値で構成されている場合、メモリバンクを 使用することは正当化されます。そして、履歴には100000の個体があります。そのような場合、すべてをチェック(検索)するよりも、計算した方が 速いかもしれませんね 。チェックし てないの ?
P.S. : 変数が~150個の値で構成されている場合、メモリーバンクを使用することは正当化されます。そして履歴には100000の個体がある。このような場合、すべてをチェック(再チェック)するよりも、カウントした方が 早いかもしれませんね ?チェックし てないの ?
すべてはFFを計算するのに必要な時間によります。もしFFが単なる数学的関数であれば、銀行は合理的ではありません。しかし、FFがヒストリーラン(ニューロン学習など)やその他のリソース集約的なタスクを使用するのであれば、バンクは必要であり、最適化時間を大幅に短縮することができる。
また、遺伝子の精度にもよる。遺伝子が "粗く "なればなるほど、繰り返しの頻度が高くなり、染色体バンクを使うことが合理的になります。
....
:)
それでもエラーは出ません。テストスクリプトを作ってみたので、試してみてください。
ここで、染色体をCh1の位置と比較していますが、上のループでは+1が代入されているので、その後に-1を引いています。
そうですね、ちょっと曲がっていますね。
これをチェックするスクリプトを以下に示します: