Q深層学習アルゴリズムを実装しようとしましたが、問題はありません。100000回のゲームプレイと1000回の繰り返しで各ステップを練習しました(ただし、 )それはまだ学んでいない。ネットワークとゲームはここで、リンクされた画像にhttp://imgur.com/a/hATfBある各トレーニング段階で何が起こるかです:バックプロパゲーションのためのQ深い学習アルゴリズムがうまく動作しない
double maxQval;
double[] inputvec;
int MaxQ = GetRandDir(state, out maxQval, out inputvec);//input vec is board
double[] QtarVec = new double[] { 0, 0, 0, 0 };
double r = GetR((int)state[0], (int)state[1]); // GetR is reward
QtarVec[MaxQ] = Qtar(r, maxQval); // backprop vector of 0's except Qtar replaces a value
associator.Train(50, new double[][] { inputvec }, new double[][] { QtarVec });
トレーニングデータの組が(私は画像にリンクされた入力、QTarget = R +ガンマ* MAXQ)で、MAXQです最大ネットワーク出力層の活性化またはランダムなもの(イプシロングリーディ)。 rは各移動から得られた報酬であり、-10は障害物であり、10は目標である。 (私はちょうど10の目標のためにと0他のすべてのために試してみましたalthogh。ここでトレーニングコードである。
public void Train(int nTrails)
{
double[] state = new double[] { 1, 1 }; // inital position
int its = 0;
for (int i = 0; i < nTrails; i++)
{
while (((state[0] < 4) && (state[1] < 4))&&((state[0] * 100 >0) && (state[1] * 100 >0)) && (state[0] != 3 && state[1] != 3))//while on board and not at goal postion
{
double temp = r.NextDouble();
int next = -1;
lines.Add(new Vector2((float)(state[0] * 100), (float)(state[1] * 100)));
if (temp < epsilon)
{
next = TrainRandIt(state); // move random direction, backprop
}
else
{
next = TrainMaxIt(state); // move in max activation direction, backprop
}
if (next == 0) .//updating postion
{
state[0]++;
}
else if (next == 1)
{
state[0]--;
}
else if (next == 2)
{
state[1]++;
}
else if (next == 3)
{
state[1]--;
}
}
}
state[0] = 1;
state[1] = 1; // resetting game
}
すべてのヘルプは高く評価した。
インデントは、コードを読みやすくします。 –
ありがとう –