Gymのサンプルコードをちょっといじった。GymのHPに載ってるCartPoleゲームのサンプルコードをいじりながら、仕組みを学んでいく。https://gym.openai.com/docsCartPole-v0のサンプルコード(test06.py)はこちら。前回8行目まで見たので、今回は9行目。env.step()にactionを放り込むと、戻り値としていろいろ返ってきている。actionは7行目でランダムな値を生成しているので、ランダムに選択されたacttion(例えば右)を放り込んでいるわけだ。このstep関数はcore.pyのEnvクラスに記載されている。infoこの関数内に書かれている解説をまとめると以下。(1)環境を1step進める。episodeの終わりに達すれば、reset()を自動的に呼び出す。(2)引数としてactionオブジェクトをとり、戻り値としてobservation、reward、done、infoを含むタプルを返す。(3)doneはboolean型でepisodeが終わったか否かを保持。(4)infoはdictionary型でデバッグ情報など予備の診断情報を保持。次にstep関数の中身を見ていく。2行目のmonitorはよくわからんが、画面への出力関係か?3行目は_stepにactionを放り込んで、4つの情報が返ってきている。4行目も画面への出力関係か?5行目で4つの値を返す。重要なのは3行目の_step関数。NotImplementedErrorとある。次に9行目以降のif文。先ほど見たようにdoneはepisodeが終了すればTRUEを返す。よって、このif文はepisodeが終了した時に「〜timestepsで終了しましたよ」と出力するもの。rewardも出力する次にrewardがどんな値なのか、出力して確かめてみる。test06.pyの9行目と10行目の間に以下を追加する。"),print(reward)出力はこんな感じ。1.0報酬はずっと1.0となっている。基準がよくわからんが、poleが倒れなかったら毎時刻1.0もらえるのだろうか?observationにもとづいてactionを操作する実装の中心は、我々が受け取ったobservationに対してどのようなactionを返すか、という部分だろう。test06.pyのコードでは、9行目でobservationを受け取っているにも関わらず、それとは関係なく8行目でランダムなactionを渡している。そこで、以下のようにobsevationの値を処理し、それをactionに反映させてみる。print(total_reward_sum)トータルな報酬の出力をepisode終了時のみでなく、maxの100timestep終了時にも設定したのは、このアルゴリズムが良すぎて、棒が倒れること無く毎回ほぼmaxまで達するため。実際、episode20回分のトータル報酬は以下のようになった。100]何も考えずに作ったのに、素晴らしいね!ちなみにactionを右と左入れ替えた結果が以下。9]めっちゃ早く倒れている。いうか倒れるのを助長させてるね。大政@masataka46株式会社ウェブファーマー代表。人工知能のコンサルティング。2006年に株式投資を始め、8年で資産を75倍にする。upLoginユーザーは見つかりませんでした。