【オセロ,将棋】ボードゲーム【囲碁,War】 at GAMEDEV【オセロ,将棋】ボードゲーム【囲碁,War】 - 暇つぶし2ch■コピペモード□スレを通常表示□オプションモード□このスレッドのURL■項目テキスト310:名前は開発中のものです。 15/08/18 16:59:55.72 QcCJSSMl.net どなたか教えていただけますか? 最近、オセロAIのプログラミングをCで行っています。 今は、探索ロジックの勉強のため、終盤の完全読みを作っています。 置換表付negaMax、置換表付PVSは通常の探索ではきちんと動作しています。 現在MTD(f)にとりかかりました。MTD(f)では、ドライバは擬似コードそのまま。 テスト関数は置換表付negaMaxを流用していますが、そのままだとFail-LowとminMax値 の区別がつかずに、Fail-Lowの指し手を返してしまうので、初段のみαを-1する事で、 内部的に区別できるようにしています。 動作確認にいくつかテストケースでテストしましたが、FFO#40の時におかしな事がおきます。 (FFO:http://www.radagast.se/othello/ffotest.html) 問題)本来の評価値は+38(A2B1C1…)なのに、+30が返る。 以下、判明している状況です。 1)置換表を使用せずにMTD(f)を動作させる。 ->正解 2)単体でNull Window Searchを行う。 ->正解 3)置換表を使用してMTD(f)を動作させる。 ->少なくともFFO#40では誤答する 4)FFO#40で失敗する条件は、fにminMAX値より幾分小さい値(黒+30未満)を設定したとき。 5)negaMax初段でαを-1するロジックを入れなくても、同じ事になります。 デバッグで確認したところ、Fail-Highになるべき条件(黒+30や黒+36の時)で、下限値を 返しています。同一条件で、下限をさらに-1してテストしたところ、α<g<βである事が確認 できましたので、minMax値として間違った値が返っていることになります。 どうも原因は置換表にあり、Null Window Searchの中で、何回も再利用していることに あるように思います。とはいえ、MTD(f)といえば置換法を再利用する事が前提です。 どこかに誤りがあるのではないかと思います。 同じような問題に遭遇した人はいますか? 次ページ最新レス表示レスジャンプ類似スレ一覧スレッドの検索話題のニュースおまかせリストオプションしおりを挟むスレッドに書込スレッドの一覧暇つぶし2ch