2014-02-25 81 views
0

我使用的是最小最大算法的遊戲,因爲有很多的可能性極小極大遞歸花費的時間太長,即使有「α-β剪枝」實施「極小」遞歸

更好的辦法

我的代碼看起來有些東西是這樣的:

min(state,depth,alpha,beta): 
    if stopingCond: 
     return value 

    for moves in allmoves: 
     state.do(move) 
     beta = min(beta, max(state,depth,alpha,beta)) 
     if alpha >= beta: return beta 
    return beta 

max(state,depth,alpha,beta): 
    if stopingCond: 
     return value 

    for moves in allmoves: 
     state.do(move) 
     alpha = max(beta, min(state,depth,alpha,beta)) 
     if alpha >= beta: return alpha 
    return beta 

我知道有時候你可以使用for循環而不是遞歸 ,但我無法找到一個方法來轉換。

如果任何人有一個好主意,我會很高興聽到它!

感謝,

+0

哪個遊戲(知道分支因素)哪個深度? –

+0

mmmm。這看起來像我的最小最大值。 ( – thefourtheye

+0

)遊戲是撲克的變體,每輪可以有1到5次移動,最大深度爲40(5撲克) – ifryed

回答

1

一般在MINMAX遞歸不能用等效迭代算法代替,這就是爲什麼有優化方法,如β-修剪,試圖通過停止遞歸的一些分支機構,以提高性能樹儘快。

對於你的遊戲,minmax(或者一般的遞歸算法)是不可能完全需要的,而且可能有其他方法可以用其他技術找到最優解,但是如果沒有一套精確的規則是不可能的告訴。