数値解析Ⅱ 五目並べプログラムを作る

数値解析Ⅱ
~五目並べプログラムを作る~
F班 メンバー
班長 雨堤
アルゴリズム解析 角田
竹林
ppt作成 清水
智宏
泰彬
秀高
貴史
①既存の五目並べプログラムをプレイ
参考 宍戸輝光氏作成 「五目ならべゲーム」
②五目並べとは?
先手・後手交互に石を打って、先に
一直線上に五つの石を並べたほう
が勝ち
黒番ならAかBに置けば次手で
勝ちが確定
A
○
B
○
白番ならAかBに置いて黒の勝
ちを阻止
三つの石の並びが勝負を左右する
③宍戸氏のプログラムの特徴
盤面評価からCPUの手の決定までの流れ
・16×16 256マス全ての盤面にある石の場所と数を記憶する
・配石可能な場所に重要度の高い順に点数をつける
例)自分が4連しており、勝ちが確定する場所には15,000点
相手が4連しており、置かなければ負けが確定する場所には12,000点
自分が2連しており、その両端に置くことにより3連ができる場所には10点
など
・全ての盤面評価が終わると、その中から最高点の場所にCPUの手を決定
最高点が複数存在する場合は、その中からランダムで選出
④宍戸氏のプログラムの問題点
・序盤に何の戦略性も無い無意味な手を打つ
・相手の動きに合わせて打つ⇔例え先手でも出遅れる
例 CPU後手の場合
● :先手HUMAN
● :後手CPU
HUMかCPUのいずれかが
一直線上の連続する5点の
うち2点に並ぶまで意味の
無い手を打ち続ける
⑤プログラムの是正
→序盤の手順に戦略性のある定石を導入
定石とは?
⑤プログラムの是正
CPU先手の時、HUMが離
れた場所に打ってきた場合
HUM先手の時、第一手に
端に置かれた場合
⑤プログラムの是正
・相手が奇抜な手を打ってきた時にも定石を交えな
がら対応できるプログラムが必要
・定石の数は豊富でその全てに対応するプログラム
を作成する必要がある
挑戦するも知識不足に加え、バグが無くならず断
念・・・・
⑥せめて無駄な手を無くす
とにかく序盤に無理やりにでも2連を作る
9
Ⅰ)CPU先手(●)の場合
第一手は有無を言わさず座標[9,9]
9
ⅰ)HUM(●)が●の直近周囲(①~
① ② ③
④
⑤
⑥ ⑦ ⑧
⑧)に無い場合
9
①~⑧からランダムに選択して決定
9
●が二つ並んだので以降は既存のプ
ログラムに準じて手を決定
⑥せめて無駄な手を無くす
とにかく序盤に無理やりにでも2連を作る
9
Ⅰ)CPU先手(●)の場合
×
9
ⅱ)HUM(●)が●の直近周囲(①~⑧)
のいずれかにある場合
① ② ③
④
⑤
⑥ ⑦ ⑧
●を挟んで●の反対側を除く6箇所から
ランダムに選択して決定
9
第一手は有無を言わさず座標[9,9]
(図の例では●が⑥にある場合は③を
除外)
9
●が二つ並んだので以降は既存のプロ
グラムに準じて手を決定
⑥せめて無駄な手を無くす
とにかく序盤に無理やりにでも2連を作る
Ⅱ)HUM先手(●)の場合
ⅰ)HUMの第一手が座標[9,9]に無い場合
有無を言わさず座標[9,9]にCPUの手を決定
9
a)HUMの第2手(トータル3手目)の場所の
情報は無視
CPU一手目の囲りに注目
一手目の囲りに●が0個の場合
9
①~⑧からランダムに選択してCPUの手
を決定
① ② ③
④
⑤
⑥ ⑦ ⑧
⑥せめて無駄な手を無くす
とにかく序盤に無理やりにでも2連を作る
Ⅱ)HUM先手(●)の場合
ⅰ)HUMの第一手が座標[9,9]に無い場合
有無を言わさず座標[9,9]にCPUの手を決定
b)HUMの第2手(トータル3手目)の場所の
情報は無視
CPU一手目の囲りに注目
一手目の囲りに●が1個の場合
●を挟んで●の反対側を除く6箇所からラン
ダムに選択して決定
(図の例では●が④にある場合は⑤を除外)
① ② ③
⑤
⑥ ⑦ ⑧
×
⑥せめて無駄な手を無くす
とにかく序盤に無理やりにでも2連を作る
Ⅱ)HUM先手(●)の場合
ⅰ)HUMの第一手が座標[9,9]に無い場合
有無を言わさず座標[9,9]にCPUの手を決定
CPU一手目の囲りに注目
一手目の囲りに●が2個の場合
●を挟んで●の反対側を除く5箇所からラン
ダムに選択して決定
(図の例では●が①と④にある場合は⑤と⑧を除外)
② ③
⑤
⑥ ⑦ ⑧
×
×
c)HUMの第2手(トータル3手目)の場所の
情報は無視
⑥せめて無駄な手を無くす
とにかく序盤に無理やりにでも2連を作る
Ⅱ)HUM先手(●)の場合
ⅱ)HUMの第一手が座標[9,9]に有る場合
有無を言わさず座標[10,10]にCPUの手を決定
a)HUMの第2手(トータル3手目)の場所の
情報は無視
CPU一手目の囲りに注目
●を挟んで●の反対側を除く5箇所からラン
ダムに選択して決定
(図の例では●が①と④にある場合は⑤と⑧を除外)
×
×
一手目の囲りに●が2個の場合
② ③
⑤
⑥ ⑦ ⑧
⑥せめて無駄な手を無くす
とにかく序盤に無理やりにでも2連を作る
Ⅱ)HUM先手(●)の場合
ⅱ)HUMの第一手が座標[9,9]に有る場合
有無を言わさず座標[10,10]にCPUの手を決定
b)HUMの第2手(トータル3手目)の場所の
情報は無視
CPU一手目の囲りに注目
●を挟んで●の反対側を除く6箇所からラン
ダムに選択して決定
×
一手目の囲りに●が1個の場合
②③
④
⑤
⑥⑦⑧
⑥せめて無駄な手を無くす
とにかく序盤に無理やりにでも2連を作る
Ⅰ-ⅰ)CPU先手-黒が近くにない場合
Ⅱ-ⅰ)HUM先手-黒が近くにない場合
Ⅰ-ⅱ)CPU先手-黒が近くに有る場合
Ⅱ-ⅰ)HUM先手-黒が近くに1個の場合
Ⅱ-ⅰ)HUM先手-黒が近くに1個の場合
⑥考察と更なる改良点
オセロと違い、広い盤面のどこから打ち始めてもいいという条件(最初から端っこ
とか)が、特に序盤のCPUの手を決めるプログラムを作ることはなかなか難し
かった。
宍戸氏のプログラムにおける序盤の脆弱性を無くす為に、無理やり二連を作る
ように修正を施しましたが、それによって新たな問題が出てきた。
例)HUM先手 (9,9)に無い場合
9
既存のプログラムでは
対処できていたことに
対処出来なくなった
9
Fin