数値解析Ⅱ ~五目並べプログラムを作る~ 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
© Copyright 2024 ExpyDoc