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

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

スポンサーサイト

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

2次元配列での盤面表現

 オセロリバーシについての1年半の研究の成果を将棋の更新と共に少しずつ書き記していきます。

ここでは2次元配列を使った場合の盤面の表現方法についてのログです。

 ここでは盤面を2次元配列で表現し、次の図1のように8×8の盤の回りにを設けます。




図1:2次元配列の盤面表現


 配列を宣言した場合、多次元配列であってもメモリは連続した領域に確保されることになっています。(要するに、a[4][4]という4×4の2次元配列を宣言した場合a[0][3]とa[1][0]はメモリ上では隣に位置することになる。)



図2:2次元配列でのメモリの様子


 このことにより、もし壁がない場合、通常裏返せるかのチェックに『相手の色の間繰り返して自分の色があればOK』という条件で済むところに、『盤面の端に来た』という条件を余計に入れる必要があります。この条件を入れないとしたの図3のようになるからです。



図3:壁がない場合のチェック


 上の盤面でB5に黒石が置けるかチェックします(左上方向への探索を例に挙げている)。『相手の色の間繰り返して自分の色があればOK』という条件のみで実行すると、上で説明した配列の性質よりA4を調べた後にH2を調べG1で黒があったので裏返せるという結果になってしまいます。

 だが、この条件は盤面の上端、下端、左端、右端の4つについて判断する必要がある。この先AIを作る再に、チェックするという操作は頻繁に起こることなので、最低でも簡単な処理にしておきたい。

 そこで、壁という領域を余分に設けることにより、『相手の色の間繰り返して自分の色があればOK』という条件だけで済むことになります。なぜなら『相手の色の間繰り返して』とあるので、壁石が来ると裏返せないことになる。一般にこの壁石のことを番兵と呼び(少し違うかな?)線形探索に多く用いられます。



図4:壁がある場合のチェック



参考ソースファイル

board1.h [DL]
board1.c [DL]



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


スポンサーサイト

羊の人工知能研究

1年半のリバーシプログラミングの知識を生かし

将棋のAI研究も開始!?



いや・・・ヤル気はあるんですがまだソース一行も書いてません・・

ヤル気で言えば半年ぐらい前からあるんだけどなかなか忙しくてね


まぁpittrap(リバーシプログラミング仲間?)の将棋進出を知ったので

負けず嫌いな俺の将棋進出のスタートとなったわけですよ!!

(pittrapのブログ→http://d.hatena.ne.jp/pittrap/





まずは、リバーシ→将棋ですから似てるようで全く似ていないので

研究から入らないとね・・・

何せオセロの時も同じだったけど


ルールしか知りませんΣ(-_-,,;)
っていうか知らないルールがあるかも


まぁマズは#intcludeぐらいは頑張って書いてみます・・・



ヤル気があるようでまだ微妙にない羊君の更新でした。。。
まだ期末試験中だったりして



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


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