問題タブ [evolutionary-algorithm]
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.
java - 進化的アルゴリズムで染色体を初期化して、実変数のLP / ILPまたは一般的なCOSを解決するにはどうすればよいですか?
私は最適化問題のためのJavaフレームワークに取り組んでいます。これまで、lp_solveとGLPKを実装してきたので、線形問題(LP)と整数線形問題(ILP)を処理できます。ここで、非線形制約または非線形目的関数の問題を処理できるようにするために、ソルバーとして進化的アルゴリズムを使用する可能性を提供したいと思います。一般に、制約最適化問題(COS)を処理します。遺伝的アルゴリズム用のApachecommons遺伝的パッケージを見つけ、遺伝的アルゴリズムの実装を開始しました。
私のアルゴリズムの染色体は、最適化問題の解決策を表しています。つまり、マップで構成されていますVariable -> Number
。さて、最初の母集団では、ランダムにソリューションを作成し、そこから進化を始めたいと思います。したがって、変数のランダムな値を見つける必要があります。変数の下限と上限にアクセスでき、その定義域が整数であるかどうかは実数です。したがって、次の方法で変数を開始します。
newRepresentation
これにより、すべての変数が乱数に割り当てられたマップが得られるはずです。ただし、変数が制限されていない場合、つまり下限がに等しく0
、上限がに等しい場合Integer.MAX_VALUE
、下限に近い値を取得することはありません。たとえば、私は問題を抱えています
次に、最適なソリューションはx=6, y=4
です。しかし、変数は私のEAによって次のように初期化されます。
値は、最適なソリューションが配置されている下限に近づくことはありません。したがって、私のEAは、数分間検索した後でも、少なくとも最適なソリューションに近いソリューションを見つけられません。
質問:値が検索空間全体に均等に分散されるように、染色体の開始を変更するにはどうすればよいですか?
c# - 製品構成ツールの依存関係を持つデータ/アイテムの管理の難しさ
オブジェクトの依存関係や要件を含むオブジェクト情報を含む文字列の解析に取り組んでいます。
これは製品構成用であり、オブジェクトは製品のビルドを構成するコンポーネントです。リストを調べて、車やコンピューターなど、他のコンポーネントを取得するために特定のコンポーネントを選択する必要のあるコンポーネントを備えたものを構築する場合のように考えてください。これは、アプリケーションで作成しようとしているロジックです。
私のアプリケーションは、Excelファイルからロードされたオブジェクトのリストを含むtreeViewコンポーネントをユーザーに提示します。ノードが表すオブジェクト間の依存関係に基づいて、treeViewのノードを適切に有効または無効にするオブジェクトのインタラクティブリストを作成しようとしています。オブジェクトのリストは、ビルドの構成を表します。したがって、オブジェクトは最終製品を構成するコンポーネントであり、特定のビルドに対してどのコンポーネントまたはオブジェクトを選択できるかについて制限があります。
これは、ロジックを記述しようとしている依存関係を含む行のサンプル形式です。
objectIDはこのオブジェクト(コンポーネント)のIDであり、4桁の数字であり、オブジェクトのIDに次のように1文字が含まれる非常にまれなケースがあります:12a4
y1234は、このオブジェクトをアクティブにするには、ID1234のオブジェクトを選択する必要があることを意味します。
y1233は、このオブジェクトをアクティブにするには、ID1233のオブジェクトを選択する必要があることを意味します。
y1234とy1233はID番号の最初の2桁が同じであるため、これによりor条件が作成されます。
したがって、このオブジェクトでは、両方を選択するのではなく、オブジェクト1234または1233を選択する必要があります。
n2345は、オブジェクト2345が選択されている場合、このオブジェクトがアクティブでないことを意味します。
リストされている最初の依存関係は常に「y」または「n」で始まるため、objectID_1234_n2345_y1235を持つことはできませんが、objectID_y1234_1235_n2345を持つことはできます。
また、条件が「または」条件である場合、y1234_n1233を使用できない場合は、両方にyがあるか、両方にnがあるかのいずれかです。
多くの可能なフォーマットのいくつか:
objectID_y1234_2345
これは、このオブジェクトをアクティブにするには、オブジェクト1234とオブジェクト2345を選択する必要があることを示しています。objectID_n1234_2345_y3456
これは、このオブジェクトをアクティブにするには、objectIDで1234と2345を選択せず、3456を選択する必要があることを示しています。objectID_n1234_n1233
y1234_y1233とは異なり、nが使用されている場合、条件は常に「and」であるため、このオブジェクトをアクティブにするために1234および1233を選択できないことを意味します。
不明な点がある場合は、お気軽に詳しい情報や説明をお求めください。依存関係が混乱しやすいので、これをできるだけ明確に説明しようとしています。ステートメントの長さに制限がないため、ステートメントの可能なすべての組み合わせをリストしませんでしたが、オブジェクトIDを持つより長いまたは複数の「or」および「and」条件で構成されています。
何が起こっているかの全体像:
objectIDのツリービューがあります。1つのオブジェクトを選択するときは、競合するオブジェクトを非アクティブ化して、または現在選択可能なオブジェクトをアクティブ化する必要があります。
依存関係の目的:
依存関係は2つの質問に答える必要があります...
1:このオブジェクトをアクティブにするには、どのオブジェクトを選択できませんか?
2:このオブジェクトをアクティブにするには、どのオブジェクトを選択する必要がありますか?
私の質問/問題:
このデータは非常に壊れやすく、オブジェクトが相互に依存して両方のオブジェクトを非アクティブ化し、どちらも選択できない場合があります。
例:
ID1234_y2345
ID2345_y1234
これにより、要件(依存関係)が満たされていないため、開始時に両方が非アクティブ化されるため、1234も2345もアクティブになりません。
依存関係を表す構文や形式を変更できるアイデアがあれば、それを実行できます。複雑さや問題を引き起こすことなく、要件に適合する別の方法を見つけられませんでした。
最終的に、私はこれにアプローチし、機能するソリューションを考え出すことができる方法を探しています。私はしばらくの間ソリューションを実装しようとしてきましたが、これまでのところすべての試みが失敗しました。私はさまざまな再帰的および非再帰的なソリューションを試しました。私は間違っているかもしれませんが、私は基本的にここでコンピューターに自分自身を考えさせようとしているので、これはニューラルネットワークができることだとほとんど感じています。
私は必要なすべてのリストから始めて、リストを満たすソリューションを実装しようとしていますが、リストに追加していくと、さらに多くの問題が見つかり、すべての可能性をカバーすることはできません。おそらく私はまだ発見していません。全体的に、私は時々非アクティブ化して正しくアクティブ化することができましたが、それは常に信頼できるわけではなく、そうする必要があります。
現在のロジック
ツリーでは、同じタイプのコンポーネントが同じ2つの先頭文字を共有しているため、1234、1233、および1245がグループに含まれ、ユーザーが1234を選択した場合、グループをラジオボタンのように扱います。したがって、選択したコンポーネントを追跡するリストに1234が追加され、無効になっているコンポーネントの別のリストに1233,1245が追加されます。次に、各コンポーネントをチェックし、要件が満たされているかどうかに応じて、ツリー全体が無効または有効になっていることを確認して、ツリー全体を更新します。ただし、チェック中に別のコンポーネントを無効にする必要がある場合は、現在、ツリーをもう一度チェックします。これは、しばらくの間実行し続ける可能性があるため、ひどく非効率的です。再帰の方がうまくいくかもしれないと思いましたが、デバッグが非常に難しく、問題が多すぎるという混乱が生じました。
コンポーネントのリストを確認する場合でも、再帰が方法だと思います。コンポーネントを選択するときに、使用できない他のコンポーネントを無効にしてから、無効にしたコンポーネントを確認してから、無効にしたコンポーネントが原因で無効になっているコンポーネントを確認する必要があるためです。無効など...
例:1234を無効にし、1890が1234を必要とする場合、1890を無効にします。しかし、1770は1890を必要としたため、1770を無効にします。次に1770が必要な場合は、それを無効にする必要があります。
すべてのヘルプと提案をいただければ幸いです。
machine-learning - 進化的計算は強化学習の方法になり得ますか?
進化的計算とは何ですか?強化学習の方法ですか?または、機械学習の別の方法ですか?または多分なし?
この質問に答えるために使用された参考文献を引用してください。
matrix - CMA-ES (ミュー、ラムダ) または (ミュー + ラムダ) ですか?
共分散行列の適応 - 進化戦略に必要な基本コンポーネントは知っていますが、選択された子 (ラムダ) が親母集団 (mu) を置き換えるか、それに追加されるかを明示的に述べている場所を見つけることができないようです。
この違いは、集団が局所最適に行き詰まって収束するかどうか、または局所最適から抜け出して大域的最適を見つけることができるかどうかについて、進化計算に大きな違いをもたらすことを私は知っています。この難題を解決するための助けは大歓迎です。
php - 値を組み合わせて100個の束を作成します
次の値を持つ配列が1つあるとします。
今私が欲しいのは、100個または100個近くの束を作成し、100個(または100個近く)のセットごとに個別のラウンドを作成する必要があることです。
言う
では、どうすればこれを達成できますか?
これに関して私が研究できるアルゴリズムはありますか?
matlab - 進化的アルゴリズムの優れた単純なテスト関数はどこにありますか?
私は進化的アルゴリズム (GA、PSO、...) の学習を開始しました。それらを Matlab に実装し、さまざまなパラメーターを使用して、アルゴリズムの構造とその仕組みを把握したいと考えています。
私の問題は、使用する単純なテスト関数がいくつかないことです。たとえば、複数のピーク/谷、1 つのグローバル最小値、および複数のローカル最小値を持つ関数など.... 複雑なことは何もなく、数式を使用したいくつかの単純な数学関数だけです。
いくつかのsin/cos/expを組み合わせて補おうとすることはできますが、時間がかかり、本当にもどかしいです!
これらがリストされているリソース(サイト、本など)を知っている人はいますか?
algorithm - コーススケジューリングアルゴリズム: DFS またはグラフの色付けの使用が推奨されないのはなぜですか?
時間枠と部屋を効率的に割り当てることができるコース時間割ソフトウェアを開発する必要があります。これは、入学後ベースではなく、カリキュラム ベースのルーチンです。また、効率的とは、スタッフの時間の好みに応じてクラスが割り当てられることを意味し、2 年生が合格できなかったコースを再受講できるように、1 年生と 2 年生のクラスの重複を最小限に抑える必要もあります (3 年生と 4 年生のペアも同様です)。 .
さて、最初は簡単な問題だと思っていましたが、今は違うようです。私が調べた論文のほとんどは、遺伝的アルゴリズム/PSO/シミュレーテッド アニーリングまたはこれらのタイプのアルゴリズムを使用しています。そして、私はまだ問題をGAの問題に解釈できません。私が混乱しているのは、DFSまたはグラフカラーリングアルゴリズムを提案する人がほとんどいないのはなぜですか?
DFS/graph-coloring が使用されている場合、誰かがシナリオを説明できますか? または、それらが提案または試行されない理由。
genetic-algorithm - 集団内効果について何か知っている人はいますか?
私が行っているプロジェクトでは、人口内効果を持つ非同期セルラー EA を構築する予定です。この最後の部分 (集団内効果) が私の質問の内容です。
集団内効果とは、細胞内の個体の適応度が、隣接する細胞内の個体の働きに依存するということです。これは、隣接セルの適合性に依存していることを意味するのではなく、それらの機能のみに依存していることを意味します。
したがって、細胞内の個体が進化によってそのパラメータを変更すると、その適合度はたとえば改善される可能性があります。個人の内部変化は、隣接セル内の個人の適応度に正の影響を与えるか、負の影響を与えるか、またはまったく影響を与えない可能性があります。同様に、ある個体の適応度が低下すると、隣接するセルの個体の適応度も改善、低下、またはまったく変化しない可能性があります。
隣人間の伝播効果について話しているのではないことに注意してください。細胞内の個体は隣人と交配することができ、その交配システムを通じて、隣人はすでにお互いに影響を及ぼしています。ただし、この場合、私は既存の個人について具体的に話しているため、近隣の個人がパラメーターを変更した場合、再テストする必要があります。
ある個体の 1 つのパラメーターを変更すると、隣接する個体の動作が変わる可能性があるため、これは個体のテストを決して終了しないという効果があります。ただし、本番環境では継続的に自己学習システムになるため、これは問題ではありません。
ここで私の質問が来ます: 私は細胞 EA についてたくさん読んだことがありますが、これらの集団内効果については何も見つけられません。この「人口内」というのはもちろん自分で考えた言葉なので、正しいものを探しているのかどうかもわかりません。
これらの集団内効果について何か知っている人はいますか? それは EA に関する文献に存在しますか、それともまったく新しいものでしょうか? すべてのヒントは大歓迎です!
genetic-algorithm - ニッチングスキームとは?
現在、制約付き最適化問題での GA の使用に関する論文を読んでいます。ある部分では、個体 (または個体が作るパレート フロント) にニッチ スキームを適用することについて話しています。
典型的な選択スキームのように思えますが、検索したところ、適切な説明が見つかりませんでした。
ニッチングスキームとは何か、できるだけ簡単に説明してもらえますか?
algorithm - アルゴリズム: m 枚の勝ちカードと n 枚の負けカードでカードゲームの利益を最大化する
カジノ (C) には、1 人のプレイヤーと 1 人のディーラーのみが関与するゲームがあるとします。ゲームは m+n 枚のカードで行われ、m 枚は勝ちのカード、'n' 枚は負けたカードとしてマークされます。
ゲームに関するルール/情報:
- プレーヤーは、すべての段階で、勝ったカードの数「m」と負けたカードの数「n」を知っています。
- プレイヤーは「X」の金額でプレイを開始し、すべてのカードが引き出されるまでプレイします。
- ディーラーは非常に頭が良く、プレーヤーがテーブルに置いた賭けに基づいて、勝ちのカードまたは負けたカードを引く力を持っています。
- ドローごとにいずれかのカテゴリのカードの数が減ります。つまり、勝ったカードが引かれた場合、勝ったカードの数は「m-1」になり、その逆も同様です。
- プレーヤーは「0」の金額を賭けることもできます。
プレーヤーが「W」の金額を賭け、勝利カードが引かれた場合。プレーヤーは見返りに 2W を受け取り、それ以外の場合は賭け金を失います
質問 : プレーヤーが利益を最大化するために従うべきアルゴリズムまたは戦略を導き出します。
いくつかの例 :
テストケース - 1:
プレイヤーは、ディーラーが何を賭けても負けるしかないことを知っているので、「0」の金額を賭けます。したがって、彼が作成できる最大値は X です。
テストケース - 2:
プレーヤーは、ディーラーが唯一のカード、つまり勝ったカードを引く以外に選択肢がないことを知っているので、彼はすべて、つまり「X」を賭けて「2X」を取り戻します。したがって、彼は 2 倍の金額でカジノから退出します。
テストケース - 3:
プレーヤーが「W」の金額を賭けたとしましょう - ディーラーが勝ったカードを引いたとしましょう: したがって、正味額 = X+W および m->0 および n->1 : したがって、この場合の最大額 X+W - ディーラーが負けたカードを引いた場合:したがって、正味の残額 = XW および m->1 および n->0 : したがって、この場合の最大額 2(XW)
プレーヤーは、2(XW)=X+W => W=X/3 の場合にのみ、利益を最大化するために「W」を選択します。
したがって、この場合、プレーヤーがウォークアウトできる最大量 = 4X/3