Discussion:
[問題] min-max search
(时间太久无法回复)
!H45
2006-09-15 00:03:41 UTC
Permalink
※ 引述《liwon (誰會樂高Lejos程式SHUN)》之銘言:
: 請問井字遊戲
: 用遞迴寫min-max search
: 因為每跑一次他記憶體會增加
: 所以請問他可以限制搜尋的深度嗎?

int AlphaBeta(int depth, int alpha, int beta)
{
if (depth == 0)
return Evaluate();
GenerateLegalMoves();
while (MovesLeft()) {
MakeNextMove();
val = -AlphaBeta(depth - 1, -beta, -alpha);
UnmakeMove();
if (val >= beta)
return beta;
if (val > alpha)
alpha = val;
}
return alpha;
}

by google.

上面的程式碼是在我硬碟中記錄的原始資料
你的答案就是 depth 的初始值

alphabeta 的資料都很舊了,但很意外的,書上並沒有著墨太多
這方面的演算法實在需要自己好好努力啊....

到最後你就會知道 Evaluate() 是最難的部分....

--
※ 發信站: 批踢踢實業坊(ptt.cc)
◆ From: 140.115.205.85
誰會樂高Lejos程式SHUN
2006-09-15 05:46:59 UTC
Permalink
: : 請問井字遊戲
: : 用遞迴寫min-max search
: : 因為每跑一次他記憶體會增加
: : 所以請問他可以限制搜尋的深度嗎?
: int AlphaBeta(int depth, int alpha, int beta)
: {
: if (depth == 0)
: return Evaluate();
: GenerateLegalMoves();
: while (MovesLeft()) {
: MakeNextMove();
: val = -AlphaBeta(depth - 1, -beta, -alpha);
: UnmakeMove();
: if (val >= beta)
: return beta;
: if (val > alpha)
: alpha = val;
: }
: return alpha;
: }
: by google.
: 上面的程式碼是在我硬碟中記錄的原始資料
: 你的答案就是 depth 的初始值
: alphabeta 的資料都很舊了,但很意外的,書上並沒有著墨太多
: 這方面的演算法實在需要自己好好努力啊....
: 到最後你就會知道 Evaluate() 是最難的部分....

我想問的是 是不是只有AlphaBeta cut可以設定深度

Min max的話要一定要全部展開 還是也能設定深度?

--
※ 發信站: 批踢踢實業坊(ptt.cc)
◆ From: 218.165.134.161
!H45
2006-09-15 06:17:39 UTC
Permalink
※ 引述《liwon (誰會樂高Lejos程式SHUN)》之銘言:
: : int AlphaBeta(int depth, int alpha, int beta)
: : {
: : if (depth == 0)
: : return Evaluate();
: : GenerateLegalMoves();
: : while (MovesLeft()) {
: : MakeNextMove();
: : val = -AlphaBeta(depth - 1, -beta, -alpha);
: : UnmakeMove();
: : if (val >= beta)
: : return beta;
: : if (val > alpha)
: : alpha = val;
: : }
: : return alpha;
: : }
: : by google.
: : 上面的程式碼是在我硬碟中記錄的原始資料
: : 你的答案就是 depth 的初始值
: : alphabeta 的資料都很舊了,但很意外的,書上並沒有著墨太多
: : 這方面的演算法實在需要自己好好努力啊....
: : 到最後你就會知道 Evaluate() 是最難的部分....
: 我想問的是 是不是只有AlphaBeta cut可以設定深度
: Min max的話要一定要全部展開 還是也能設定深度?

Alphabeta 是由 min max 延伸出來的

何不把下面這段拿掉試試?
if (depth == 0)
return Evaluate();

不懂的話先給你出個作業
把這整段程式碼的每一行都填上中文註解,然後再來發問
不知道這個要求會不會太過份了?

--
※ 發信站: 批踢踢實業坊(ptt.cc)
◆ From: 140.115.205.85

Loading...