いものやま。

雑多な知識の寄せ集め

Swift

Mac用とiOS用のフレームワークを作ってみた。

以前、強化学習用のニューラルネットワークをSwiftで書いていた。 ここで最後に触れた問題が、これ。 NSKeyedArchiver/NSKeyedUnarchiverでオブジェクトをエンコード/デコードすると、クラス名が(モジュール名).(クラス名)となるため、ある実行ファイルで保…

強化学習用のニューラルネットワークをSwiftで書いてみた。(その8)

前回は○×ゲームをSwiftで実装した。 今日はSarsaComの実装。 なお、Rubyでの実装は、以下を参照: SarsaComクラス ということで、さっそく。 //============================== // TicTacToe //------------------------------ // SarsaCom.swift //========…

強化学習用のニューラルネットワークをSwiftで書いてみた。(その7)

昨日はValueNetworkの保存とロードの実装をした。 (ただ、いろいろ問題があったので、後で修正する予定) これで実際に学習をするために、今日は○×ゲームをSwiftで実装する。 Markクラス まずはマークを表すMarkクラスから。 enumで実装するのも一つの手だ…

強化学習用のニューラルネットワークをSwiftで書いてみた。(その6)

昨日は強化学習用のHMEの実装を行った。 今日はそれらのデータの保存とロードが出来るようにする。 (2016-04-08追記:いろいろ問題があったので、大幅に修正する予定) NSKeyedArchiver、NSKeyedUnarchiver データをファイルに保存し、ロードする一つの方法…

強化学習用のニューラルネットワークをSwiftで書いてみた。(その5)

昨日は強化学習用のHMEの計算を行列で表現した。 今日はそれを使って実際に実装していく。 なお、Rubyでの実装は、以下を参照: GateNetworkクラス まずはゲートネットワークの実装。 //============================== // ValueNetwork //-----------------…

強化学習用のニューラルネットワークをSwiftで書いてみた。(その4)

昨日は強化学習用のニューラルネットワークの実装を行った。 今日はHMEの実装を行うために、同様にHMEの計算を行列で表現していく。 強化学習用のHMEの計算 ここでは、HMEへの入力を 、出力を とする。 また、エキスパートネットワーク の出力を 、パラメー…

強化学習用のニューラルネットワークをSwiftで書いてみた。(その3)

昨日は強化学習用のニューラルネットワークの計算を行列で表現した。 今日はそれを使って実際に実装していく。 なお、Swiftでの行列演算については、以下を参照: ここで定義したMatrixクラス、Vectorクラスを使っていくことになる。 また、Rubyでの実装は以…

強化学習用のニューラルネットワークをSwiftで書いてみた。(その2)

昨日は乱数生成器の実装を行った。 今日は強化学習用のニューラルネットワークの計算を行列で表現する。 強化学習用のニューラルネットワークの計算 説明を簡単にするために、ここでは次のようなニューラルネットワークを考える: 3層ニューラルネットワーク…

強化学習用のニューラルネットワークをSwiftで書いてみた。(その1)

強化学習の関数近似にニューラルネットワークを組合せるということをやってきていた。 強化学習については以下から: ニューラルネットワークについては以下から: 複数のニューラルネットワークを組合せるHME(Hierarchical Mixtures of Experts)について…

Swiftでの行列計算について調べてみた。(まとめ)

これまでの各記事は以下から。 行列、ベクトル、Splatの生成 Swiftでの行列計算について調べてみた。(その1) - いものやま。 Swiftでの行列計算について調べてみた。(その2) - いものやま。 行列、ベクトルの演算 Swiftでの行列計算について調べてみた。…

Swiftでの行列計算について調べてみた。(その4)

昨日は行列とベクトルの演算について説明した。 今日はもうちょっとスマートな書き方が出来るようにするために、ラッパークラスを作っていく。 Matrixクラス まず、行列を表すMatrixクラスの実装。 なお、途中に出てくるVectorクラスはMatrixクラスを継承し…

Swiftでの行列計算について調べてみた。(その3)

昨日はベクトルとSplatの説明をした。 今日はこれらを使った演算について。 転置 まずは転置。 次の関数が用意されている: // 転置した行列を生成して返す。 la_object_t la_transpose( la_object_t matrix); // 行列 スカラー倍 次はスカラー倍。 // スカ…

Swiftでの行列計算について調べてみた。(その2)

昨日はAccelerateフレームワークの概要と、行列の生成と内容の取得について説明した。 今日はベクトルとSplatについて。 ベクトルの生成 ベクトルといっても、実際には1行もしくは1列の行列。 ただ、扱いやすいように、いろいろマクロや関数が用意されている…

Swiftでの行列計算について調べてみた。(その1)

ニューラルネットワークの実装をするときに必要となるのが、行列計算。 もちろん、Arrayを使ってベタに実装してもいいんだけど、それだと速度が気になるところ。 調べてみると、Accelerateフレームワークを利用するといいようだったので、少し調べてみた。 …

GameCenterのLeaderboardに対応させる方法について。

SoloXmasでは、GameCenterのLeaderboardにも対応させた。 今日はその方法について。 iTunesConnectでLeaderboardを追加 まずは、iTunesConnectでLeaderboardの項目を追加する。 iTunesConnectでアプリの情報を入力できるようにした後、 「iTunesConnect」-「…

iOSでアプリからTwitter・Facebookに投稿する方法について。

昨日はアプリからスクリーンショットを撮る方法を説明した。 今日は、それを実際にTwitterやFacebookに投稿する方法について。 SLComposeViewController ユーザにTwitterやFacebookに投稿するためのダイアログを出すだけならけっこう簡単で、Socialフレーム…

iOSでアプリからスクリーンショットを撮る方法について。

SoloXmasでは、結果の共有を出来るようにするために、TwitterやFacebookに投稿できる機能を実装した。 このとき、当然画面の画像があった方がインパクトが強いので、画像も一緒に投稿したいところ。 ということで、アプリからスクリーンショットを撮る方法を…

SKSceneの画面遷移に関して。

昨日はゲームでBGMやSEを流す方法について説明した。 ただ、最後に 実際には単に上のようにすると、シーンの遷移のときにちょっとした問題も出てくるんだけど・・・ と書いた通り、実はちょっとした問題が。 今日はそれについて。 問題の具体的な内容 さて、…

iOSのゲームでBGMやSEを流す方法について。

SoloXmasではBGMやSEにも対応したので、その方法について。 AVAudioPlayer iOSで音楽を流す場合、AVFoundationのAVAudioPlayerクラスを使うといい。 import AVFoundation // 音声ファイルのURLからAVAudioPlayerを生成 if let player = try? AVAudioPlayer(c…

iAdを表示させる方法と画面サイズについて。

SoloXmasは無料で配信して、広告を表示させるつもりだったので、iAdを表示させる方法を調べ、実装した。 今日はその話を。 iAdを表示させる方法 といっても、iAdを表示させるだけなら、すごく簡単。 ViewControllerに次の一行を入れればいいだけ。 self.canD…

「BirdHead」の仕上げをしてみた。(まとめ)

これまでの各記事は以下から。 ルール記述 「BirdHead」の仕上げをしてみた。(その1) - いものやま。 「BirdHead」の仕上げをしてみた。(その2) - いものやま。 スタート画面とルール画面 「BirdHead」の仕上げをしてみた。(その3) - いものやま。 ゲ…

「BirdHead」の仕上げをしてみた。(その6)

昨日はモデルの保存と復元を行った。 今日は復元されたモデルを元に、ビューを復元する処理を実装する。 HandNodeの修正 まずは手札。 //============================== // BirdHead //------------------------------ // HandNode.swift //===============…

「BirdHead」の仕上げをしてみた。(その5)

昨日はゲーム結果の表示を実装した。 これで残すはゲームの中断と再開のみ。 まずはモデルの保存と復元を実装していく。 GameInfoの修正 基本的にはYWFと同じ。 以下が参考になると思う。 同様に、GameInfoを修正して、保存と復元が出来るようにする。 //===…

「BirdHead」の仕上げをしてみた。(その4)

昨日はスタート画面とルール画面を作った。 今日はゲーム結果の表示を実装していく。 MinusPointInfoNodeの修正 ということで、早速実装を。 まずは、ゲームの順位を表示できるようにするために、マイナス点一覧の修正を行う。 具体的には、指定された順位に…

「BirdHead」の仕上げをしてみた。(その3)

昨日は英語のルールを書いた。 今日はスタート画面とルール画面の作成。 といっても、たいして書く内容もないので、完成形だけw スタート画面 まずはスタート画面。 シンプルw PLAYボタンを押すとゲームが始まって、RULEボタンを押すとルールが見れるように…

「BirdHead」の仕上げをしてみた。(その2)

昨日は日本語のルールを書いた。 今日は英語のルールを書いていく。 Overview Birds compete for their influence. Higher head has more influence in their world. But, be careful. Too conspicuous birds may be shot by a hunter. BirdHead is a trick-…

「BirdHead」の仕上げをしてみた。(その1)

前回までで、BirdHeadが一通り遊べるようになった。 あとは仕上げを行って、リリースするのみ。 とりあえず、まずは日本語のルールを書いてみた。 何度目だって感じだけど・・・(^^; 概要 鳥たちが自分の影響力を競い合っています。 彼らの世界では、頭…

「BirdHead」のUIを作ってみた。(まとめ)

これまでの各記事は以下から。 画面構成、アーキテクチャ 「BirdHead」のUIを作ってみた。(その1) - いものやま。 カード 「BirdHead」のUIを作ってみた。(その2) - いものやま。 デッキ 「BirdHead」のUIを作ってみた。(その3) - いものやま。 プレイ…

「BirdHead」のUIを作ってみた。(その12)

昨日は手札のタッチ処理を実装した。 今日はそれを使って人間プレイヤーを実装し、コントローラ(シーン)に修正を加えて、実際に遊べるようにする。 Human さっそく、人間プレイヤーの実装。 //============================== // BirdHead //-------------…

「BirdHead」のUIを作ってみた。(その11)

昨日はコントローラを実装してSarsaAI同士が対戦できるようにした。 今日は手札のタッチ処理を実装していく。 手札選択/プレイのUI設計 まずは手札をどうやって選択、プレイ出来るようにするかを考える。 最初に考えていたのは、タップして選択/選択解除。 …