カオスについて2
daruma3940.hatenablog.com
院試も終わったし前回の続きをかくのじぇ
前回2次元調和振動子は摂動を加えられなければトーラスになり、
摂動が弱い場合でも元のトーラスは変形して新しいトーラスができ、摂動が強くなるとトーラスが壊れてカオスが発生するらしいことについて書いたのじぇ。
ここでポアンカレマップについて説明するのじぇ。
ポアンカレマップとはトーラスの断面を切り取ったものなのじぇ。
2次元調和振動子の場合は変数はx,y,px,pyの4つであるけれど、
ハミルトニアンが一定という条件
から変数(例えばpy)を一つ消せ、
y=0の点となった時に点をプロットするということをすれば
変数はx,pxだけになるので2次元平面に点をプロットできるようになるというわけのじぇ。
↓こんな感じ
ここで非加積分系について考えようじぇ。
周期軌道から少しずらしたものがポアンカレマップのどこに来るのかを考えると
となるのじぇ。
このMは安定性行列と呼ばれ、保存系ではdet(M)=1となるのらしいのじぇ(よくわかってない)
これはリウビルの定理と呼ばれるものなのじぇ(リウビルの定理って正準変換のところで出てきたけど...)
とすると
となり、
↓
面積S=ab-bc=det(M)=1
になるのでdet(M)は面積が何倍されたかを表すのじぇ。
ここで行列Mの固有値について考えると
ここでもし固有値が実数で重解ではない場合、どちらか片方は固有値が1より大きく片方が固有値が1より小さくなるのじぇ
ということは片方は写像を繰り返すたびに指数関数的な拡大をし、
片方は写像を繰り返すたびに指数関数的に小さくなっていくのじぇ。
安定方向の直線上にない、つまり安定成分と不安定成分を持っているものは不安定性の指数関数的増加に引っ張られて不安定方向に流されていくのじぇ
もし固有値が複素数の場合、
λ1はλ2の複素共役かつλ1*λ2=|λ1|^2=1なので
になりこのような行列Mは
であり、これは回転行列なのじぇ。
これは指数関数的に拡大しないため安定なのじぇ。
もし重解を持った場合、
λ1=λ2=1であり、このような固有値を持つ行列は
であり
となるのじぇ。
図に書くとこんな感じ。
これも指数関数的に大きくなっていくわけではないので安定(中立安定)なのじぇ(この図あんまり理解できていない)
もし上のハミルトニアンでk=0のときこれは加積分系であり、周期軌道から少し初期値をずらしても別の周期軌道に乗るだけなのでこれは指数関数的に大きくなっていかず、中立安定的なのじぇ
しかしkが大きくなっていくとトーラスが壊れ、もしそれが複素数のほうへ壊れたのなら、安定固定点が発生し、実数のほうへ壊れたのなら不安定固定点が発生するのじぇ
このようすをkicked rotatormodelで描いてみるとこんな感じになったのじぇ
kicked rotatormodelとは
周期的に撃力を受ける回転子のことで....って書くのはめんどくさいので
http://a-phys.eng.osaka-cu.ac.jp/suri-g/phys8.html
このページを見てくれだじぇ
これがK(キックの強さ)=0の時
キックのじゃまを受けないのでひたすらθは大きくなっていくのじぇ
こんな感じ まさしく中立安定
K=0.01のとき
K=1.2の時
島みたいなのが現れているのじぇ。これが複素数の方向に壊れたやつなのじぇ。
島と島の間には実数の方向に壊れたやつが存在しているけどカオス的になってしまっているので構造はみてとれないのじぇ
ちなみにこの島を拡大すると島の中にも島が存在するのじぇ。これはいわゆるフラクタル的構造なのじぇ
さらにキックを強くするとこんな感じ
これらの図は範囲が違ったりするので注意なのじぇ
Kが大きくなると完全にカオス的になるのはすべて実数方向にずれるから??
安定固定点と不安定固定点が交互に出てくるのはなぜ???
さっきの
についてもやってみたけどそんなにきれいなのは見られなかったのじぇ
でもまあ一応張っておくか
なんかうまくいかないなーー
なんでだろうだじぇ?
う~~んう~~ん......
分かったのじぇ
ハミルトニアンが
で表されるので運動方程式は
これは線形なので非線形性がないためカオスは現れないのじぇ。
そしてk=0の時トーラスっぽいものが現れていないのは
これは単純な調和振動子なので一度ポアンカレマップに乗った後運動をして、もう一度ポアンカレマップに乗ったときに完全に同じ点に乗ってしまう、
つまりトーラス上の一部しか運動をしないためトーラスが現れていないのじぇ
それに変数変換をすれば、2つの2次元調和振動子に分離もできるのじぇ
A'は体格化されているのでx',y'のように変数変換をすれば2つの調和振動子に分けることができるのじぇ。
つまりこれはkの値がなんであれトーラスでカオス性は持たないのじぇ
でもkが0.6の時にはトーラスが出てきてないよね???これはなんで???
そしてトーラスの中心が2つに分かれているのはなんでなんだじぇ???
~~~追記~~~
k=0.6のときトーラスが現れていないのは新しい座標では振動数がそれぞれsqrt(1+k), sqrt(1-k) になっているのでk=0.6のとき周期の比が2になるので
片方が1周する間にもう片方がちょうど2周するので同じ点に帰ってきてしまい、トーラスが見えにくくなっているのじぇ
トーラスの中心は片方の振幅がゼロになる箇所に対応するのでどの方向の振幅がゼロになるかによって2種類あるので中心は2つあるのじぇ
息抜き
院試の勉強つまらんので息抜きに将棋盤アプリ作り始めてみたら
息抜きのほうに力が入ってしまっていたのじぇ......
何やってんのよ....
なにやってんだろうなぁ~~~~~~~~~~~~~~~~
うちの教授陣は優しいのできっと....きっと私の解けなかった問題の配点を0点にしてくれるはずなのじぇ.....
....(;^_^A
Rotated Bitboardなのじぇ
Rotated Bitboardについての解説をしようじぇ?
Bitboardについての解説は以前の記事を見てくれだじぇ。
daruma3940.hatenablog.com
SquirrelはRotated Bitboardを使って効きのある升を計算しているよ!
最近はPEXTbitboardとかもあるらしいじゃない?どうしてRotated Bitboardを使うの?
https://twitter.com/search?q=Rotated%20from%3Amerom686&src=typdtwitter.com
mermoさん曰くPEXTよりも早いそうなのじぇ。
そしてまりちゃのPCはアルバイトして買った学習用i7-4770K以外のPCはAVX2に対応していなくてPEXTは使えないのでRotatedにせざるを得なかったのじぇ。
Bitboardによる効きの表現は効きのあるマスに対応するbitを1にすることである駒がどこに効きを作っているのかを表現するというものなのじぇ。
しかし長い効きを持つ駒の場合効きを遮る駒がどこにあるのかによってどこまで効きを伸ばすことができるかが変わってくるのじぇ。
そこで、(とびゴマの位置、邪魔ゴマの位置)全通りに対してどこに効きを発生させることができるかのTable集を作成し、どこに邪魔ゴマがあるかをindexにしてそのテーブルを引っ張ってくることで効きを表現しようという方法なのじぇ。
例えば
青いマスを邪魔ゴマがいるマス、赤いマスを効きを発生させている駒の升だとすると
この図で4の場所にいる飛車の縦方向のききを求めたければ
TateKikiTable[4(効きを発生させる駒の場所)][(bitboard>>1)&(7)] のようになるのじぇ
今のbitboardをシフトして必要なところだけマスクして取り出すことによって Tableのindexを作成できるのじぇ
この場合は
TateKikiTable[31(効きを発生させる駒の場所)][(bitboard>>28)&(7)]になるのじぇ
しかし横の効きを求めるためにはこのマスの番号のつけ方では
シフトとマスクではindexを作れないのじぇ。
そこでこのbitboardを90度回転させたboard(bitboard90とする)を作成すれば
これはさっきと同じようにシフトとマスクでindex作成できるのじぇ。
実際のbitboardは64bit整数2つ(ここではint64_t bb[2]とする)で作られるためbb[0]かbb[1]かどちらを参照するべきかも指定しないといけないためもうちっとふくざつになるのじぇ
斜め+45度斜め-45度についても似たような感じなのじぇ。
もし将棋の駒がすべて近接駒ならRotated Bitboardなんて技術は必要ないのじぇ。
Rotated Bitboardは長い効きを持つ駒の効きを考慮するために必要なのじぇ
ちなみにこれがSquirrelにおけるRotated Bitboardの設計図なのじぇ
あと駒のいる位置を表しているbitboard(occupied bitboad)は
回転無し,90度回転+45度回転,-45度回転の4つ保持しないといけないのだけれど
縦方向の効きは1段目9段目に邪魔ゴマがあっても1段目9段目に効きを作ることができるので縦方向occupiedbitboardは1段目9段目を表すbitを除いて7*9=63bitあればよく
横方向も1筋目9筋目のbitはいらないので7*9=63bit
斜めはそれぞれ7*7=49bitあればよいので
実はoccupiedbitboardはすべて256bitに収めることができ
これによって駒が動いた時のoccupiedbitboardのこうしんの処理はSIMD演算を使えば一気に処理できるのじぇ。
これを用いれば結構高速化できた記憶があるのじぇ
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より
)
うむ!ちゃんと動いてるみたいなのじぇ!
早く公式で対応して..(懇願)
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日