投稿

第一回AI麻雀大会開催しました

先日公開した AI麻雀サーバ を利用して 第一回AI麻雀大会を開きました。 第一回ということでとりあえず都合のついた二人だけで対戦しました。 まずユーザのプロフィール紹介。 ユーザ名 戦略の概要 developing 喰いタンのみ、役牌のみなどを狙い誰よりも早く上がることを目指す shizimily7 シャンテン数が一番小さくなるものを計算して捨て牌を選択。役があるかは考慮せず リーチを掛けることによって最低限の役を確保する戦略 そして結果の概要。 ユーザ名 勝利回数 developing 5 shizimily7 93 *引き分け 2回 100回行った対戦の平均点数は次のようになりました。 ユーザ名 平均点数 developing 22942 shizimily7 30638 sampleAI1 22368 sampleAI2 22056 結果としてはshizimily7の圧勝。結果を解析すると、上がり回数、平均上がり得点ともにdevelopingより優秀。特に普通に 七対子や大三元を上がるなどソツのない優秀なAIに仕上がる。developingは鳴きを駆使して早上がりを目指す戦略にであったが上がり回数でも shizimily7を下回っていることを考えると、もう少しプログラムの作り込みに期待したいところ。    

麻雀のAIサーバ作りました

麻雀のAI( Artificial intelligence)サーバを作りました。 https://github.com/kentan/SmartBird 最近では電王戦と称した将棋のAIが話題ですが、 麻雀のAIを作っていろいろ遊んでみたくしてみたくなり、 このたびAIサーバを作成してみました。 将棋・チェス・碁などはいわゆる「 二人ゼロ和有限確定完全情報ゲーム 」と呼ばれるもので、 簡単にいうと、下記のようなゲームのことを意味します。 一方の負け点数が他方の勝ち点数になる(二人ゼロ和) 戦略の数が有限(有限) サイコロをふるなどの運要素がない(確定) 戦略を判断するための情報を全部知ることが出来る(完全情報) 有限で完全情報であるゲームは基本的にコンピュータのリソースをふんだんに使うと強くなります。 10年ほど前にはプロの相手にならなかった将棋のAIがちらほら勝てるようになったのもそのためです。 それに対し、麻雀は 4人ゲーム(Not 二人ゼロ和) 次に選択できる手が(ツモる牌)が確定的でない(Not 確定) 戦略を決定するための情報のほとんどを知ることが出来ない(Not 完全情報) といった特徴があり、将棋や碁よりもAIの難易度が高いといえます。

App Ranking Historyにチャート機能を実装した

イメージ
AppleのRSSからiPhoneアプリのランキングを取得する App Ranking History にチャートを導入してみました。 気になるアプリのランキング推移をチャートで確認できます。 google chart api を使って作りました。 定番のchartはひと通り揃ってていい感じです。 一応スマフォでも見れるようには作りましたが、レイアウトとか見栄えが若干いまいち。 iPhoneのサファリで株価とかgoogle検索すると綺麗に表示されるんだけど、これはどうやってるんだろうか。これもgoogle chart apiつかってるのだろうか。 ところで、このサービス、暇な時にちょこちょこいじってましたが、ここまで来ると次はアプリ名で検索とかしたくなりますね。まあそれは気が向いた時にでもやってみます。

iOSアプリトラッカー アップデートしました

イメージ
前にブログで紹介した iTunesストアで1位をとったアプリを時系列で表示させる iOSアプリトラッカー をちょっとだけ機能拡張しました。 今回の修正では1位だけじゃなくて2位以降も表示出来るようにしました。 日付のところをクリックすると、今まではiTunesストアのアプリページに飛んでいたのですが、今回からは次のような画面に遷移して2位以降のアプリも見ることができます。
FacebookのCOOであるシェリル・サンドバーグが書いた女性のキャリアについての本。 先日日本語版も発売され、Amazonのランキング上位をキープし続けているようだ。 日本のメディアを通して見るアメリカは、女性の活躍に対して好意的であり先進的であるように思っていた。数字でこそまだまだ社会進出の割合が低いようだが、これは時間の問題であり20年後にはすんなりと多くの女性が社会の重要な地位を占めるのだろうと思っていた。 しかし、本書によれば、日本とそう変わらず、家事・育児が女性が行うことを前提とする社会的風潮や、仕事に対して活発な女性に対するネガティブな捉え方、またキャリアアップのチャンスを自ら逃してしまう要因が存在するとのことだ。 これらについて本書では興味深い研究事例が紹介されている。 10年ほどまえ、ビジネススクールの学生たちを2つのグループに分け、とあるビジネスパーソンが人脈を駆使して投資家として成功しようとしている事例を読ませた。その上で、その人に対してどのような印象を持ったか感想を述べてもらうという実験が行われた。 2つのグループに渡された事例は全く同じであるが、主人公の名前だけ変えられている。 一方は女性の名前の主人公で、他方は男性の名前の主人公であった。 結果、男性の名前が書かれた事例を読んだグループは主人公に対して好意的な印象を持ち、ともに働きたいとコメントをしたのに対し、女性の名前が書かれた事例を読んだグループは、否定的な印象を持ち、仕事をともにすることを嫌がった。 男性は仕事の評価と個人の評価が正の相関を持つのに対し、女性は負の相関を持つという、驚きつつも胸に手を当てて見れば、そことなく腑に落ちる結論が導かれている。 また周囲の人間の評価以外にも、不利な要素が潜む。 本書によれば、総じて自分に対する評価というものは、女性よりも男性のほうが高い傾向にあるとのことだ。客観的に見れば同程度だとしても、男性は自分を高く評価する傾向にある。 このため、何か新しいチャンスが有った時、積極的に飛びつくのは圧倒的に男性が多い。 そしてその結果、成果を出すのも男性が多くなる。こちらも言われてみれば心当たりのある話しである。 本書を非常に興味深い気持ちで読ま...

ランキング1位のiPhoneアプリの履歴を表示するサービス作ってみた

イメージ
定期的に新しいアプリが話題に上がってくるiPhoneアプリ。 毎日App Storeを眺めてても面白いんですが、忙しくなるとしばらく見ないこともしばしば。 なので、 ランキング1位のアプリを毎日記録して一覧表示するサービスを作ってみました。 iPhoneアプリだけでなく、iPadアプリも見ることができます。 それにしてもパズドラすごいですね。さすが1300万ダウンロード。 元になるデータはapple公式の iTunes Store RSS これをgoogle apps engine上でかいたpythonで一日一回cronで取得しています。 今回のアプリでは日本のメディアタイプがiTune Appsのデータを取得していますが、プルダウンの選択を変えればmusicとかも取得出来ます。

javaからscalaを呼び出すサンプルプログラム

最近話題のscala。 コンパイル結果が.classファイルになるので、javaから普通に呼び出すことが出来るみたいです。 なので、scalaのコードをコンパイルして、jarを生成し、そのjarをjavaから呼び出すサンプルプログラムを書いてみました。 まずscalaのコード。 object JarMain { def main(args:Array[String]) = { println("Hi, I am Scala."); println("I've got your message:"); for (elem <- args) println("> " + elem); } } これをscalaでコンパイルした後、javaのコマンドを用いてjarを生成する。 それを呼び出すjavaのコードは下記のよう。 public class Main { public static void main(String args[]){ String[] strs={"Hi, I'm Java"}; JarMain.main(strs); } } で、実行結果 Hi, I am Scala. I've got your message: > Hi, I'm Java 簡単。そして地味にすごい。 最終的にjarに落としこむことができるので、ひとつのjavaプロジェクトの中で一部分だけscalaで書くということが簡単に実現できる。 これはtraditionalで大規模な開発を行なっている企業には特に嬉しい。 一つのプロジェクトで一部分だけscalaでスモールスタートして、様子を検証しつつ、上手く行ったら徐々にscalaに置き換えていくストーリーが実現可能になる。 この点は非常に重要で、例えば一昔まえに流行ったruby on railsなんかだと、導入するとなったら全部変えなきゃいけないので、アーキテクチャ全体の変更が必要だわ、多数のエンジニアの教育が必要だわ、とかくtraditionalな会社では導入の敷居がかなり高かった。 でもsc...