全て同じ大きさの箱Aと箱B1B10まであるとします。箱B1B10の中に次々に入ってくる物を箱Aに移していく様な環境なのですが、ここで、Action としてはB1B10のうち物が入っている箱を選んでそれをAに移す、もしくは何もしない、というものになります。つまりAction spaceは「箱110を選ぶ」と「何もしない」の11、
Python
1gym.spaces.Discrete(11)
になります。しかしここで質問ですが、箱に物が入っていない場合はその箱をそもそも選べない様にしたいのですがそれはどうすれば良いでしょうか?ようは、Action spaceは11だけど9と10の箱には何もないから選べないよ、みたいな設定は可能でしょうか?
さらに、これを、「箱を一つ選んで物をAに移す」までが一つのタイムステップでは無く、何回か「箱を一つ選んで物をAに移す」を繰り返し、「箱Aが満杯になる」、もしくは、「何もしない」を選んだ時にタイムステップ終了として報酬が計算される様にしたいです。これは可能でしょうか?
ちなみにこの環境では一定の時間がたつと箱Aに入れられた物は消えていくので、Aにはどんどん物を入れていけます。しかし大きい物を箱Aに突っ込んでしまうとしばらく他の物が入れられなくなるのでBの箱たちの方に物が溜まっていってしまいます。そこでうまい具合に箱Bの物をAに入れていき、Bの方にたまってしまわなければ報酬は高くなります。
長くなってしましたが、質問は、
0. Action spaceからactionを選ぶ時に、状況によって選べないという設定ができるか
0. いくつかのActionをした後にそれらの行動にまとめて報酬を与えることは可能か
という事です!長々と申し訳ありませんがよろしくお願いいたします。
ーーーーーーーーーーーーーーーーーーーーーーーーーーーーーーーーー
追記です。
クラスを自作というのはどこのクラスを作り変えれば良いのでしょうか?また、step関数での実装というと、
例えば、stepにアクションとして5が選ばれ、5が空だったとします。そうしたら空では無い箱か「何もしない」を選ばせるまでstep内でactionを変化させるということでしょうか?しかしそうするとAgentとしては5を選んでいるのに実際は違うアクションを選んでいることになり、学習がうまくいかない気がします。
また、二つ目の質問に対してですが、step内で「箱Aが満杯になる」、もしくは、「何もしない」が選ばれるまで、報酬としてreturnされるのは0として、実際の値は保存しておき、以上二つの条件に当てはまった時そのまで保存されていた報酬の合計をreturnする様にするという事ですか?
実はある論文の実装をしたいのですが、それの記述だと「箱Aが満杯になる」、もしくは、「何もしない」が選ばれるとそこまでで一つのタイムステップとなると書かれていました。以上の様に行うとreturnしている値は同じでも無駄にステップ数を稼いでしまいます。これは問題になりますかね・・・?
回答1件
あなたの回答
tips
プレビュー
バッドをするには、ログインかつ
こちらの条件を満たす必要があります。
2018/03/15 06:17
2018/03/15 06:32
2018/03/15 06:43
2018/03/16 00:19