[過去ログ] 【オセロ,将棋】ボードゲーム【囲碁,War】 (1002レス)
上下前次1-新
このスレッドは過去ログ倉庫に格納されています。
次スレ検索 歴削→次スレ 栞削→次スレ 過去ログメニュー
310(283): 2015/08/18(火)16:59 ID:QcCJSSMl(1/2) AAS
どなたか教えていただけますか?
最近、オセロAIのプログラミングをCで行っています。
今は、探索ロジックの勉強のため、終盤の完全読みを作っています。
置換表付negaMax、置換表付PVSは通常の探索ではきちんと動作しています。
現在MTD(f)にとりかかりました。MTD(f)では、ドライバは擬似コードそのまま。
テスト関数は置換表付negaMaxを流用していますが、そのままだとFail-LowとminMax値
の区別がつかずに、Fail-Lowの指し手を返してしまうので、初段のみαを-1する事で、
内部的に区別できるようにしています。
動作確認にいくつかテストケースでテストしましたが、FFO#40の時におかしな事がおきます。
(FFO:外部リンク[html]:www.radagast.se)
問題)本来の評価値は+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)といえば置換法を再利用する事が前提です。
どこかに誤りがあるのではないかと思います。
同じような問題に遭遇した人はいますか?
上下前次1-新書関写板覧索設栞歴
あと 692 レスあります
スレ情報 赤レス抽出 画像レス抽出 歴の未読スレ
ぬこの手 ぬこTOP 0.019s