質問をすることでしか得られない、回答やアドバイスがある。

15分調べてもわからないことは、質問しよう!

新規登録して質問してみよう
ただいま回答率
85.48%
Keras

Kerasは、TheanoやTensorFlow/CNTK対応のラッパーライブラリです。DeepLearningの数学的部分を短いコードでネットワークとして表現することが可能。DeepLearningの最新手法を迅速に試すことができます。

Q&A

解決済

1回答

2284閲覧

強化学習の環境づくり。openAI gym、gym.core.Envを使って新しいクラスを作りたいのですが。。。

Hayato1201

総合スコア220

Keras

Kerasは、TheanoやTensorFlow/CNTK対応のラッパーライブラリです。DeepLearningの数学的部分を短いコードでネットワークとして表現することが可能。DeepLearningの最新手法を迅速に試すことができます。

0グッド

0クリップ

投稿2018/03/15 02:36

編集2018/03/15 06:17

http://futurismo.biz/archives/6615このサイトや、https://qiita.com/inoory/items/e63ade6f21766c7c2393このサイトの様にgym.core.Envを使って新しい環境を作り、keras-rlで学習させたいのですが、いくつか質問させてください。

全て同じ大きさの箱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している値は同じでも無駄にステップ数を稼いでしまいます。これは問題になりますかね・・・?

気になる質問をクリップする

クリップした質問は、後からいつでもMYページで確認できます。

またクリップした質問に回答があった際、通知やメールを受け取ることができます。

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

guest

回答1

0

ベストアンサー

選ぶ時に設定することは、クラスを自作しないとできないようです。
ただ、stepのところで実装はできます。
全体のサイズに比べて、選択できるものが少ない場合、無駄にステップ数を稼いでしまいます。

報酬は値を保持できます。
それをいつ学習に反映するのかの問題になります。
強化学習の文脈であれば、できるはずですが、正当化するための理由とライブラリの機能と相談する必要があります。
カスタマイズするとなると結構大変そうです。

投稿2018/03/15 05:51

mkgrei

総合スコア8560

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

Hayato1201

2018/03/15 06:17

回答ありがとうございました!追記させていただいたのですが、お時間がある時にお答えいただけると幸いです。。。
mkgrei

2018/03/15 06:32

>例えば、stepにアクションとして5が選ばれ、5が空だったとします。 return np.array([self._pos, self._vel]), reward, done, {} 何も変更せずにリターンすれば良いです。 報酬を負にすることも考えられます。 self._pos = max(-1.0, min(self._pos, 1.0)) 例えば元の問題でも空間は[-1,1]に閉じているので、-1にいる時に-0.1に進もうとしてもそれ以上は動けません。 それと同じことをしているイメージです。 [分割]
mkgrei

2018/03/15 06:43

[続き] 従来の1エピソードを1ステップにするイメージですか? 具体的な問題を把握していないのではっきりとしたことは言えませんが、ライブラリをそのまま使って実装できない可能性はあります。 問題の読み替えとして、 「箱Aが満杯になる」ことがければ正の報酬を少し与える、 他に選択肢があるのに「何もしない」を選ぶと負の報酬を与える、 などが考えられますが… 無駄にステップを稼いだとしても報酬を0にすることでなかったことにできます。(逓減がなければ) 極端な例で、100の選択肢の内1つしか選べない場合、それにピンポイントの乱数を引くのに回数が必要なので、エピソード回数の上限を設けることが難しくなります。
Hayato1201

2018/03/16 00:19

>それと同じことをしているイメージ なるほど!そう言われるとそうですね!理解しました。 >従来の1エピソードを1ステップにするイメージ 今回箱と物で示しましたが実際はジョブのスケジュールの様な事を想定しています。ここで箱Bは待ち行列の様な物で、そこに入っていくジョブ(物)が全て箱Aで処理されれば1エピソードとなる事を想定しています。なのでイメージとしてはいくつかのアクションをまとめて一つのアクションにしたいという事なのですが、確かにここでも報酬を0にするなどの方法でいけそうですね!
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

15分調べてもわからないことは
teratailで質問しよう!

ただいまの回答率
85.48%

質問をまとめることで
思考を整理して素早く解決

テンプレート機能で
簡単に質問をまとめる

質問する

関連した質問