記事"遺伝的アルゴリズム - とても簡単です!"についてのディスカッション - ページ 4 1234567891011...20 新しいコメント Andrey Dik 2010.08.22 20:43 #31 shurick:ライブラリを提供してくれた作者に感謝します!親検索関数のループ内に "cnt++; "という行を追加してください!確かに、母集団に個体が1つしかない場合など、ループが無限ループになる場合があります。近日中に変更します。PS おそらく、cnt++を入れ忘れたのだと思います。:)for()演算子で ループを作ることで、異なる親を検索する「永続性」を調整できるようにしたかったのですが、あまり意味がないと思い、考えを変えました。 Документация по MQL5: Основы языка / Операторы / Оператор цикла for www.mql5.com Основы языка / Операторы / Оператор цикла for - Документация по MQL5 Serge 2010.08.25 15:49 #32 @joo石墨や MAKDなどのインジケータの パラメータをコンパイルするために、あなたのライブラリを使用することは可能ですか? Andrey Dik 2010.08.25 16:15 #33 Graff: 石墨、MAKDなどのインジケータのパラメータ選択にライブラリを使用することは可能ですか?どのトレーダーの最適化タスクにライブラリを使用することが不可能ですか?- と聞かれたら、何と答えればいいのかわかりません。 Serge 2010.08.25 16:56 #34 joo:もし、「どのトレーダーの最適化タスクにライブラリーが使えないのか?- と聞かれたら、どう答えればいいのかわからない。 私はプログラマーではありません。可能であれば、ライブラリが1つのインジケータ(例えば、IshimokuやMAKD)に複数のパラメータをマッチさせるために使用されているコードを共有し、その作業を明確にしてください。 Andrey Dik 2010.08.25 17:26 #35 Graff: 私はプログラマーではありません。もし可能であれば、あなたのライブラリが1つのインジケータ(例えば、IshimokuやMAKD)に複数のパラメータを選択するために使用されているコードを共有してください。この質問は決してバカげたものではありません。記事の2番目の例を使ってください。ZZインジケータの代わりに、他のインジケータを使用してください。ZZトップの読み方の代わりに、独自の条件を書く必要があります(例えばMACD、同じ代替ジグザグが得られますが、設定したルールに従います)。複雑なことは何もない。試しにコードを書いてみてください。失敗したら、コードの問題箇所を示しながら質問してください。興味のある人は、自分の課題を解決する方法を見つけるだろうし、あなたやみんなが得をする。言語を学びたくない人は、「仕事」に連絡してください。 Alexander Agafonov 2010.08.25 20:14 #36 2jooです:RemovalDuplicates()関数の本質を教えてください。同じ染色体が2本あった場合、2本とも重複としてマークすべきか、片方は重複としてマークせずに残すべきか。また、この関数を高速化するために、Ch2ループは値Ch+1から始めることを提案します: //Выбираем второй из пары... for (Ch2=Ch+1;Ch2<PopulChromosCount;Ch2++)そして、もし私の質問の答えが、両方の染色体が重複としてマークされるのであれば、その代わりに if(cnt==GeneCount) chromosomeUnique[Ch2]=0; を実行します: if (cnt==GeneCount) { chromosomeUnique[Ch]=0; chromosomeUnique[Ch2]=0; } また、もし片方の染色体には重複の印をつけないという答えなら、Ch2ループはCh+1から始めるべきでしょう。 Andrey Dik 2010.08.25 22:27 #37 shurick:2jooです:RemovalDuplicates()関数の本質を教えてください。同じ染色体が2本あった場合、2本とも重複染色体としてマークすべきか、それとも片方は重複染色体としてマークせずに残しておくべきか、という質問です。この関数のアルゴリズムは以下の通りです:すべての染色体に一意性特徴 "1 "を付けます。すべての染色体は一意であると考える。同じ染色体があるかどうかを調べます。同じ配列番号のペアはスキップする。重複が見つかった場合は、重複特徴 "0 "を付けます。次に、"0 "以外の染色体を一時配列にコピーします。これで、隙間のない一時配列ができあがり、ユニークな染色体が何本残っているかがわかりました。次に、染色体を母集団にコピーし直すだけです。ご覧のように、染色体の削除はなく、ユニーク染色体が集団の最初に移動しただけです。この機能を試すには、スクリプトを書いて、手動でトリッキーな組み合わせの充填配列を与えてみて ください。この関数がどの程度効率的/非効率的に働くかがわかるだろう。配列の列をチェックする最小可能回数を計算し、それを RemovalDuplicates() 関数が列をチェックする回数と比較する。 Alexander Agafonov 2010.08.25 23:32 #38 joo:ZY この機能をテストするには、スクリプトを書いて、手動で作ったトリッキーな組み合わせのフィルド・アレイを食べさせてみる。この関数の効果・非効果がわかるだろう。配列の列をチェックする最小可能回数を計算し、RemovalDuplicates()関数が列をチェックする回数と比較する。 for(Ch2=Ch+1)」ループを開始すると、必要十分な繰り返し回数は2.5分の1になり、重複の1つは重複としてマークされなくなります。ここで、重複のうち1本の染色体をユニークなままにしておくのがどれだけ正しいのか、疑問に思いました!つまり、この関数のタスクは同一の染色体を取り除くことですが、重複染色体の1本は集団に戻す方がよいように思えます。例えば、{1,3,4,7,7,6,7,8,8}という染色体の配列があった場合、最適な重複除去は次のような結果になると思います:{1,3,4,7,6,8}.そこで、7番と8番をさらに検討する。 Andrey Dik 2010.08.26 04:55 #39 shurick: for(Ch2=Ch+1)」ループの最初で、必要十分な反復回数が2回減り、重複染色体の1本は重複とマークされなくなります。ここで、重複染色体のうち1本を一意に残すことがどれだけ正しいのか疑問に思いました!つまり、この関数のタスクは同一の染色体を除去することですが、重複染色体の1本は集団に戻したほうがよさそうです。例えば、{1,3,4,7,7,6,7,8,8}という染色体の配列があった場合、最適な重複除去は次のような結果になると思います:{1,3,4,7,6,8}.ということで、7番と8番がさらに検討されることになります。cnt++に関するあなたの前回の発言は妥当でした。しかし、今回は間違っています。もし...だったら...」と推測するのではなく、スクリプトを書いて関数をテストし、その結果を示すことをお勧めします。一本だけの染色体が残り、残りの正確なコピーは重複と認識され、「削除」される。これはおそらく、UGAアルゴリズム全体の中で最もモスクワを壊す関数のひとつだろう。最も時間がかかった。しかし、これにはエラーはない。追記 最大のポイントは、同じ染色体のチェックを繰り返さないことである。一意性のチェックの回数は必要最小限です。もしfor()演算 子の実行回数について話しているのであれば、(一意性チェックの回数はそのまま、つまり可能な限り最小のまま)追加の変数を導入し、ネストされた変数の中で毎回1ずつ増やすことで、回数を減らすことができます。これは関数を遅くします。PPS もしあなたが強調するならを強調する:....重複した染色体から1本だけユニークな染色体を残すことがどれだけ正しいか!つまり、関数の仕事は同一の染色体を除去する こと ですが、重複染色体の1本は集団に戻した方が良いように思えます。機能の仕事は重複を除去する ことである。そう呼ばれている。同一の染色体を取り除く ことではない。違いがわかりますか?この機能は、染色体をその生存能力によって区別するものではありません。その結果、ユニークな染色体だけが残り、重複染色体は残りません。PPPS 念のため、もう一つ明確にしておきます。20本の染色体からなる集団があるとします(簡単明瞭のために整数遺伝子を1本とします):|7|2|3|9|2|4|5|3|3|5|6|2|4|3|5|10|6|7|7|2|すなわち、遺伝子を含む染色体集団において2〜4本3〜4本4 - 2本5 - 3本6 - 2本7 - 3個9 - 1個10 - 1本合計20本の染色体。重複を取り除いた後の集団は次のようになり、染色体は8本残ります:|7|2|3|9|4|5|6|10|つまり、ユニークな染色体が1本だけ残り、残りは重複しているので、関数呼び出し後に「削除」されます。となります。PopulationRanking(); 関数の最後にRemovalDuplicates() 母集団は次のようになります:|10|9|7|6|5|4|3|2| Alexander Agafonov 2010.08.26 11:28 #40 joo:PPPS 念のため、もう一度説明しておきます。重複の削除に関する質問は、私の満足のいく形で完全に答えられました。元の関数と最適化された関数を示すスクリプトコードを添付します。現在のコメントでは、関数のバグを指摘しているのではなく、最適化を提案しているのです。私の主な目的は、重複除去の原理を知ることであり、それに対して包括的な回答をいただきました。ライブラリと関数の説明について、本当にありがとうございました。 ファイル: removalduplicatestest.mq5 8 kb 1234567891011...20 新しいコメント 取引の機会を逃しています。 無料取引アプリ 8千を超えるシグナルをコピー 金融ニュースで金融マーケットを探索 新規登録 ログイン スペースを含まないラテン文字 このメールにパスワードが送信されます エラーが発生しました Googleでログイン WebサイトポリシーおよびMQL5.COM利用規約に同意します。 新規登録 MQL5.com WebサイトへのログインにCookieの使用を許可します。 ログインするには、ブラウザで必要な設定を有効にしてください。 ログイン/パスワードをお忘れですか? Googleでログイン
ライブラリを提供してくれた作者に感謝します!
親検索関数のループ内に "cnt++; "という行を追加してください!
確かに、母集団に個体が1つしかない場合など、ループが無限ループになる場合があります。
近日中に変更します。
PS おそらく、cnt++を入れ忘れたのだと思います。:)
for()演算子で ループを作ることで、異なる親を検索する「永続性」を調整できるようにしたかったのですが、あまり意味がないと思い、考えを変えました。
石墨、MAKDなどのインジケータのパラメータ選択にライブラリを使用することは可能ですか?
どのトレーダーの最適化タスクにライブラリを使用することが不可能ですか?- と聞かれたら、何と答えればいいのかわかりません。
もし、「どのトレーダーの最適化タスクにライブラリーが使えないのか?- と聞かれたら、どう答えればいいのかわからない。
私はプログラマーではありません。もし可能であれば、あなたのライブラリが1つのインジケータ(例えば、IshimokuやMAKD)に複数のパラメータを選択するために使用されているコードを共有してください。
この質問は決してバカげたものではありません。
記事の2番目の例を使ってください。ZZインジケータの代わりに、他のインジケータを使用してください。ZZトップの読み方の代わりに、独自の条件を書く必要があります(例えばMACD、同じ代替ジグザグが得られますが、設定したルールに従います)。複雑なことは何もない。試しにコードを書いてみてください。失敗したら、コードの問題箇所を示しながら質問してください。興味のある人は、自分の課題を解決する方法を見つけるだろうし、あなたやみんなが得をする。言語を学びたくない人は、「仕事」に連絡してください。
2jooです:
RemovalDuplicates()関数の本質を教えてください。同じ染色体が2本あった場合、2本とも重複としてマークすべきか、片方は重複としてマークせずに残すべきか。
また、この関数を高速化するために、Ch2ループは値Ch+1から始めることを提案します:
//Выбираем второй из пары...
for (Ch2=Ch+1;Ch2<PopulChromosCount;Ch2++)
そして、もし私の質問の答えが、両方の染色体が重複としてマークされるのであれば、その代わりに
を実行します:
また、もし片方の染色体には重複の印をつけないという答えなら、Ch2ループはCh+1から始めるべきでしょう。
2jooです:
RemovalDuplicates()関数の本質を教えてください。同じ染色体が2本あった場合、2本とも重複染色体としてマークすべきか、それとも片方は重複染色体としてマークせずに残しておくべきか、という質問です。
この関数のアルゴリズムは以下の通りです:
すべての染色体に一意性特徴 "1 "を付けます。すべての染色体は一意であると考える。
同じ染色体があるかどうかを調べます。同じ配列番号のペアはスキップする。重複が見つかった場合は、重複特徴 "0 "を付けます。
次に、"0 "以外の染色体を一時配列にコピーします。これで、隙間のない一時配列ができあがり、ユニークな染色体が何本残っているかがわかりました。
次に、染色体を母集団にコピーし直すだけです。ご覧のように、染色体の削除はなく、ユニーク染色体が集団の最初に移動しただけです。
この機能を試すには、スクリプトを書いて、手動でトリッキーな組み合わせの充填配列を与えてみて ください。この関数がどの程度効率的/非効率的に働くかがわかるだろう。配列の列をチェックする最小可能回数を計算し、それを RemovalDuplicates() 関数が列をチェックする回数と比較する。
ZY この機能をテストするには、スクリプトを書いて、手動で作ったトリッキーな組み合わせのフィルド・アレイを食べさせてみる。この関数の効果・非効果がわかるだろう。配列の列をチェックする最小可能回数を計算し、RemovalDuplicates()関数が列をチェックする回数と比較する。
for(Ch2=Ch+1)」ループの最初で、必要十分な反復回数が2回減り、重複染色体の1本は重複とマークされなくなります。ここで、重複染色体のうち1本を一意に残すことがどれだけ正しいのか疑問に思いました!つまり、この関数のタスクは同一の染色体を除去することですが、重複染色体の1本は集団に戻したほうがよさそうです。例えば、{1,3,4,7,7,6,7,8,8}という染色体の配列があった場合、最適な重複除去は次のような結果になると思います:{1,3,4,7,6,8}.ということで、7番と8番がさらに検討されることになります。
cnt++に関するあなたの前回の発言は妥当でした。しかし、今回は間違っています。もし...だったら...」と推測するのではなく、スクリプトを書いて関数をテストし、その結果を示すことをお勧めします。
一本だけの染色体が残り、残りの正確なコピーは重複と認識され、「削除」される。
これはおそらく、UGAアルゴリズム全体の中で最もモスクワを壊す関数のひとつだろう。最も時間がかかった。しかし、これにはエラーはない。
追記 最大のポイントは、同じ染色体のチェックを繰り返さないことである。
一意性のチェックの回数は必要最小限です。もしfor()演算 子の実行回数について話しているのであれば、(一意性チェックの回数はそのまま、つまり可能な限り最小のまま)追加の変数を導入し、ネストされた変数の中で毎回1ずつ増やすことで、回数を減らすことができます。これは関数を遅くします。
PPS もしあなたが強調するなら
を強調する:
....
重複した染色体から1本だけユニークな染色体を残すことがどれだけ正しいか!つまり、関数の仕事は同一の染色体を除去する こと ですが、重複染色体の1本は集団に戻した方が良いように思えます。
機能の仕事は重複を除去する ことである。そう呼ばれている。同一の染色体を取り除く ことではない。違いがわかりますか?この機能は、染色体をその生存能力によって区別するものではありません。その結果、ユニークな染色体だけが残り、重複染色体は残りません。
PPPS 念のため、もう一つ明確にしておきます。
20本の染色体からなる集団があるとします(簡単明瞭のために整数遺伝子を1本とします):
|7|2|3|9|2|4|5|3|3|5|6|2|4|3|5|10|6|7|7|2|
すなわち、遺伝子を含む染色体集団において
2〜4本
3〜4本
4 - 2本
5 - 3本
6 - 2本
7 - 3個
9 - 1個
10 - 1本
合計20本の染色体。
重複を取り除いた後の集団は次のようになり、染色体は8本残ります:
|7|2|3|9|4|5|6|10|
つまり、ユニークな染色体が1本だけ残り、残りは重複しているので、関数呼び出し後に「削除」されます。
となります。
関数の最後に
母集団は次のようになります:
|10|9|7|6|5|4|3|2|
PPPS 念のため、もう一度説明しておきます。
重複の削除に関する質問は、私の満足のいく形で完全に答えられました。元の関数と最適化された関数を示すスクリプトコードを添付します。現在のコメントでは、関数のバグを指摘しているのではなく、最適化を提案しているのです。私の主な目的は、重複除去の原理を知ることであり、それに対して包括的な回答をいただきました。ライブラリと関数の説明について、本当にありがとうございました。