羊の人工知能研究 ~将棋AI開発の日々~

将棋、リバーシのAIプログラミングを中心にその開発過程及び記録を頑張って更新していきます。

スポンサーサイト

上記の広告は1ヶ月以上更新のないブログに表示されています。
新しい記事を書く事で広告が消せます。

[iPhone][IronReversi]iPhoneアプリIronReversi公開しました

ついに本ブログ初のリバーシ「IronReversi」公開です。

評価関数はショボショボなので、序中盤で圧倒できれば勝てます。
※私はもっとショボショボなのでLv2位で限界です。
終盤はLv×2の深さまで完全読み、Lv×2 + 2まで必勝読み(だったはず)しています。
有名なZebraの終盤ソルバー並に高速な終盤探索を行っているのでiPhone上でも深さ20を超える探索を可能にしています。

終盤探索の詳細は後ほど公開するとは思いますが、Zebraの終盤ソルバーにも負けず劣らずのAIとなっていますので、自身のある人には楽しんで頂けると思います。
(アセンブラレベルのコードは使っていません。)

WZebraのような解析機能が付いていますのiPhoneやiPod Touchを持っている方は、ぜひ一度遊んでみてください。

詳細はこちらで
ほんまの走り書き技術メモ:ついにiPhoneアプリ公開しました
スポンサーサイト

お久しぶりです。
はてなダイアリーの日記は見てなかったので、いきなり公開されたかとビックリしました。
速くて強そうなので興味はあるのですが、iPhone持ってないので買えないです(泣

  • 2009年02月18日水
  • URL
  • アベント #CfFZ5oX2
  • 編集

リバーシ作ってみました

このサイトに影響されてリバーシを組んでみました。
宜しければ遊んで下さい。
直した方が良い点があればご指摘下さい。
URLの中の「簡易リバーシ」と言うのがそれです。

  • 2009年03月01日日
  • URL
  • Lbfuvab #U6Sg.t.k
  • 編集

簡易リバーシ拝見しました!

Lbfuvabさん>
なんか影響して作って頂いて凄く光栄です。
6手読みでも、適当に打つと負けますね!
現在のところ、位置による評価のみのようですので、序盤が少し苦手なようですね。
定石を組み込む、もしくは(発展的)開放度理論や出来ればパターン評価を組むともっと強くなると思います。

ソースを拝見しての感想としては、NegaAlphaで毎回8×8の盤面を舐めているため遅くなっていると思われます。空場所リストを作り、探索前に浅い探索を行うMoveOrderingを行うことで、ある程度速度が向上すると思います。
あとは、チェック等に
1.インデックスを使う
2.各セル専用の関数を用意し、関数ポインタテーブルを使用して各セルのチェック、裏返しを行う
を採用すると、更に速度が向上します。私の場合2を使っており、各色にも特化した関数を良いしているため、もの凄い量の関数になていますwww
今後強くすることをお考えならば、WZebraを使い評価関数の精度を向上させてはどうでしょうか。

今後も頑張ってください。

PS:
関数の二重定義のことをオーバーロードと言います。

  • 2009年03月12日木
  • URL
  • 羊 #-
  • 編集

あっ大切なものを忘れていました。
置換表の実装をすることを、おすすめします。

  • 2009年03月12日木
  • URL
  • 羊 #-
  • 編集

ご返答いただき有難うございます

ご無沙汰しておりました。返信有難うございます。

>現在のところ、位置による評価のみのようですので、序盤が少し苦手なようですね。
>定石を組み込む、もしくは(発展的)開放度理論や出来ればパターン評価を組むともっと強くなると思います。

開放度理論組み込んでみました(^0^)/
・・・が係数付けって難しいですねorz
(評価値) = k*(開放度) + (場所による評価値)・・・・・(kは係数)
今は暫定的にk=2にしていますが。
定石は現在デバッグ中です(バグが沢山・・・)

>探索前に浅い探索を行うMoveOrderingを行うことで、ある程度速度が向上すると思います。
>あとは、チェック等に
>1.インデックスを使う
>2.各セル専用の関数を用意し、関数ポインタテーブルを使用して各セルのチェック、裏返しを行う
>を採用すると、更に速度が向上します。私の場合2を使っており、各色にも特化した関数を良いしているため、もの凄い量の関数になていますwww

えーと、Move Orderingは2~4手の探索のよって手を並び替える事ですよね。
了解しました。

後、インデックスによる判定はこのサイトで勉強させていただいたのですが、
 「2.各セル専用の関数を用意し、関数ポインタテーブルを使用して各セルのチェック、裏返しを行う」
↑というのはちょっと見当がつかないのでもうすこし詳しくお願いできますかm(_ _)m

  • 2009年04月01日水
  • URL
  • Lbfuvab #-
  • 編集

各セル専用の関数とは?

簡単に言いますとA1~H8までの計64マスそれぞれに関する裏返すための関数×白黒それぞれ分用意して
int black_moveA1();
 ・
 ・
int black_moveH8();
int white_moveA1()
 ・
 ・
int white_moveH8();
これを関数テーブルとして配列に保存しておきます。
int (*move[2][64])() = {
{black_moveA1, black_moveB1, black_moveC1,,,,,,},
{white_moveA1, white_moveB1, white_move1C,,,,,,},
};
こうすることで、白がD3(配列番号19)に打つ場合には
(*move[1][19])();
という風に呼び出します。

これをすると何がうれしいかというと、各セルに特化した関数が作成でき、余計なif文や繰り返しを省くことが出来ます。(これによりパイプライン破壊を最小限に抑えることができ、高速化を図っています)
また、私の場合は書く関数の中身もマクロを異常なほど多用しており、インライン展開しまくっています。(マクロ多用の有名な例としては、「えみりゅん」というリバーシで異常なほど展開をしています。。・・・現在HPは閉鎖されているがプラグインは配布されているようなのでどこかで落とせると思います。)

更に、裏返すだけではなく私の場合は
・置けるかのチェック
・置いたときに幾つ裏返せるかカウント
・ノーマル裏返し
・開放度を返す裏返し
等各機能に特化した関数を各セル×各色に用意しているため恐ろしいソースになっています。(マクロを上手く利用するとコンパクトになります。)

こんな感じでコツコツやれば少しずつ速くなってくると思います。後は盤面の表現方法をビットボードにする等頑張ってみてください。(デバグもw

  • 2009年04月08日水
  • URL
  • 羊 #-
  • 編集

iPhoneで研究アプリ!と思い検索してみたのですがもう公開はしていないのですね^^;

  • 2012年02月06日月
  • URL
  • WQ #j/anxa/I
  • 編集

アップルストアに無くて悲しいです

アップルストアで探したのですが見つかりません…
すごく欲しいアプリだけに残念でなりません。
またアップして頂けないでしょうか?

コメントの投稿

URL
コメント
パスワード
秘密
管理者にだけ表示を許可する

トラックバック

トラックバックURLはこちら
http://hitsujiai.blog48.fc2.com/tb.php/31-099864b0
上記広告は1ヶ月以上更新のないブログに表示されています。新しい記事を書くことで広告を消せます。