DeepX-inc / machina

Control section: Deep Reinforcement Learning framework
MIT License
279 stars 43 forks source link

CEMDeterminsticsSAVFunc doesn't support gym.spaces.Discrete #242

Open yumion opened 5 years ago

yumion commented 5 years ago

exampleにある run_qtopt.py をPendulum-v0以外で実行しようとしたのですが、 action_spaceがBoxでないとCEMDeterminsticsSAVFuncでエラーが起こります。

 | observation space: Box(4,)
 | action space: Discrete(2)
Traceback (most recent call last):
  File "run_qtopt.py", line 125, in <module>
    multivari=args.multivari, data_parallel=args.data_parallel, save_memory=args.save_memory) 
  File "~/.pyenv/versions/anaconda3-5.3.0/lib/python3.6/site-packages/machina/vfuncs/state_action_vfuncs/cem_state_action_vfunc.py", line 44, in __init__
    self.dim_ac = self.action_space.shape[0]
IndexError: tuple index out of range

QT-Optは離散行動には使えないのでしょうか? また、バグでしたら対処法をご教授ください。よろしくお願いします。

takerfume commented 5 years ago

@yumion Issueありがとうございます。

[使用言語に関して] machinaでは、レポジトリ全体として、英語でやり取りを行うことを前提にしております。今後は是非英語で質問してくださりますようお願いします。 本件は、こちらが質問を英語化したのち、回答も英語の説明を付け加えます。

[質問事項に関して] QT-Optは、Q-Learningを連続行動に拡張した手法なので、現状では、基本的に連続行動の環境にのみ対応していて、離散行動の環境には対応していません。 離散行動の環境を扱いたいのであれば、DQNなどの標準的なQ-Learning手法を用いる事を推奨します。

QT-Optは離散行動には使えないのでしょうか? また、バグでしたら対処法をご教授ください。よろしくお願いします。

上述したQT-Optの性質上、離散行動に対応した実装をしていなかったことがエラーの原因なので、バグではありません。 ただし、離散行動に対応させたい場合は、 Qネットワークに、状態と行動を、行動の数だけ入力して、最大のQ値となる行動を全探索して選ぶこと、対応させることが可能です。(この場合、QT-Optの主な特徴であるCEMは使われません)

ただし、DQNのように行動の数だけヘッドがあるQネットワークを用いる手法と比べて、性能がいいかどうか判断はできません。(DQNに関しては今後実装する予定です。)

現状machinaに実装済みのアルゴリズムで、離散行動に対応しているものは、PPOやTRPOになっています。