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