記事"遺伝的アルゴリズム - とても簡単です!"についてのディスカッション - ページ 5 123456789101112...20 新しいコメント Andrey Dik 2010.08.26 13:57 #41 shurick:重複の削除に関する質問は、私の満足のいく形で完全に答えられました。元の関数と最適化された関数を示すスクリプトコードを添付します。現在のコメントでは、関数のバグを指摘しているのではなく、その最適化を提案しているのです。私の主な目的は重複除去の原理を知ることであり、それに対して包括的な回答をいただきました。もう一度言いますが、ライブラリーと関数を明確にしていただき、本当にありがとうございました。20本の染色体に対して110本と160本は多すぎますね...。カウンターの位置を間違えています。これが正しい場所です://ペアの2つ目を選択する。 for (Ch2=Ch+1;Ch2<PopulChromosCount;Ch2++) { //count_cicles++; // DEBUG サイクルChとCh2を渡す回数を数える if (Ch!=Ch2 && chromosomeUnique[Ch2]!=0) { count_cicles++; // DEBUGは染色体の比較回数をカウントする。 //同一遺伝子の数をリセットしよう cnt=0; //遺伝子が同じであれば、遺伝子をチェックする。 for (Ge=1;Ge<=GeneCount;Ge++) { if (Population[Ge][Ch]!=Population[Ge][Ch2]) break; else cnt++; } //同一遺伝子の数が遺伝子の総数と同じ場合 //染色体は複製として認識される。 if (cnt==GeneCount) chromosomeUnique[Ch2]=0; }OK。では、同じ集団で、同じ染色体で、この順序で試してみてください:int m_init[20] = {7,7,7,3,9,2,4,5,3,3,5,6,2,4,3,5,10,6,2};どうでしょう? Andrey Dik 2010.08.26 17:06 #42 をシュリックに送る:確かに。すべての異なる染色体を使った一意性チェックの回数は、次の式で計算できます。 (PopulChromosCount^2-PopulChromosCount)/2。 20本の染色体がある例では(すべての染色体が異なると仮定)、チェックの回数は次のようになります: (20*20-20)/2=190 となる: int m_init[20] = {1,2,3,4,5,6,6,7,8,9,10,11,12,13,14,15,16,17,18,19,20};重複が見つかれば、チェックはさらに少なくなります。プロジェクトへの 積極的なご参加ありがとうございました!ライブラリには適切な変更が加えられます。この変更はアルゴリズムの検索機能には影響しませんが、その作業をより合理的にします。 Alexander Agafonov 2010.08.26 17:31 #43 joo:我々は何を見ているのか?今回の変更は、アルゴリズムの検索機能には何ら影響を与えないだろうが......。全くその通りです。アルゴリズムの質は変わりません。当初は疑っていましたが、今はあなたがそれを証明してくれました。しかし、これらの疑念の上に最適化の方法が見つかりました :) Andrey Dik 2010.08.30 11:35 #44 UGAライブラリとサンプルを記事に更新。現在のフリー作者バージョン1.2.1。 ファイル: ugalib_v1.2.1_ru.zip 13 kb Andrey Dik 2010.08.30 11:37 #45 この記事のライブラリーUGAとサンプルを更新。現在の無料オーサリングバージョン1.2.1。 ファイル: ugalib_v1.2.1_eng.zip 12 kb Henadiy E. Batohov 2010.10.27 12:35 #46 私はこの論文を研究し、コードの中でこのような矛盾を見つけました。範囲値を得るための2つの関数で、同じ式が使われているのです : //レプリケーション void Replication ... //新しい遺伝子を作るための境界線を設定しよう Minimum = C1-((C2-C1)*ReplicationOffset); Maximum = C2+((C2-C1)*ReplicationOffset); ... ///////////////////////////////////////////// // 人工突然変異。 void ArtificialMutation ... //新しい遺伝子を作るための境界線を設定しよう Minimum=C1-((C2-C1)*ReplicationOffset); Maximum=C2+((C2-C1)*ReplicationOffset); ... すなわち、2つの遺伝子の値から外れたデータが得られてしまうのです。これはバグなのでしょうか、それとも別の説明があるのでしょうか?複製法では符号を変える必要があるようです:最小値 = C1+((C2-C1)*ReplicationOffset);最大値 = C2-((C2-C1)*ReplicationOffset); Andrey Dik 2010.10.27 12:56 #47 Batohov:この記事を読んで、コードにこのような矛盾があることを発見しました。2つの関数が同じ数式を使って範囲の値を取得しているのです : つまり、2つの遺伝子の値から外れたデータが得られてしまうのです。これはバグなのでしょうか、それとも別の説明があるのでしょうか?複製法では符号を変える必要があるようです:最小値 = C1+((C2-C1)*ReplicationOffset);最大値 = C2-((C2-C1)*ReplicationOffset);エラーや矛盾はない。複製でも人為的突然変異でも、新しい遺伝子が出現する可能性のある境界(あなたが引用したコード部分)は同じように定義さ れます。しかし、複製の場合、確率の高い領域はこの境界線内にあり、人工突然変異の場合は、この境界線を超えて いる。複製は両親の遺伝子に特徴的な形質を(境界の範囲内で)伝達する役割を果たす。人工突然変異は、両親の遺伝子とは異なる新しい遺伝子を生み出す(境界線の外側)。 Henadiy E. Batohov 2010.10.27 13:04 #48 joo:誤りや矛盾はない。複製でも人工突然変異でも、新しい遺伝子が出現する可能性のある境界(あなたが引用したコード部分)は同じように定義される。しかし、複製の場合、確率の高い領域はこの境界の中にあり、人工突然変異の場合は、この境界を超えたところに ある。複製は両親の遺伝子に特徴的な形質を(境界の範囲内で)伝達する役割を果たす。人工突然変異は、両親の遺伝子とは異なる新しい遺伝子を生み出す(境界線の外側)。 早速のご回答、ありがとうございます。 hrenfx 2010.11.04 03:08 #49 joo:ところで、ZZにまつわる最も有名なトレーダー神話の一つ(記事中の2つ目の課題)の破壊者になれてとてもうれしい。 :)どうやら、私は課題の文言を理解していなかったようだ。私の発言最小取引がN ピップスという条件で最大利益を得るためのエントリーポイントは、最小ニーN+スプレッドピップスという 条件でジグザグの頂点に位置しています。 hrenfx 2010.11.04 03:16 #50 joo:MQL4フォーラムのスレッド"Test Multivariable Multiextremal Function " に興味深いテスト関数をいくつか投稿しました。もしお望みであれば、GA以外の他の最適化アルゴリズムを使って提案した関数の極値を見つけてみて、その結果をここに投稿してください。大歓迎である。それは誰にとっても興味深いことだし、そもそも私にとっても興味深いことだ。 フィットの妥当性を評価することが非常に重要であることは理解しています。その方法のひとつが、元のデータにノイズを加えることです。代替最適化手法のソースコードは、ここ(http://alglib.sources.ru/optimization/)とここ(http://ool.sourceforge.net/)にあります。明らかに、それぞれの最適化アルゴリズムは、それぞれのクラスのターゲット関数でより良い性能を発揮します。あなたは実際にどのターゲット関数を使いますか? 123456789101112...20 新しいコメント 取引の機会を逃しています。 無料取引アプリ 8千を超えるシグナルをコピー 金融ニュースで金融マーケットを探索 新規登録 ログイン スペースを含まないラテン文字 このメールにパスワードが送信されます エラーが発生しました Googleでログイン WebサイトポリシーおよびMQL5.COM利用規約に同意します。 新規登録 MQL5.com WebサイトへのログインにCookieの使用を許可します。 ログインするには、ブラウザで必要な設定を有効にしてください。 ログイン/パスワードをお忘れですか? Googleでログイン
重複の削除に関する質問は、私の満足のいく形で完全に答えられました。元の関数と最適化された関数を示すスクリプトコードを添付します。現在のコメントでは、関数のバグを指摘しているのではなく、その最適化を提案しているのです。私の主な目的は重複除去の原理を知ることであり、それに対して包括的な回答をいただきました。もう一度言いますが、ライブラリーと関数を明確にしていただき、本当にありがとうございました。
20本の染色体に対して110本と160本は多すぎますね...。カウンターの位置を間違えています。
これが正しい場所です:
OK。では、同じ集団で、同じ染色体で、この順序で試してみてください:
どうでしょう?
をシュリックに送る:
確かに。すべての異なる染色体を使った一意性チェックの回数は、次の式で計算できます。
(PopulChromosCount^2-PopulChromosCount)/2。20本の染色体がある例では(すべての染色体が異なると仮定)、チェックの回数は次のようになります:
(20*20-20)/2=190となる:
重複が見つかれば、チェックはさらに少なくなります。
プロジェクトへの 積極的なご参加ありがとうございました!
ライブラリには適切な変更が加えられます。この変更はアルゴリズムの検索機能には影響しませんが、その作業をより合理的にします。
我々は何を見ているのか?
今回の変更は、アルゴリズムの検索機能には何ら影響を与えないだろうが......。
全くその通りです。アルゴリズムの質は変わりません。当初は疑っていましたが、今はあなたがそれを証明してくれました。しかし、これらの疑念の上に最適化の方法が見つかりました :)
私はこの論文を研究し、コードの中でこのような矛盾を見つけました。範囲値を得るための2つの関数で、同じ式が使われているのです :
すなわち、2つの遺伝子の値から外れたデータが得られてしまうのです。これはバグなのでしょうか、それとも別の説明があるのでしょうか?
複製法では符号を変える必要があるようです:
最小値 = C1+((C2-C1)*ReplicationOffset);
最大値 = C2-((C2-C1)*ReplicationOffset);
この記事を読んで、コードにこのような矛盾があることを発見しました。2つの関数が同じ数式を使って範囲の値を取得しているのです :
つまり、2つの遺伝子の値から外れたデータが得られてしまうのです。これはバグなのでしょうか、それとも別の説明があるのでしょうか?
複製法では符号を変える必要があるようです:
最小値 = C1+((C2-C1)*ReplicationOffset);
最大値 = C2-((C2-C1)*ReplicationOffset);
エラーや矛盾はない。複製でも人為的突然変異でも、新しい遺伝子が出現する可能性のある境界(あなたが引用したコード部分)は同じように定義さ れます。
しかし、複製の場合、確率の高い領域はこの境界線内にあり、人工突然変異の場合は、この境界線を超えて いる。
複製は両親の遺伝子に特徴的な形質を(境界の範囲内で)伝達する役割を果たす。
人工突然変異は、両親の遺伝子とは異なる新しい遺伝子を生み出す(境界線の外側)。
誤りや矛盾はない。複製でも人工突然変異でも、新しい遺伝子が出現する可能性のある境界(あなたが引用したコード部分)は同じように定義される。
しかし、複製の場合、確率の高い領域はこの境界の中にあり、人工突然変異の場合は、この境界を超えたところに ある。
複製は両親の遺伝子に特徴的な形質を(境界の範囲内で)伝達する役割を果たす。
人工突然変異は、両親の遺伝子とは異なる新しい遺伝子を生み出す(境界線の外側)。
ところで、ZZにまつわる最も有名なトレーダー神話の一つ(記事中の2つ目の課題)の破壊者になれてとてもうれしい。 :)
どうやら、私は課題の文言を理解していなかったようだ。私の発言
最小取引がN ピップスという条件で最大利益を得るためのエントリーポイントは、最小ニーN+スプレッドピップスという 条件でジグザグの頂点に位置しています。
MQL4フォーラムのスレッド"Test Multivariable Multiextremal Function " に興味深いテスト関数をいくつか投稿しました。
もしお望みであれば、GA以外の他の最適化アルゴリズムを使って提案した関数の極値を見つけてみて、その結果をここに投稿してください。大歓迎である。それは誰にとっても興味深いことだし、そもそも私にとっても興味深いことだ。
フィットの妥当性を評価することが非常に重要であることは理解しています。その方法のひとつが、元のデータにノイズを加えることです。
代替最適化手法のソースコードは、ここ(http://alglib.sources.ru/optimization/)とここ(http://ool.sourceforge.net/)にあります。
明らかに、それぞれの最適化アルゴリズムは、それぞれのクラスのターゲット関数でより良い性能を発揮します。
あなたは実際にどのターゲット関数を使いますか?