月別アーカイブ: 2016年2月

【自分用メモ】ベイズ推定

ベイズの定理: P(A|X) = P(X|A)*P(A) / P(X)
※ P(A|X) は X が発生したときに A が発生する確率を表す

証明:

P(A|X)*P(X) = P(X|A)*P(A) なので、P(X) を右辺に移動すると、ベイズの定理となる。

例:
碁笥(ごけ 碁石の入れ物)O1, O2 があり、黒石, 白石が O1 には 10, 30個、O2 には 20, 20個入っているものとする。
プレイヤーは最初にどちらかの碁笥を選ぶ。
どちらを取るかはランダムなので P(O1) = P(O2) = 0.5 である。
どちらの碁笥を選んだかの情報は何もないので、両方 0.5 となる。

次に、プレイヤーは選んだ碁笥のなかから石をひとつ取り出して見る。
それが黒石だった場合、プレイヤーが選んだ碁笥が O1 だった確率(P(O1|B))はいくつだろうか?
ベイズの定理より、
P(O1|B) = P(B|O1)*P(O1) / P(B)
= 0.25*0.5 / (0.25*0.5 + 0.5*0.5)
= 1/3

黒石はO1の方が少ないで、O1 を選んでいた確率は 0.5 から 1/3 に下がった。
つまり、碁石をひとつ見るという観測により、どちらの碁笥を選んだかの確率が修正されたというわけだ。
ちなみに、P(O2|B) を計算すると 2/3 となり、当然ながら P(O1|B) + P(O2|B) = 1.0 となる。

では、取り出したのが白石だった場合はどうだろうか?
それぞれの碁笥を選んだ確率は以下のようになる。
P(O1|W) = P(W|O1)*P(O1) / P(W)
= 0.75 * 0.5 / (0.75*0.5 + 0.5*0.5)
= 0.6
P(O2|W) = P(W|O2)*P(O2) / P(W)
= 0.5 * 0.5 / (0.75*0.5 + 0.5*0.5)
= 0.4

白を観測した場合は白が多く入っている O1 を選んだ確率が高くなり、黒を観測した場合は黒が多く入っている O2 を選んだ確率が高くなるという、もっともらしい結論になる。

では、観測した石を碁笥に戻し、もう一度石をひとつ取り出すと、それぞれの碁笥を選んだ確率はどうなるであろうか?
観測した石が2回とも黒石だった場合:
P(O1|(B2,B1)) = P((B1,B2)|O1)*P(O1) / P(B1, B2)
= 0.25*0.25*0.5 / (0.25*0.25*0.5 + 0.5*0.5*0.5)
=

P(A|B) = P(A,B)*P(B)
P(A,B) = P(A)*P(B) = P(B,A)
P((A,B),C) = P(A,(B,C)) = P(A,b,C)
P((A,B)|C) = P(A,B,C)*P(C)

cocos2d-x iOS 移植メモ

Android 用が既に動いている cocos2d-x アプリを iOS 用にビルドするための手順メモ

  • 必要な環境
    • Mac (xcode が必要)
    • iOS 端末 (バイナリをアップロードするのに必要な Provisioning Profile を作成するのに必要)
  • プロジェクト/proj.ios_mac/プロジェクト名.xcodeproj を xcode で開く
  • 追加リソースがあれば、プロジェクトに追加

Project Navigator から Resources を選び、右クリックして Add Files to “プロジェクト名”… メニューを実行
この時、OSX 用もビルドするのであれば【Option】を開いて、ターゲットを有効にしておくと、各リソースをいちいちあとで追加しなくて済む

  • アプリアイコン、スプラッシュスクリーン変更
    • Resources 下に images.xcassets を追加
      • Command+New を実行し、iOS > Resourece > Asset Catalog を選択し、【Next】。ファイル名(例:images)を入力し、【Create】を押すとと出来上がり
      • スクリーンショット 2016-02-20 09.25.17
    • images.xcassets を開き、左下の [+] を押し、AppIcons & Launch Images > New iOS App Icon   を選び、アイコン追加
    • 同様に AppIcons & Launch Images > New iOS Launch Image   を選び、スプラッシュスクリーン追加
    • 各サイズのアプリアイコンを作成し、プロジェクト > ios > Icons に登録
      • 各サイズのアイコンを作成するのはかなり面倒。なので、下記サイト等を使うといいぞ
      • App Icon Resizer
    • 上記を images.xcassets > AppIcon の各サイズ部分にドロップ
    • 同様に、Launch Image(スプラッシュスクリーン) も追加
    • プロジェクト > General > App Icons abd Launch Images の App Icon Source の 【Use Asset Catalog】を押し、先に作った xcassets の名前を選択し、【Migrate】 を押す
    • プロジェクト > General > App Icons abd Launch Images を Application に、Launch Images Source を LaunchImage にする
  • バナー広告
    • SDKをインポート
      • Add Files to “プロジェクト”…
      • option を押し、「Copy Items if needed」にチェックを入れるのを忘れずに!
    • プロジェクト > General > Linked Frameworks and Libraries で必要なモジュールを追加
      • AdSupport
      • AudioToolbox
      • AVFoundation
      • CoreGraphics
      • CoreMedia
      • CoreTelephony
      • EventKit
      • EventKitUI
      • MessageUI
      • StoreKit
      • SystemConfiguration
    • AppController.h, AppContoller.mm にコードを追加

AppController.h:

extern "C" {
#import <GoogleMobileAds/GoogleMobileAds.h>
}

AppController.mm:

@property (nonatomic, strong) GADBannerView *adView;
.....
    self.adView = [[GADBannerView alloc] initWithAdSize:kGADAdSizeBanner];
    self.adView.adUnitID = @"ca-app-pub-0xxxxxxxxxxxxxxx/xxxxxxxxxx";
    self.adView.rootViewController = _viewController;
    [_viewController.view addSubview:self.adView];
    [self.adView loadRequest:[GADRequest request]];
    self.adView.center = CGPointMake(
                                     self.viewController.view.center.x,
                                     self.viewController.view.frame.size.height-self.adView.frame.size.height/2);

 

 

iOSアプリをAppStoreに公開するとき、理解しておいた方がいい用語をまとめてみた

iOSアプリをAppStoreに公開しようとすると大抵の人は躓くみたいだ。筆者も例外では無い。現時点も躓いている。

多くの人が躓く原因は、

  • web上、xcode での設定方法がスマートではなく、それが頻繁に変わる
  • 上記のために、ぐぐっても古い情報が大量に出てきてますます混乱する
  • 用語がよくわからない

ということではないだろうか。

というわけで、iOSアプリをAppStoreに公開する場合に理解が必要な用語について、とりあえず3つだけだけどまとめてみた。

Provisioning Profile とは:

 証明書、AppID、デバイス(端末)情報を組みにしたもの?
 端末を所有していないと作成できない
 以下で作成・管理できる
  https://developer.apple.com/account/ios/profile/profileList.action
  ※ このページは Provisioning だけでなく、認証・AppID・デバイスなども管理

App ID とは:

 アプリケーションを識別するID?
 一旦作成すると削除出来ない
 以下で作成・管理可能
  https://developer.apple.com/account/ios/identifiers/bundle/bundleCreate.action
 「App ID Description」、「App ID Prefix」「App ID Suffix」等から構成される
  「App ID Description」は単なる名前。
   例:"MyApp"
   「App ID Suffix」が異なっていれば、同じ名前の AppID を生成可能
  「App ID Prefix」は自動的に生成される
  「App ID Suffix」には「Explicit App ID」と「Wildcard App ID」の2種類がある
   == Bundle ID ?
   "com.domainname.MyApp" のような形式が推奨される
 「App Services」:アプリケーションが提供するサービスを選択可能

Bundle ID とは:

 アプリケーションバイナリとAppStore上のアプリ情報とを紐付けるID?
 == App ID の「App ID Suffix」?

広告PV・収益の推移

temp

上図は2015/01~2016/01までの(webコンテンツ+アプリ)広告月間PVの推移だ。
去年12月は過去最高だったが、先月も前月比+19%増で、過去最高を更新することができた。
今年に入ってから C++解説各ページの検索順位が上がり、おおくのページが1位になったおかげだ。

temp2

上図は2015/01~2016/01までの(webコンテンツ+アプリ)広告収入の推移だ。
PV数は増えているのに、収益は増えていない。
実はwebコンテンツ広告収入が大きく落ち込んだ。

temp3

上図 webコンテンツのみの週間広告収入の推移グラフだ。
正月の落ち込みが大きく、これが足を引っ張る結果となった。

が、1月末には持ち直しており、今後は12月並に戻るのではないかと期待している。

poker AI アルゴリズムメモ

  hs = 対ランダムハンドに対する AI 手札の勝つ確率;
  if( check 可能 ) {
    rr = 勝率 / 残っている相手人数;
    if ( rr <= 1.0 ) {
        //  リターン率が1以下の場合は、チェックまたはレイズ(ブラフ)
        //  リターン率が小さいほど、また残っている相手が多いほどレイズ(ブラフ)率を下げる
        th = thc = rr, AI固有パラメータからチェック率を計算
    } else {
        //  リターン率が1より大きい場合は、チェックまたはレイズ
        th = thc = rr, AI固有パラメータからチェック率を計算
    }
    リレイズ・リリレイズの場合は th を大きくする
  } else {
    potOdds = ポットオッズ;
    プリフロップの場合は、期待勝率 > 1/相手人数 ならば賭けにのってもいいはずなので、potOdds を調整
    rr = ポットオッズからリターン率計算;
    if( rr <= 1.0 ) {
        //  リターン率が1以下の場合は、フォールドまたはレイズ(ブラフ)
        //  リターン率が小さいほど、また残っている相手が多いほどレイズ(ブラフ)率を下げる
        th = thc = rr, AI固有パラメータからフォールド率を計算
    } else {
        //  リターン率が1より大きい場合は、コールまたはレイズ
        th = 0;
        thc = rr, AI固有パラメータからチェック率を計算
    }
  }
  ポジションにより th, thc を調整(ボタンからの距離によりレイズ率を下げる)
  [0, 1) の乱数 r を生成し、r <= th ならばチェック、r > th && r <= thc ならばコール、r > th ならばレイズ

AI固有パラメータ:
rr ごとのチェック確率(check可能な場合)
rr ごとのフォールド確率(check不可の場合)
rr ごとのレイズ確率(check不可の場合)