問題タブ [genetic-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.
algorithm - 「遺伝的AIの改善」にはどのアルゴリズムを使用すればよいですか
まず第一に、これは、プログラムで Five in a Row を再生する方法に関する問題ではありません。そこに行って、それをしました。
導入説明
私は、遺伝的に改善する AI を実験するためのフレームワークとして、5 列連続ゲームを作成しました (ああ、それはひどく大げさなように聞こえます)。ほとんどのターンベースのゲームと同様に、可能なすべての動きにスコアを割り当て、最高スコアの動きをプレイすることによって、最良の動きが決定されます。スコアを移動 (正方形) に割り当てる関数は次のようになります。
マスにすでにトークンがある場合、そのマスに新しいトークンを配置することは違法であるため、スコアは 0 です。
各正方形は、最大 20 の異なる勝利行 (横 5 行、縦 5 行、斜め 10 行) の一部になることができます。正方形のスコアは、これらの各行のスコアの合計です。
行のスコアは、その行に既にある味方トークンと敵トークンの数によって異なります。例:
- 味方のトークンが 4 つ並んでいる行には無限のスコアが必要です。これは、そこにトークンを配置するとゲームに勝つためです。
- 4 つの敵トークンがある行のスコアは非常に高くなるはずです。なぜなら、そこにトークンを置かないと、対戦相手は次のターンに勝つからです。
- 味方トークンと敵トークンの両方を含む列はスコア 0 になります。これは、この列が勝利列の一部になることは決してないためです。
このアルゴリズムを考慮して、TBrain という型を宣言しました。
配列内の値は、味方トークンが N 個で敵トークンが 0 個の行、または味方トークンが 0 個で敵トークンが N 個の行のスコアを示します。行に 5 つのトークンがある場合、行がいっぱいであるため、スコアはありません。
実際、どの値を配列に入れるかを決定するのは非常に簡単です。Brain[0,4] (4 つの友好的なトークン) は「無限」である必要があります。これを 1.000.000 と呼びましょう。vBrain[1,4] は非常に高くする必要がありますが、脳が自分自身に勝つよりも敵の勝利をいくつかブロックすることを好むほど高くしてはいけません
次の (ありそうもない) ボードを考えてみましょう:
プレーヤー 2 はトークンを (9,4) に配置し、(4,4) ではなく、ゲームに勝つ必要があります。ただし、プレーヤー 1 の 8 つの潜在的な勝利行をブロックします。したがって、vBrain[1,4] は (vBrain である必要があります) [0,4]/8)-1. このように作業すると、「脳」の最適値を見つけることができますが、これは私が興味を持っていることではありません。最適な値を見つけるアルゴリズムが必要です。
私はこのフレームワークを完全に決定論的に実装しました。スコアに追加されるランダムな値はなく、複数の正方形が同じスコアを持つ場合、左上が選択されます。
実際の問題
紹介はここまでで、次は興味深い部分です (少なくとも私にとっては)。
vBrain1 と vBrain2 という 2 つの「頭脳」があります。これらを繰り返し改善するにはどうすればよいですか?私はこのようなものを想像します:
- vBrain1 と vBrain2 をランダムな値で初期化します。
- それらの間のゲームをシミュレートします。
- 勝者から敗者に値を割り当て、そのうちの 1 つをランダムにわずかに変更します。
これはうまくいかないようです。脳は賢くなることはありません。なんで?
同じ 2 つの頭脳間の 2 つのゲームが異なるように、score-method は結果にいくつかの小さなランダム値を追加する必要がありますか? 反復ごとに値をどのくらい変更する必要がありますか? 「脳」をどのように初期化する必要がありますか? 定数値で?ランダムな値で?
また、これはAI や遺伝的アルゴリズムと関係がありますか?
PS: 質問は Five in a Row とは何の関係もありません。これを選んだのは、非常に単純な "Brain" を実験用に宣言できるからです。
neural-network - ニンテンドーDSとニューラルネットワーク
DS のハードウェアは、遺伝的アルゴリズムを使用したフィードフォワード ニューラル ネットワークを利用するゲームを実行できるかどうか疑問に思っていました。これは自作ゲームや nn と ga の実装に関係していることは知っていますが、興味があります...
(DSのARMがどう使われているかなどなど、私は何も知りません)
前もって感謝します :-)
algorithm - 遺伝的アルゴリズム/遺伝的プログラミング ソリューションの良い例は何ですか?
遺伝的アルゴリズム(GA) と遺伝的プログラミング(GP) は興味深い研究分野です。
GA/GP を使用して解決した具体的な問題と、独自のライブラリ/フレームワークを作成しなかった場合に使用したライブラリ/フレームワークについて知りたいです。
質問:
- GA/GP を使用してどのような問題を解決しましたか?
- どのライブラリ/フレームワークを使用しましたか?
私は直接の経験を探しているので、そうでない限り答えないでください.
c# - TSPの遺伝的アルゴリズムにおけるクロスオーバー操作
遺伝的アルゴリズムで巡回セールスマン問題(TSP)を解決しようとしています。私のゲノムは、グラフ内の頂点の順列です(セールスマンのパス)。
ゲノムに対してクロスオーバー操作をどのように実行する必要がありますか?
問題の実装はC#のどこにありますか?
java - Java で書かれた GA
私は、本「ゲーム プログラマーのための AI テクニック」から取り上げたテクニックに基づいて、遺伝的アルゴリズムを書こうとしています。 2 次元配列でプログラム内でランダムに生成されます。
私は最近、疑似コードに出くわし、それを実装しようとしましたが、実行する必要があることの詳細に関していくつかの問題に遭遇しました。私は多くの本といくつかのオープンソース コードをチェックしましたが、まだ進歩するのに苦労しています。人口の合計適合度の合計を取得し、合計とゼロの間の乱数を選択し、その数が親よりも大きい場合はそれを上書きする必要があることを理解していますが、これらのアイデアの実装に苦労しています.
私のJavaは錆びているので、これらのアイデアの実装に助けがあれば大歓迎です。
matlab - MATLAB-関数ハンドルパラメータをハンドルとして別の関数に渡す
遺伝的アルゴリズム(たくさんの頭痛、たくさんの楽しみ)を含む課題に取り組んでいます。それらの結果を比較するために、さまざまなクロスオーバー方法とさまざまな突然変異方法をテストできる必要があります(コースのために書かなければならない論文の一部)。そのため、関数ハンドルとして、関数名をRepopulateメソッドに渡すだけです。
ここでの重要なポイントは、3、パラメーター3のようなものです。mutationMethodを別のレベルに渡すにはどうすればよいですか?@記号を使用すると、次のように表示されます。
@記号を使用しない場合、mutationMethodがパラメーターなしで呼び出され、非常に不幸になります。
はい、コードを書き直して別の動作をさせることができることは承知していますが、実際に動作させる方法に興味があります。
どんな助けでも大歓迎です。
c++ - 遺伝的アルゴリズムを使用して線形方程式を解く方法は?
遺伝的アルゴリズムを使用して、n 個の変数を含む n 個の線形方程式系を解きたいと考えています。
ソリューションが浮動小数点値で構成されている可能性があるため、クロスオーバー操作を定義するのが困難です。続行するにはどうすればよいですか?可能に思えますが、遺伝的アルゴリズムとの出会いはこれが初めてです。
解決する必要があるとします
答えは x = 1/2 で y = 1/4 です。
問題をどのようにモデル化しますか?
更新: 論文http://www.masaumnet.com/archives/mjbas/volume1/issue2/mjbas010205.pdfから何かを解読できるかどうかを確認してください。
c++ - 浮動小数点数でビット演算を実行する方法
私はこれを試しました:
&
のオペランドをfloat型にすることはできないというコンパイラエラーが発生します。
私がする時:
プログラムを実行します。唯一のことは、ビット単位の演算が、四捨五入後に取得された数値の整数表現に対して実行されることです。
以下も許可されていません。
なぜキャストできるのかわかりませんint
が、キャストできvoid*
ませんfloat
。
Stack Overflowの質問で説明されている問題を解決するためにこれを行っています。遺伝的アルゴリズムを使用して線形方程式を解く方法は?。
language-agnostic - Q学習の改善
私は現在、Qラーニングを使用して、壁や障害物でいっぱいの部屋で移動する方法をボットに教えようとしています。部屋の任意の場所から開始して、目標の状態に到達する必要があります(たとえば、ドアのあるタイルなど)。現在、別の牌に移動したい場合はその牌に移動しますが、将来的にはその代わりに別の牌に移動する可能性をランダムに追加する可能性があると考えていました。上下左右にしか動かせません。目標状態に到達すると+100が得られ、残りのアクションは0になります。
私はここにあるアルゴリズムを使用しています。これは次の画像で見ることができます。
さて、これに関して、私はいくつかの質問があります:
- ニューラルネットワークに少し似たQラーニングを使用する場合、学習フェーズと使用フェーズを区別する必要がありますか?つまり、最初の写真で彼らが示したのは学習用のものであり、2番目の写真では使用用のものであるようです。
- 最適なQ値の表に到達するには、無限のステップが必要であるとどこかで読みました。本当?それは真実ではないと思いますが、私はここで何かが欠けているに違いありません。
TD(Temporal Differences)についても聞いたことがありますが、これは次の式で表されているようです。
alpha = 1の場合、これは写真の最初に示されているように見えます。ここで、そのガンマはどのような違いをもたらしますか?
- 非常に大きな部屋(たとえば、300x200ピクセル)を試してみると、いくつかの問題が発生しました。基本的にランダムに実行されるため、部屋が非常に大きい場合、最初の状態からゴール状態にランダムに移動するのに多くの時間がかかります。それをスピードアップするためにどのような方法を使用できますか?そのエピソードで私が持っているものがすでにその状態にあるかどうかに関して、私はおそらく真と偽で満たされたテーブルを持っていると思いました。はいの場合は破棄し、いいえの場合はそこに行きます。私がすでにこれらすべての州にいた場合、私はランダムな州に行きます。このように、私が現在行っているよりも少ない頻度で状態を繰り返すことを知っているので、それは私が今していることと同じようになります。
- Q-Valueのルックアップテーブル以外のものを試したいので、このためにバックプロパゲーションでニューラルネットワークを使用することを考えていました。アクション(上、下、左、右)ごとにニューラルネットワークを使用してみます。これが最良の結果をもたらすと思われるためです。良いQ値関数近似を与えるために使用および実装できる他の方法(SVM以外に、自分で実装するのは非常に難しいようです)はありますか?
- 遺伝的アルゴリズムは、Q値マトリックスを基礎として使用して、この状況で良い結果をもたらすと思いますか?適応度関数をテストするにはどうすればよいですか?GAは一般的にもっとランダム/複雑なものに使用されているという印象を私に与えます。注意深く見ると、Q値は明確な傾向をたどっています。つまり、目標の近くではQ値が高く、目標から離れているほどQ値は低くなります。GAによってその結論に到達しようとすると、おそらく時間がかかりすぎるでしょうか。
c++ - ジェットコースターの軌跡をたどる単純なゲームに遺伝的アルゴリズムを適用するにはどうすればよいでしょうか?
学校の最終課題で何をするかは自由です。現在、カメラがジェットコースターのレールをたどっているだけの単純な direct-x ゲームを変更することに関してです。私は遺伝的アルゴリズムに興味を持っており、この機会に遺伝的アルゴリズムを適用し、それらについて何か学びたいと思っています. ただし、この場合に適用できる方法は考えられません。利用可能なオプションにはどのようなものがありますか?