読者です 読者をやめる 読者になる 読者になる

いものやま。

雑多な知識の寄せ集め

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設計 まずは手札をどうやって選択、プレイ出来るようにするかを考える。 最初に考えていたのは、タップして選択/選択解除。 …

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

久々に。 前回はマイナス点一覧まで実装した。 今日はコントローラ(シーン)を実装して、SarsaAI同士が対戦する様子を見れるようにする。 GameScene SpriteKitでは、シーン(SKScene)がコントローラの役割を果たす。 そこで、SKSceneを継承したGameSceneを…

iOS8とiOS9でSpriteKitのタッチ判定の挙動に違いがあった話。

BirdHeadのUIを作っていたら、ノードをタッチをしてもタッチの通知が来ないということがあった。 しかも、iOS8で動かしたときだけ。(iOS9だと大丈夫) 少し実験してみると、iOS8とiOS9でSpriteKitのタッチ判定の挙動に違いがあり、それが原因だった。 今日…

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

昨日はマイナス点一覧に必要な部品の実装を行った。 今日はそれらを使ってマイナス点一覧を実装していく。 MinusPointInfoNode さっそくコードを。 //============================== // BirdHead //------------------------------ // MinusPointInfoNode.s…

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

昨日はアクションを実行するためのコードに関してリファクタリングを実施した。 今日はマイナス点一覧に使う部品を実装していく。 必要なもの マイナス点一覧を表示するときに、必要になるものをリストアップしてみると、以下。 ボタン テキスト(プレイヤー…

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

前回は手札の表示の実装を行った。 次はマイナス点情報の表示の予定だったんだけど、その前にちょっとリファクタリングを行う。 気になったコード さて、リファクタリングを行うということは、何か気になったコードがあったということ。 それは何かというと…

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

昨日は手札の表示の設計を行った。 今日はそれを元に実装を行っていく。 HandNode 手札はSKNodeを継承したHandNodeとして実装する。 //============================== // BirdHead //------------------------------ // HandNode.swift //=================…

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

昨日はプレイエリアの表示の実装を行った。 今日は手札の表示の設計を行っていく。 (※なお、タッチ処理の設計、実装はあとで) 手札表示の方法 手札を表示する上で考えないといけないのが、どうやって表示するか。 方法としては、 シンプルに横に並べて表示…

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

昨日はデッキの表示を実装した。 今日はプレイエリアの表示を実装していく。 PlayAreaNode プレイエリアは、SKNodeを継承したPlayAreaNodeとして実装していく。 //============================== // BirdHead //------------------------------ // PlayArea…

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

昨日はカードの表示を実装した。 今日はデッキの表示を実装していく。 デッキとフレーム デッキは、単純に考えると中央にカードを表示するだけなんだけど、実際には各プレイヤーにカードを配る必要があるので、もうちょい工夫が必要。 具体的には、デッキの…

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

昨日は画面構成とモデル/コントローラ/ビューの関係について説明した。 今日はカードの表示を作っていく。 CardNode カードはSKSpriteNodeを継承したノードとして実装した。 //============================== // BirdHead //------------------------------…

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

ということで、今日から「BirdHead」をiOSで遊べるようにしていく。 「BirdHead」に関しては、以下の記事を参照。 画面構成 まずは大雑把な画面構成から。 「BirdHead」はカードゲームなので、まずは以下のような要素が必要になってくる: デッキ 手札 カー…

SpriteKitでアクションを確実に1つずつ実行する方法について。

BirdHeadのUI作りは難航中・・・ 簡単なようでいて、けっこう難しい(^^; 今日はUIを作ってる中で確立したテクニックを一つ紹介したい。 なお、NSOperationQueueを使うので、それについては以下を参照。 画像を追加し、整列させる 今回題材として考えるの…

「BirdHead」の思考ルーチンを作ってみた。(まとめ)

これまでの各記事は以下から。 ランダムAI 「BirdHead」の思考ルーチンを作ってみた。(その1) - いものやま。 グリーディAI 「BirdHead」の思考ルーチンを作ってみた。(その2) - いものやま。 強化学習AI 「BirdHead」の思考ルーチンを作ってみた。(そ…

「BirdHead」の思考ルーチンを作ってみた。(その5)

昨日はアクション選択と学習のアルゴリズムを実装した。 今日は、パラメータの保存とロードを実装して、クラスとして完成させる。 SarsaComクラス(続き) 保存とロード 保存とロードの実装を入れたクラス全体の様子は、以下のようになる。 (省略されている…

「BirdHead」の思考ルーチンを作ってみた。(その4)

昨日はプレイヤー・ビューの特徴ベクトル化とそれを使った価値の計算について説明した。 今日はそれを使ったアクションの選択と学習について説明していく。 SarsaComクラス(続き) アクションの選択 アクションの選択は、Sarsa()法を使うので、任意のソフト…

「BirdHead」の思考ルーチンを作ってみた。(その3)

昨日はグリーディAIを実装した。 今日からは強化学習を使ってAIを作っていく。 方針 まず、方針について。 強化学習にはいくつかのアルゴリズムがあるけれど、今回はSarsa()法を使う。 これは強化学習について学んでみた。(その19) - いものやま。で説明し…

「BirdHead」の思考ルーチンを作ってみた。(その2)

昨日は「BirdHead」に対するランダムAIを実装した。 今日はもうちょっとマシなAIを実装してみる。 グリーディAI 「22」や「5本のキュウリ」のルールを聞いたときに誰もが思うのが、「それなら一番強いカードを出し続ければいいんじゃないの?」というもの。 …

「BirdHead」の思考ルーチンを作ってみた。(その1)

前回までで「BirdHead」を遊べるようにした。 今回からは「BirdHead」の思考ルーチンを作っていく。 ランダムAI まずは一番簡単なところから。 合法手からランダムにアクションを選択するだけの、ランダムAI。 //============================== // BirdHead…

「BirdHead」を遊べるようにしてみた。(まとめ)

これまでの各記事は以下から。 デッキの実装 「BirdHead」を遊べるようにしてみた。(その1) - いものやま。 モデル全体の構成 「BirdHead」を遊べるようにしてみた。(その2) - いものやま。 アクション、プレイヤーの実装 「BirdHead」を遊べるようにし…

「BirdHead」を遊べるようにしてみた。(その7)

昨日はコントローラの実装を行った。 今日は人間プレイヤーの実装を行って、実際に遊べるようにしてみる。 Humanクラス ということで、さっそくコードを。 //============================== // BirdHead //------------------------------ // Human.swift /…