open ai gym[atari]をwindowsでも使えるようにしようじぇ??
なんかopen ai gym[atari]をwindows環境で
pip install gym[atari]
しようとしたらインストールできなかったので
ビルドする方法をいろいろ調べてやってみたのでここに書き記しておきのじぇ
ちなみにbash on windowsとか vcXsrv とか使うのはめんどくさいのでそれを使わない方法なのじぇ(MSYS2は使ってる)
まあこのQuitaの方法のそのまんまなのでこれ読めばわかるって人はこれ読んでくれだじぇ
qiita.com
github.com
このissueの
この投稿に注目なのじぇ
github.com
どうやらこれをつかえばいいらしいのじぇ?
pip install -U git+https://github.com/Kojoley/atari-py.git
まりちゃのPCにはすでにMSYS2環境はすでにあってそこにpathも通っていたので
Visualstudio 2015のC++ビルドツールさえ用意すれば うまくいったのじぇ
(このソースは
github.comより
)
うむ!ちゃんと動いてるみたいなのじぇ!
早く公式で対応して..(懇願)
カオスについて
暇なのでカオスについてかたろうじぇ?
いきなりね
カオスの定義はいろいろあるけれどたぶん「初期値俊敏性を持っていて決定論的であるもののこと」なのじぇ
この図でいう
を持つものなのじぇ
予想しようとする努力を微塵も感じない。 pic.twitter.com/Gu1eWI301o
— 土田善紀 (@tsuchidasama) 2017年8月1日
昔流れてきたこのツイートも大まかに言ってカオスなのじぇ。
はぇ~~~
2次元調和振動子の場合を考えてみようじぇ。
これがハミルトニアンなのじぇ
見ての通りこの場合ハミルトニアンはx方向のものとy方向のものに分離できるのじぇ。
そしてこれら
xについて見てみるとこれは位相空間的に周期的なのじぇ。
そしてもちろんyについても周期的なのじぇ。
xについても周期的そしてyについても周期的ということはこれは位相空間上でトーラスになるのじぇ。
ここでさっきの方法をちょっとだけ変えてトーラスであることを示すのじぇ。
(1)のハミルトニアンの力学変数を作用変数
と角変数
に正準変換してみようじぇ。
まあ難しいことしなくてもここでは調和振動子なので作用変数は
縦軸
横軸
の楕円になるので
楕円の面積の公式
を用いれば
このように計算でき、ハミルトニアンは
このように書き直せるのじぇ。
ここで
であるので{Ji}は保存されるのじぇ。
これによってさっきの話と同じようにトーラスになることが分かったのじぇ。
今度はこれに非加積分摂動を与えた場合を考えようじぇ。
非加積分摂動はフーリエ展開の形で与えるのじぇ。
ここで母関数を
として 新しい作用、各変数
を導入した正準変換を考えると
なので(2)をJ'iの周辺でテーラー展開したものは,
になるのじぇ。
。もし摂動が小さく任意のm,nに対して
が成立するのであれば、
のようにgを選ぶことでテーラー展開のεの一次の項を消すことができるのじぇ。
もし
が有理数の場合は分母を発散させるm,nの選び方ができてしまうのでg関数は決まらないけれど、
有理数の数は無理数の数に比べてとても少ないのでそれは無視できると考えられるらしいのじぇ。
この手続きをεの高次の項に対しても繰り返すことで高次の項を消去でき、
ハミルトニアンは結局
となり、元のトーラスは変形して新しいトーラスができるのじぇ。
これを Kolmogorov-Arnold-Moser(KAM) トーラスというらしいのじぇ。
gをどう選ぶかの話のにいろいろ疑問を持つ人は多いと思うけれどそこはかなり難しい数学の議論でKolmogorov-Arnold-Moserの論文に詳しく書かれているらしいのじぇ。
。もし摂動が大きくなってくると、
となり、
となる母関数を得ることができず、εの一時の項を消せないためトーラスは崩壊するのじぇ。これがカオスの発生なのじぇ。
ところでなぜ母関数が
を満足しなければならないのかはまりちゃにはわからないのじぇ(詳しい人いたら教えてください。)
本の内容をブログに書いてみればよくわかるんじゃないかと思ったけれど
大事で気になるところがはしょられているのでいまいちよくわからんって感じなのじぇ
トーラスが崩壊してカオスがどのように作り出されるか
ポアンカレマップ、面積保存写像、孤立固定点についてkicked rotator modelの図を交えた話はまた今度気が向いたらなのじぇ
~~~~追記~~~~
KAMトーラスなんて現実世界に現れるのかと思うかもしれないけど
うちの教授によるとなんと土星の環がKAMトーラスらしいのじぇ
土星の太陽を回る周期と,土星の輪をなしている塵が土星の周りを回る周期でトーラスを形成しほかの惑星によって及ぼされる引力が微小な摂動となり
周期比が有理数比から遠いところだけが輪として残っているということらしいのじぇ
写真はここから
solarsystem.nasa.gov
■
ちょっとまりちゃ。最近全然将棋プログラム書いてないじゃない!
次の電王トーナメントのために何かしなさいよ!
一応電王トーナメントに関係することはしているのじぇ。
え?何してるの?
ゲーム作ってるのじぇ。
は?
Tower of DenOuなのじぇ。
えぇ....
せかいの まんなかにたつ とうは
でんおうに つうじている という
はるかな でんおうを ゆめみて
おおくの ものたちが
このとうの ひみつに いどんでいった
だが かれらの うんめいを
しるものはない
そして いま またひとり‥‥
魔界塔士かよ!
あの鳥はcoduck,あのうさぎはlesserpyonなのじぇ
ゲームとしてはロックマン的な感じにしたいのじぇ。
これが最初のボスうさぴょんなのじぇ。
ジャンプしながら攻撃を仕掛けてくるのじぇ
これはBonanza。3駒連携攻撃をしてくるのじぇ。
これは技巧。
いまいち仕様が決まってないのじぇ。
ゲーム開発は楽しいのじぇ。
ちなみにちょっと遊べるぐらいのクオリティになってきたので友達にテストプレイとして公開してみたけどだれも遊んでくれなかったのじぇ
この「遊んでくれてありがとう」画面を作った意味がなくなってしまったのじぇ
ざんねんね。
今の課題としては難易度調整がダメダメで技巧よりもうさぴょんのほうが強くなってしまっていること、ボリュームが足りていないこと、音楽を自作しようとしているが全然作曲ができていないことなのじぇ。
あとこういうサガフロみたいな感じのゲームつくるのも面白そうだじぇ
Boing~ #gamedev pic.twitter.com/RT8U1Ha80M
— Paper Bug Dev (@PaperBugDev) 2017年7月12日
備忘録
http://www2.computer-shogi.org/wcsc27/appeal/Apery/appeal_wcsc27.html
なんで強いソフト深い探索の評価値に今の局面の評価値を近づける学習方法使う時に静止探索の末端局面の特徴に対して更新しているのか?
静的な局面でないとあまり正確な局面評価ができない
つまり今の評価関数は静止探索をする前提である
今の評価関数では静止探索を表現できない?(手番があればある程度はできるような気がするのだけれど。しかしまあ最新の強いソフトがまだ静止探索をしてるってことはまあそういうことか。DNNほどの特徴があれば静止探索も表現できるだろうが静止探索するより遅いので論外)
静止探索を前提としているということはつまり今の評価関数には静止探索も含まれているということ?
Stockfish探索では静止探索はleaf nodeでしか呼び出されない。すべてのゲーム木内のノードで静止探索が呼び出されるわけではない。つまりleaf以外では完全な評価はできていないので前向き枝切りの精度が悪い?
この点ソースコードを見直してみると多くの前向き枝切りで静止探索をした点数を用いていたため大丈夫そう。
唯一使ってなかったのがfutility prunning。
これも静止探索した方がいいと思うがそれだとrazoringとかぶるよなとも思う。
この辺よくわからん
そして静止探索の末端局面の評価値を深い探索の値に近づけている都合上、ノードの評価値が深い探索の値に近づいているかといわれると直接的に近づいているわけではない
(しかし反復進化の考えによると一度はleaf nodeであったことがあるはずで静止探索の値がTTに格納されているはずなのでそこまで気にする必要はないのか?しかしnullwindowsearchとか枝切りとかが起こると読まれないし...)
RootStrapで静止探索をせずにRootの局面に対して値を更新する?
通常探索用の評価関数(手番付き)(rootにそのまま深い探索の値を近づける)と静止探索用の評価関数を用意する?(取り合いを読ませた後なら手番がなくても表現できるはず)(しかし取り合いがいつ終わるのかということはStandPatなどの影響で簡単にはわからない この辺がネック)
TreeStrapについて調べてみたのじぇ
https://chessprogramming.wikispaces.com/Meep
きっかけはここのページに
Algorithm Elo
Untrained 250 ± 63
TD-Leaf 1068 ± 36
RootStrap(αβ) 1362 ± 59
TreeStrap(mm) 1807 ± 32
TreeStrap(αβ) 2157 ± 31
と書かれていたので、「Tree StrapはRootStrapより強くなるのか!?そういえばtree strapやってるソフトなんて聞いたことないな!鉱脈を見つけてしまったかも!!!!」と思って詳しく知りたくなったからなのじぇ!
http://www0.cs.ucl.ac.uk/staff/d.silver/web/Applications_files/bootstrapping.pdf
論文を見つけたので読んでみたのじぇ
RootStrapはRootNodeの評価値を深い探索の結果の値に近づけるのに対してどうやらTreeStrapは探索木のノード全体を深い探索の値に近づける方法で、
αβ探索を用いる場合は探索木の多くのノードで正確な値を計算できないので代わりにそのノードにおけるalpha,beta値を利用して値を更新するということをするようだったのじぇ
ノードの評価値がαよりも小さければ評価値をαに近づけ、βよりも大きい場合は評価値をβに近づけるらしいのじぇ
確かにalpha,beta値は探索の結果出てくるものなので、正確な値がわからなければこれを用いるのはなるほどなと思ったのじぇ
しかし,探索した時の深さが8だったとするとrootnodeはdepth8の時の情報を利用できるが、ゲーム木の内部ではそれより浅いdepthにおける情報を利用するしかないのであまりよくないかとも思うのじぇ
まあこれはdepthがあまりに浅いと値を更新するのに使うのを制限するということをすれば大丈夫だと思ったし、探索に出てくる局面に対して値を更新できるので多くの局面を学習できるのでメリットがあるのではないかと思うのじぇ
しかし
論文の7ページ目の図を見ると図のnumber of training gamesが全然足りないことに気が付いたのじぇ。一万ゲームしかないのじぇ...
そしてもう少しiterationを増やせばrootstrapがtreestrapのELOを追い越しそうだったのじぇ
この辺で第四回電王トーナメントの時のことを思い出した。そういえばこのグラフ見たことがある....
そうだ...出村さんがやねさんと話していた時に出していた論文じゃん....そしてその時も「TreeStrapは胡散臭いよね~」「TreeStrapよくないかも」みたいな会話になっていた。
tree strapは鉱脈ではなかったようなのじぇ....
「探索に出てくる多くの局面に対して値を更新できるので多くの局面を学習できるメリット」についてもこのnodchipさんの一連のツイートを見ると
iは最大50億程度となります。開発者や学習条件によって最大1億~80億程度とばらつきがあります。特徴量因子は棋譜の生成条件や局面数によって異なりますが、過去に調べた結果こんな感じになりました。 pic.twitter.com/Q3FaxOquXf
— nodchip@tanuki- (@nodchip) 2017年5月26日
自己対戦ベース1…2駒の入れ替えあり・探索深さ3・評価値の絶対値の上限なし
— nodchip@tanuki- (@nodchip) 2017年5月26日
自己対戦ベース2…2駒の入れ替えなし・探索深さ3~4からランダムに選択・評価値の絶対値の上限2000
自己対戦ベース3…2駒の入れ替えあり・探索深さ3・評価値の絶対値の上限2000
RootStrapでも結構多くの特徴が出てくるのでゲーム木内部で浅い探索結果を利用してまで学習局面を増やす方法にメリットがなさそうということに気づいたのじぇ
そして何よりRoot Strapは教師データ生成と学習を別にできるので同じ教師データを用いて学習の条件調整が簡単にできるという大きなメリットがあるのじぇ
まあtree strapはお蔵入りになったが、この考え方はどこかで使えるかもしれない。
知識として引き出しの中にしまっておくことにしようじぇ?
第27回世界コンピューター将棋選手権に参加してきた。
第27回世界コンピューター将棋選手権に参加してきた。
今回はライブラリを使わずに参加しようということで前回の第4回電王トーナメントが終わった後動物将棋のエンジンを作り感覚を取り戻してから一から本将棋のプログラムを作り直した。
大会でshogi686さんからrotated bitboardはpext bitboardより高速に処理ができると教わったのでrotated bitboardを採用することにした。rotated bitboardの実装は結構大変でバグを取ったりするうちに丸一日経っていた。
bitboardには81bit必要で、飛び効きを処理するためにはこれに加えて+45,-45,90°回転(rotated)させたbitboardも必要なのだけれど,効きを遮る駒が盤の一番端っこにいる場合は一番端っこに駒がいないのと同じだけ盤上に効きを作ることができるので飛び効きの処理に必要なbitboardは81bitではなく縦横で7*9=63bit斜めで7*7=49bitあればいい。
これらは64bitに収まるので縦横斜めすべてを256bit型に格納してSIMD演算で一気に計算できると教わった。
shogi686は斜めのテーブルをどのbitに格納するとキャッシュにのりやすいかといった高速化もしていたが、私にはそこまでできない。
局面の評価は一般的な3駒関係でなく2駒関係を用いることにした。これは2コマの方が3コマよりも強いと思ったからとかそういうわけではなくて単純に2駒のほうがサイズが小さくて取り扱いやすいこと、学習に時間があまりかからないことというLazyな理由からであった。学習にはbonanza methodを使うことにした。
符号の間違いが多くてちゃんと学習させるのにはかなり手間取った。
しかし学習させた自分のソフトが自力で穴熊に組んだ時はかなりうれしかった。
探索部はチェスの最強ソフトであるStockfishの探索部を将棋用に改良してそれを取り入れた。取り入れるだけであるがなんだかんだバグが出てきて取り除くのは大変だった
今回はどれぐらい強くなるか弱くなってしまってもしょうがないなと思ったがbonanza6に勝てるぐらいのソフトになった。正直感無量だった。あのbonanza6を超えることができるとは...
なんか書くの疲れてきたので大会は楽しかったでおわりにする
大会1日目の飲み会代払うの忘れてたのじぇ!
しまったのじぇ!!
大会一日目の飲み会代払うの忘れてたのじぇ!
あの日朝2時寝の4時起きで飲み会の途中でうとうとしてしまって、飲み会を途中で抜けたので翌日お金を渡すことになっていたのじぇ
Claireさんに冗談でここで黙ってれば払わなくて済むんじゃないww??
みたいなことを言ったけどまさかホントに払うの忘れてしまうとは....
非常に申し訳ないので次の大会の飲み会は余分に請求していただいて大丈夫です