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

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

スポンサーサイト

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

チェックと裏返し処理を一度にする

 今回は『チェックと裏返し処理を一度にする』というタイトルですが、一見意味のないようなことに思えますが、実はとても意味のある処理です。

 『checkを行ってmoveをする』のとどう違うのかというと、実は一気にすると少し処理が軽くなるんです!!実現方法としては『再帰を使ったチェック』と『再帰を使った裏返し』を足したような感じです。処理の簡単な図解としては次の図15のような感じです。



図15:チェックと裏返し処理を一度にする処理の図解


 わかりずらいですが、上の図のようにチェックに裏返すための機能を付けただけなので、再帰を1回するだけで、チェックと裏返すという操作が一気にできてしまいます。また、裏返せないときは末端から裏返せない(FALSE)が返って来るのでそのときは何もしなければよいだけなのです。これならば、check関数を実行してmove関数を実行するのと比べて1度の再帰で一気に2つの操作を実現することができます。

 また、今回紹介した『チェックと裏返し処理を一度にする』という操作はAIを作るときにとても有効です。しかし、現在私のリバーシはチェックや裏返しに繰り返しや再帰などのアルゴリズムを使っておらず、別のものを使っています。それがインデックスによる方法です。それは次回から紹介していきたいと思います。



参考ソースファイル
2次元配列の場合
board11.h [DL]
board11.c [DL]

1次元配列の場合
board12.h [DL]
board12.c [DL]



次回予告:将棋の基盤①



↓読んだらクリックお願いします↓


スポンサーサイト

コメントの投稿

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

トラックバック

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