記事"遺伝的アルゴリズム - とても簡単です!"についてのディスカッション - ページ 3

 
頭の中がゴチャゴチャしていると言ったので、間違った方向に行ってしまった。
ハッシュはコロニー内の重複検索に応用でき、ハッシュを見つける機能をシンプルかつ高速にすることができる。1-2個の重複でも天候に左右されず、結果を損なわないからだ。
 

GAアルゴリズムの実行時間は、FFの実行時間と比較にならないほど小さい。したがって、例えばGAをDLLに移行することに意味がないように、アルゴリズムをさらに高速化しようとしても意味がない。

要求される結果の精度を維持したまま、FFの実行回数を減らす努力をすべきなのだ。アルゴリズムには、この目的のための柔軟な設定がある。その上、一般的なGAと特に演算子の検索品質を改善することにより、検索時間をさらに短縮することができる。これらの方向に研究の可能性を向けることを推奨する。

 
joo:

GAアルゴリズムの実行時間は、FFの実行時間と比較にならないほど小さい。したがって、例えばGAをDLLに移行することに意味がないように、アルゴリズムをさらに高速化しようとしても意味がない。

要求される結果の精度を維持したまま、FFの実行回数を減らす努力をすべきなのだ。アルゴリズムには、この目的のための柔軟な設定がある。その上、一般的なGAと特に演算子の検索品質を改善することによって、検索時間をさらに短縮することができる。これらの方向に研究の可能性を向けることを推奨する。



さて、ライブラリを書いたらすぐにテストして、出てきたものを書きますね)))。

 

記事への重要な注意

アルゴリズムパラメータ

FFNormaliseDigitsと GeneNormaliseDigits

フィットネス関数の値と遺伝子を正規化する必要はありません。正規化は、アルゴリズムの探索性の低下とFF実行回数の増加をもたらします。さらに、小数点以下の桁数を捨てれば捨てるほど、アルゴリズムへの悪影響は大きくなります。

つまり、正規化操作をアルゴリズムに導入したのは間違いだったのだ。

Precision パラメータで制御されるサンプリング操作と混同しないでください!

 


FFNormalizeDigitsGeneNormalizeDigits

適性関数と 遺伝子の値を正規化する必要はない
正規化はアルゴリズムの探索能力を低下させ、開始FFの量を増加させる。また、カンマの後の符号が多ければ多いほど、アルゴリズムへの悪影響が強くなる。 つまり、アルゴリズムに正規化の操作を導入したのは誤りであった。 パラメータ



Precisionで 操作される桁上げの操作と混同しないように!

 
joo:

記事への重要な注意

アルゴリズムパラメータ

FFNormaliseDigitsと GeneNormaliseDigits

フィットネス関数の値と遺伝子を正規化する必要はありません。正規化は、アルゴリズムの探索性の低下とFF実行回数の増加をもたらします。さらに、小数点以下の桁数を捨てれば捨てるほど、アルゴリズムへの悪影響は大きくなります。

つまり、正規化操作をアルゴリズムに導入したのは間違いだったのだ。

Precision パラメータで制御されるサンプリング操作と混同しないように!

したがって、UGAlib ライブラリ自体では、正規化を削除するか、FF でのみ正規化するのがよいでしょう。
 
Serj_Che:
UGAlib ライブラリ自体で正規化を削除した方が良いのか、FF でのみ削除した方が良いのか。
FFNormalizeDigitsは フィットネス値を正規化するためにFFで使用され、GeneNormalizeDigitsは 遺伝子を正規化するためにアルゴリズム自体で使用されます。両方を正規化する必要はありません
 
joo:
FFNormalizeDigitsは フィットネス値を正規化するためにFFで使用され、GeneNormalizeDigitsは 遺伝子を正規化するためにアルゴリズム自体で使用される。両方を正規化する必要はありません

なるほど。もちろん自分で修正するつもりですが、もし難しくなければUGAlibの修正版を投稿してください。

間違えそうで怖いです。

 
UGAライブラリとサンプルを記事に更新。現在の無償作者バージョン1.1.0は、記事末尾の本文中のリンクから入手できます。
 

ライブラリを提供してくれた作者に感謝します!

親検索関数のループ内に "cnt++; "という行を追加する!

 //Отбор двух родителей.

void SelectTwoParents

(

int &address_mama,

int &address_papa

)

{

  //-----------------------Переменные-------------------------------------

  int cnt=1;

  address_mama=0;//адрес материнской особи в популяции

  address_papa=0;//адрес отцовской особи в популяции

  //----------------------------------------------------------------------

  //----------------------------Отбор родителей--------------------------

  //Десять попыток выбрать разных родителей.

  while (cnt<=10)

  {

    //Для материнской особи

    address_mama=NaturalSelection();

    //Для отцовской особи

    address_papa=NaturalSelection();

    if (address_mama!=address_papa)

      break;

    cnt++; 

  }

  //---------------------------------------------------------------------

}