問題タブ [crossover]
For questions regarding programming in ECMAScript (JavaScript/JS) and its various dialects/implementations (excluding ActionScript). Note JavaScript is NOT the same as Java! Please include all relevant tags on your question; e.g., [node.js], [jquery], [json], [reactjs], [angular], [ember.js], [vue.js], [typescript], [svelte], etc.
optimization - sin(x)^2 のような 1 つの変数関数の最小値を取得するために GA を使用する場合のクロスオーバーの正しい方法は何ですか?
間隔 [x:y] を10101111のようなバイナリ コードにエンコードしているため、人口の場合は[[1,0,1,1],[0,1,0,1]]
.
関数の値 ( ) を使用して、フィットネス関数を直接定義しましたsin(x)^2
。
選択にはトーナメント選択を使用し、クロスオーバーには次のような染色体の単純な交換部分のみを使用しています: 1(10)0
and 0(01)1
-> 1(01)0
and 0(10)1
.
突然変異の場合、ビット反転を使用します。
アルゴリズムの種類は機能し、グローバルな最小値を生成することもあれば、ローカルな最小値を生成することもあります。しかし、この問題ではクロスオーバーの機能がわかりません。「x」の機能が毎回壊れているため (私は思う)、その理由がわかりません。また、クロスオーバーをコーディングする方法が正しい場合でもまたは多分エンコーディング部分。
python-2.6 - 複数の親の部分的にマップされたクロスオーバー (MPPMX) - 疑似コードの無限ループ?
7 : bool 値を持つ配列を作成します (どうやら、これは論文では説明されていません)。現在の値 (値 = インデックス) を「true」に割り当てます。
18 : この時点で、すべての値が「true」になり、k = len(parents) の条件に到達する配列を持つことができます 19-22 : これにより、無限ループが作成されます
何か不足していますか?
論文: 組み合わせ最適化問題のための部分的にマッピングされた交差の複数親拡張。Chuan-Kang Tinga, , , Chien-Hao Sub, , Chung-Nan Leeb,
http://www.sciencedirect.com/science/article/pii/S0957417409006800
//編集: ここに私のコード PYTHON-2.6 が入ります
algorithm - 遺伝的アルゴリズム:一意の要素の順序付けられたコレクションでクロスオーバーを行う方法は?
この質問は別の質問に基づいています。
一意の要素の順序付けられたコレクションによって形成された染色体でクロスオーバー操作を効率的に実装するにはどうすればよいでしょうか?
そのような 2 つの親染色体は{'a','b','c','d'}
と{'e','f','a','b'}
です。そして、それらの親の 2 つの可能な子染色体は{'e','f','c','d'}
と{'a','f','c','b'}
です。
search - 遺伝的アルゴリズムによる 3D 位置の検索
いくつかのフィットネス関数に従って、遺伝的アルゴリズムを使用して 3D 空間で最適な場所を検索したいという問題があります。私は場所を探しているので、私の染色体は 3 つの浮動小数点数で表されます。現在、クロスオーバーは、一方の親から 1 つまたは 2 つの数字を取得し、もう一方の親から残りの数字を取得することによって行われます。
このように交差すると、次の世代は、開始集団の染色体と同様の X、Y、または Z 座標を持つ位置のみで構成されます。したがって、大きな変化はあり得ません。私の質問は、これが私の染色体の別の表現(ビットなど)を使用することで最もよく解決されるかどうかです。これにより、より多くのクロスオーバーポイントが可能になります(浮動小数点数内でも)、または突然変異率を高く設定して突然変異を追加させるためのより良い解決策です次世代でバリエーションが増える?
c++ - Vector クラスとトーナメントの選択について
人の「全体的な」価値観を他の人と比較できるようになりたいです。それらを正しく保存しているかどうか確信が持てず、それらを正しく比較する方法もわかりません。一人の人の「全体的な」値にアクセスする方法がわかりません。これが私を最も悩ませていると思います。
ヘッダーファイル
人口.cpp
main.cpp
人々を比較し、「勝者」を「生存者」ベクトルに保存してから、「生存者」ベクトルを使用して、X世代のクロスオーバーと突然変異を使用して新しい集団を作成できるようにしたいと考えています。
encoding - 遺伝的アルゴリズムで値のエンコード方法を使用する場合、親をクロスオーバーするにはどうすればよいですか?
遺伝的アルゴリズムには、親から子への染色体の交配を選択する段階があります。
バイナリ形式で簡単に実行できます。
しかし、値のエンコーディングを使用して染色体をエンコードするとどうなるでしょうか?
私の染色体の 1 ビットが DOUBLE 型の値であるとしましょう。0.99 としましょう。確率を表すため、その範囲は (0-1) です。
この DOUBLE 数をクロスオーバーするには?
バイナリに変換してクロスオーバーしてから元に戻す...?
c++ - 遺伝的アルゴリズムにおける交叉
エラーが発生する部分 (より具体的には、Debug error! Abort () has been called というポップアップが表示される部分) は、クロスオーバーを実行しようとする部分です。
「テスト 0」または「テスト 1」を表示するには十分ですが、実際には父/母からの遺伝子を new_individual に割り当てません。
古い遺伝子を新しい個体に割り当てるラインを変更しようとしましたが、何を試しても機能しません。
どこで(またはどのように)私が台無しになっているかを誰かが教えてくれたら、とても感謝しています:)
編集:デバッガーをステップ実行すると、次のようになります
http://prnt.sc/b0iprq での未処理の例外 .... LearnCPP.exe: Microsoft C++ 例外: std::out_of_range のメモリ位置 .....
別の編集:明確にするために、中止が発生するのはこの正確な行です:
algorithm - 遺伝的アルゴリズムにおける交差確率
遺伝的アルゴリズムにおける交差確率のポイントは何ですか?
遺伝的アルゴリズムの一般的な手順は次のとおりです: ( source )
最初に、初期集団が生成されます。次に、選択方法 (この場合はトーナメント選択) を使用して、子のペアを作成する個体のペアを選択します。
子は、そのサイズが目的の値に達するまで子の母集団に追加されます。
次のステップは、サイズ N の親母集団とサイズ M の子母集団を結合することです。どちらか一方を他方に置き換えて、両方の母集団から最良の N 個の個体を保持します。
もちろん、特定の確率で突然変異を実行したい場合があります。たとえば、100 人に 1 人の子供が突然変異します。
しかし、クロスオーバー率のポイントがわかりません。ペアの親がトーナメントの選択で選択され、クロスオーバーが発生しなかった場合はどうなりますか? 親を子集団に追加する必要がありますか? この場合、親と子の母集団でメンバーが重複することになります。
ここでの目標は、各世代で必要な数の子供を作成することであり、クロスオーバーによって実現する必要があります。クロスオーバー率が意味を持つようにこのアルゴリズムを変更する方法は?
交差確率が 100% の場合、すべての子孫は交差によって作られます。0% の場合、新しい世代全体が古い集団の染色体の正確なコピーから作成されます (ただし、これは新しい世代が同じであることを意味するわけではありません!)。 ソース
交差確率が 0% の場合、世代全体が古い母集団からの染色体の正確なコピーで構成されます。では、なぜ新しい世代は同じではないのでしょうか?
genetic - 遺伝的アルゴリズムによるソート、クロス オーバーの重複データ
私の質問は、クロスオーバーを実行して重複を避ける方法ですか?
考えp1 = {1, 2, 5, 6, 3, 4}
てみるとp2 = {2, 6, 5, 4, 1, 3}
、クロスオーバーの 1 つはres = {1, 2, 5 , 6, 1 ,3}
、ご覧のように重複があります
。
これが私のコードです