Author: TRSasasusu

ブルースカイ・カタストロフィ

ブルースカイ・カタストロフィ(つよそう)

スクリーンショット 2018-05-05 17.10.41

↑は参考にあった Blue sky orbit in the Gavrilov-A. Shilnikov model でパラメータも同じもの.

以下は, \(\varepsilon\) をそのまま固定しながら, \(\mu\) を \([0.1, 1.1]\) の範囲で動かしたもの(0.02 間隔で 80000 回のルンゲクッタ.最初の 1000 回は捨てている).

ローレンツアトラクタとカオス

こんにちは.TRSasasusu です.

記事を更新していないだけで,KCS は活動しています.新歓の準備も進んでいるようです.

さて,自分は生命情報学科に所属していますが,この前のレポートにてカオスで遊んだので,今回はその話をします.

スクリーンショット 2018-02-01 15.46.11

これはローレンツ方程式(↓の式)のアトラクタです.この軌道に沿って点が移動していきます.


\begin{align}
\frac{dx}{dt} &= -\sigma x + \sigma y \\
\frac{dy}{dt} &= -xz + rx -y \\
\frac{dz}{dt} &= xy – bz
\end{align}

特にこのようなフラクタル構造を持つアトラクタはストレンジアトラクタと呼ばれ,カオスを生み出します.蝶の羽みたいで美しいですね.

そして,パラメータ(今回は \(\sigma,\ r,\ b\))を変化させると,カオスになったりならなかったりします.これを表すのが分岐図です.

スクリーンショット 2018-02-01 16.07.43

なんかすごいですね.そして,カオスを定量的に表すのがリアプノフ指数(多次元でまとめたものがリアプノフスペクトラム)です.力学系を表すヤコビ行列を時系列順に並べて QR 分解して(時刻 \(0\) では時刻 \(0\) のヤコビ行列のみを,それ以降ではヤコビ行列に前時刻の \(Q\) を右から掛けたものをそれぞれ QR 分解する),各時刻の \(R\) のそれぞれの対角要素の \(\log\) をとって全部足し合わせて \(N\) で割ると,以下のようになります.

スクリーンショット 2018-02-02 1.06.55

1 つでも正のリアプノフ指数があればカオスとなるようなので,この結果は分岐図のものと一致していますね.

最後に,ストレンジアトラクタの動画を載せて終わりにします(動画はレポートには載せられない).

REINFORCE Algorithm でジャンプアクションを学習させてみた

こんにちは. TRSasasusu です.今回は前回に引き続き強化学習の話です.

スクリーンショット 2017-08-07 4.17.50

前回のQ学習は行動価値関数を更新していくことで学習を進めましたが,今回の REINFORCE Algorithm は直接方策を更新していくことで学習を進める方策勾配に基づくアルゴリズムの一種です.

方策勾配に基づく強化学習は状態空間や行動空間が連続であっても取り扱うことができます.ですが,なんとなく連続な状態空間における離散的な行動空間を持つ問題をやってみました.具体的には,ジャンプで穴を飛び越えることを学習していきます.ジャンプするのが早すぎてもタイミングが合わず落ちますし,ジャンプしなくてももちろん落ちます.行動はジャンプするかしないかで,横方向への移動に関しては自動で右へ一定の早さで進ませます.穴との距離と方策の確率モデルのパラメータの関係式をソフトマックス関数に入れ,これを計算して勾配を求めてパラメータを更新しました.


$$ \nabla_{\theta}J(\theta) = \sum^M_{m=1}\sum^T_{t=1}(R^m_t – \overline{b})\nabla_{\theta}\log{\pi_{\theta}}(a^m_t|s^m_t) $$
$$ \theta_{t+1} = \theta_t + \eta\nabla_{\theta}J(\theta) $$

また,報酬については,ジャンプしたら減点(疲れるから),落ちたら大きく減点,穴を越えたら大きく加点という形にしました.

結果は以下のようになりました.

実際にプログラムを動かしてみると,パラメータとしては初期値に関わらずジャンプアクションができそうな値になるのですが,うまくいかない場合も散見されました.REINFORCE Algorithm よりも工夫された手法もあるのでそちらに変更するのも良さそうです.

ところで, REINFORCE Algorithm ってすごく調べづらいのですが… そもそも強化学習は Reinforcement Learning なのでこちらばかり出てきますね.

あと,未だに上に挙げた式でベースラインを引いて良い理由がわからないので,誰か教えてください.

迷路にQ学習を使ってみた

お久しぶりです.ユーザ名を今回から Twitter に合わせて TRSasasusu にしました.

スクリーンショット 2017-08-03 4.06.12

記事にできるような活動があまりできなかったため,気がついたら前回の何か作った系の投稿から7ヶ月も経ってしまいました.今回の投稿は去年UMU氏が投稿したものを大いに参考にしています.(というか,ほぼ同じ.違う点は迷路が大きくなったことくらい)

Q学習は


$$ Q(S_t, A_t) = Q(S_t, A_t) + \alpha(R_{t+1} + \gamma \max_{a’ \in A(s’)} Q(S_{t+1}, a’) – Q(S_t, A_t)) $$

に従って行動価値関数を更新します.そもそも行動価値関数とは,といったことはこちらもUMU氏がまとめてくださっています.ありがとうございます.

方策決定には ε を固定した ε-greedy 法を用いています.これにより局所解を抜け出せるようにします.パラメータについては,


$$ \varepsilon = 0.1 $$
$$ 学習率\ \alpha = 0.1 $$
$$ 割引率\ \gamma = 0.9 $$

としています.

やっぱり途中で戻ったりするようになってしまいますね…何ででしょうね.

あと,Pygame 便利ですね.

今回のスクリプト(q_maze2.py, moyf/ml/rl/q.py)

新春LT大会を開催しました

LT(Lightning Talks)とは,持ち時間5分という制約の中でプレゼンテーションを行うことです.

こんにちは.Kishiです.2月7日に行われた定例会の記事がまだなかったので書きます.この定例会では,今までの定例会と違ってLT形式を取り入れました.従来,各部員は定例会までに多くの研究開発を行うので,毎回定例会ではそれぞれの発表時間が非常に長くなり,そして会の終わるのが遅くなる傾向がありました.これをLT形式によって,メリハリをつけて内容を濃く,そしてたくさんの人が発表できるようにしました.

この様子はTwitterでも実況されていましたが,ここにも改めてそれぞれの内容を記します.

始めはCTFについてでした.CTF for Beginners 2016 Final @Tokyo参加レポートということで,CTF対策本を読んだ状態でどこまで戦えたかを報告していました.

2番目はUMU氏によるもので,秋学期に行った活動を紹介していました.難しくてここに自分が説明することはできません.新入生の方はKCSに入って,本人に聞いてみるとよいでしょう.

3番目は「Deep Learningってなんか凄そう」からの1年というもので,AIの分野紹介や入門書の選び方だけでなく,新規の分野の学習方法の提案もありました.

4番目はこの春に行われる初心者向け講習会の1つであるUnity講習会についてのものでした.新入生の方でゲーム作りに興味のある方は参加しましょう.

5番目はあまりにも安いVPSは危険であるというものでした.

(実況していた人の発表のためTweetなし)

6番目はHaskellにおける符号理論についての話でした.サーディナス・パターソンの定理により,代数的構造をHaskellで上手く扱うことができるというものでした.

7番目は話題のWallpaper EngineをWindows用に実装し,オープンソースで公開したというものです.デスクトップ上でローカルの動画だけでなく,YouTubeの動画を直接再生することもできます.(GitHubはこちら

8番目は講習会についてでした.重要なことなので何度でも書きますが,KCSは講習会に力を入れていますので,新しくKCSに入る方はぜひ参加しましょう.

9番目は前々代表によるUnityにFirebaseを導入した話で,これにより従来よりも手軽にUnityでオンラインゲームをマルチプラットフォームに実装できるというものでした.なお,実際に作ったゲームを用いて実演が行われましたが,前々代表は現代表に一瞬で負けていました.

10番目はPolymerを使ったWebアプリケーションの制作についての話で,有用なパーツを用いて快適にアプリケーションを構築していく様子が見られました.

11番目はVRFriendsというチーム制作のVR作品についての発表でした.着々と実装の進んでいる様子がわかりました.

12番目はGoogle Playで約10,000回ダウンロードされたアプリ,スピンアクションクリエイターについての発表です(自分が作った).実際にアプリを作って運用していくのは難しいというものでした.

ここからは複数発表したい人達による2周目,3周目の発表です.ここではグッドスタイン数列の話や,Hindley-Milner型推論の話,VRと脳波についての話,新たなゲームエンジンを作るという試みについての話など様々なものがありましたが,記事が予想以上に長くなったので,続きは実況Tweetをご覧ください.

今回の定例会では,コロプラから瀧田さんがいらっしゃいました.

Virtuleap WebVR Hackathonに出た話

こんにちは.Kishiです.

2017年になりましたね.昨年はVR元年と言われていましたが,今年のVRは果たしてどうなるのでしょう.

自分は,これからのVRでは他者とのインタラクションという部分も発展していくと考えています.FacebookがSocial VRというものを推し進めていますが,これがもっと自然な形になれば普及する可能性はあると思います.

ここで,現在発展途上のVRの分野にWebVRというものがあります.これを使えば,上に述べたようなVRができるのではないかと思い,2月1日まで開催されているVirtuleap主催のWebVR Hackathonに参加しました.

現在VRの開発環境としてはUnityやUnreal Engineが有名ですが,どちらも今のところWebVRには対応していません.ですから,今回はThree.jsとWebVR Boilerplateを使ってWebVRを実現しました.また,A-Frameも有名ですが,今回は使いませんでした.

自分は他者とともに同じ空間でVRをやりたかったので,マルチプレイ機能を実装することになりました.このためにNode.jsでSocket.IOを使いました.

こうしてできたのが, SphereBlast です.手軽にプレイできるように,Cardboardがあれば誰でもアクセスするだけでできるようになっています.具体的な内容としては,各プレイヤーは球状の乗り物に乗っており,迷宮,山,城を散策できるというものです.山には拾って渡すことのできる星が落ちていたり,城には逃げる鳥がいたりします.

ハッカソンの結果としては,ダメでした.やはり同時にプレイする人のいるほどにぎわっておらず,それに今回のハッカソンではHTC Viveなどの最新機器を持っていることが前提のような作品が多く,趣旨もそのようでした.とはいっても,Node.jsを使ったのも今回が初めてでしたし,いろいろ良い経験になったと思います.そういうことにします.

thumbnail_sphereblast

DragonDusk コミケに出すVRゲーム

こんにちは.Kishiです.

KCSは木曜日 西地区“み”ブロック-34a に配置されました.

そのため,最近はコミケ向けの活動が多くなっています.周りを見ると,新刊本「KCS Tips!」の執筆が着々と進んでいて,みんな頑張っているなぁ…と思っておりました.ここで改めてKCSの出品する内容を見てみると,なんとソフトウェア「KCS-SOFTWARE!」も出すんですね.そういえば,自分も何かVR出すよ,と言っていたような…(˘ω˘)

はい.早急に取り掛かりました.まるでゲームジャムをやっているようでしたが,完成しましたので下に動画を載せておきます.

VR空間内では移動や攻撃が難しい課題です.最近はコントローラのあるVRも増えてきましたが,Cardboardの場合はなかなか厳しいです.そこで,それならば移動も攻撃も他人任せにしてしまおうということで,すべてドラゴンに任せました.自分のすることは,ドラゴンの攻撃対象を目線で指示してあげるだけです.3Dモデルはすべて昨年のVSGで使われた,サークル内で制作されたものです.(音楽はKCS音楽班のものではなく,VSGと同様にこちらを使わせていただきました)このゲームはAndroid専用でかつCardboardが必要ですのでご注意ください.

2016/12/27追記・・・Oculus Rift DK2用のものも用意しました.Unity 5.5からDK2向けビルドのできる5.3に下げるのが大変でした.

「KCS-SOFTWARE!」にはこの他にも,

・研究映像

・イラスト(原画,制作の流れ付き)

・暗〇ゲーム(PC向け)

・Conway’s Game of Life(ブラウザで動作)

・3Dモデル(4体)

が含まれておりますので,KCSのブースに来ていただきましたらぜひご購入ください.

新刊本「KCS Tips!」もよろしくお願いします.

 

Oculus Rift DK2で使えるコントローラを作ってVR音ゲー作り

お久しぶりです.Kishiです.

一切誰も記事内で触れていませんが,KCSは三田祭に出展します.それに向けたチーム制作も複数動いています.やはり,記事にしないと外部に伝わらないので,それぞれのチームに記事を書いてもらおうかな….

さて,KCSはVR,Virtual Realityにも力を入れています.昨年はOculus Rift DK2を購入してこれを三田祭でのゲーム制作に利用したところ,非常に好評でした.(→VSG

最近の世の中を見ると,HTC ViveやOculus Rift CV1,PlayStation VRが出てきてVR業界は非常に盛り上がっています.KCSは昨年DK2を買ったばかりなので今年の三田祭には昨年同様DK2を用いることになりましたが,ここであることに気づきます.

コントローラがない…!

ナウいVRには皆,VR空間に直接干渉できるコントローラがあります.しかし,DK2にはありません.

そこで,一切のお金を掛けずにコントローラを作ってみました.正確には,昨年サークルで購入したWebカメラと色のついた紙とマスキングテープと労力で作りました.

dk2-controller2

dk2-controller4

簡単に説明すると,色認識をしてコントローラの位置を把握し,これとVR空間内の物体をリンクさせています.(簡単に説明も何もそもそも簡単な原理だった.)

これを使って音ゲーを作りました.音楽はKCSの音楽班が提供してくれました.ありがとうございます.

今年は他にも多くのVRゲームが展示されます.もちろん,VRでないゲームや,KCSの技術力の詰まった(自分には全く理解できない)展示もあります.ぜひお越しください!

UnityでUWP(Windows Store)アプリを作るときに気を付けること

こんにちは。Kishiです。

まずは宣伝。以前紹介したアプリの公式ホームページができました。

http://trsasasusu.sakura.ne.jp/spinactioncreator/ja/

では、本題。

Unityは本当に様々なプラットフォームに対応しています。その中にUWP、Universal Windows Platformも含まれています。そこで、せっかくスピンアクションクリエイターをAndroid向けに出しているのだからこちらにも進出してみようということで、Android版から何も変えずにBuild SettingsからSwitch Platformしてビルドしてみました。

すると、エラーが出るわ出るわでビルドできませんでした。

最終的にはリリースまでこぎつけたのですが、そこまでにぶつかった壁を紹介していきます。

1. AES問題

このゲームではAESを用いて暗号化していたのですが、なんとAesManagedなどの暗号化で通常用いられているクラスが使用できないのです。そのため、

<br />
#if NETFX_CORE<br />
// UWP用の処理<br />
#else<br />
// その他のプラットフォーム用の処理<br />
#endif<br />

を用いて他のプラットフォームと分岐させなければなりません。UWP用の暗号化については、 http://qiita.com/utisam/items/4ff154335519650d189b#_reference-834101a5ec3afe6a51acが非常にわかりやすいです。

2. StreamWriterのClose()がない

ただびっくり。Dispose()を使いましょう。

3. シェーダーでTRANSFER_SHADOW(o)が使えない

必要な場所でこれがないと死ぬプラットフォーム(Androidで強制終了くらった)と、これがあると死ぬプラットフォームがあるので注意。

4. タッチのできるデバイスとできないデバイスがある

公式にこれに対応するためのソースコードが出ていますが、以下の

<br />
UnityEngine.WSA.Application.InvokeOnUIThread(() =&gt;<br />
    {<br />
      isInTouchMode =<br />
        UIViewSettings.GetForCurrentView().UserInteractionMode ==<br />
        UserInteractionMode.Touch;<br />
    }, true);<br />

<br />
UnityEngine.WSA.Application.InvokeOnUIThread(() =&gt;<br />
    {<br />
      isInTouchMode =<br />
        Windows.UI.ViewManagement.UIViewSettings.GetForCurrentView().UserInteractionMode ==<br />
        Windows.UI.ViewManagement.UserInteractionMode.Touch;<br />
    }, true);<br />

としないとビルドできません(または、usingするか)。そもそもタッチのできるWindowsデバイスを自分は持っていないので本当に動いているのか検証できていません。(おそらくテスターの方々によるテストを通っているので動作しているのだと思います)

5. Handheld.PlayFullScreenMovie()に注意

StreamingAssetsに入れたビデオが再生されなくてびっくりしました。公式には確かに使えそうなことが書いてあったので。そこで、調べてみるとどこかの海外のフォーラムにて、第1引数を

<br />
&quot;hoge.mp4&quot;<br />

から

<br />
System.IO.Path.Combine(Application.streamingAssetsPath, &quot;hoge.mp4&quot;)<br />

と書き直すと動く、と書いてあったので実際にやってみたら動きました。Android(おそらくiOSも)だったら省略できるのに…。

 

ここからは、.slnを作った後の話です。

6. ここまで来てビルドできない

UWPアプリをUnity以外で普通に開発するときのクラス名と被っているとエラーが出ます。自分はUnityで独自にFileIOクラスを作っていたので、これと被ってエラーを吐かれました。Windows.Storage.FileIOというように名前空間を直接つけて修正しましょう。

7. Debugビルドの実行が異様に遅い

普通の動作テストはReleaseビルドで行いましょう。そして、リリースするときはMasterビルドにしましょう。海外のフォーラムにも結構上がっています。

8. Masterビルドのx64版が死ぬ

正確には、uGUIのScroll Rectが死にます。他にも何か死んでいて、もう実態がつかめないのでx64版はあきらめました。x86版とARM版だけで行きました。

 

ここからはリリース前後の話です。

9. 手続きが大変

これはしょうがないです。決められた大きさのスクリーンショットが必要だったり、課金のために条約が何とかあったりといろいろありますが、がんばりましょう。もちろん認定のために審査があるので、Androidに比べてリリースには時間がかかります。

10. 突然の更新リジェクト

謎。テスターへの文面を英語と日本語両方で丁寧に書いたら通りました。

 

とりあえず、以上です。予想以上に大変でしたが、無事リリースできました(宣伝)

以下の公式バッジは https://developer.microsoft.com/en-us/store/badges で作ることができます。

Get it on Windows 10

スピンアクションクリエイターはWindows Storeで「ゲームを作る」と検索するだけで候補に出てきます。この記事を読んで役に立った方は、ぜひ評価をしていただきたく存じます。そうしていただけるとものすごく嬉しいです(ものすごくものすごく宣伝)

Spin Action Creator スピンアクションクリエイター

お久しぶりです。Kishiです。

前回の自分の記事で8月中にトレーラーを出したいと書いておきながら、気が付けば9月になっておりました。

自分だけのアクションゲームのステージを2Dにおいても、3Dにおいても作成できるゲームです。

https://play.google.com/store/apps/details?id=com.trsasasusu.spinactioncreator

 

Get it on Google Play

以下は動画です。

サムネイル

Screenshot_2016-09-02-00-39-17