2013-04-11 117 views
1

我在調用以下函數時不斷收到錯誤。錯誤是輸出參數bestboard(也可能是其他人)在調用searchTree.m期間未分配。Alpha beta修剪在matlab中的實現

function [alpha,bestboard] = searchTree(board,depth,alpha,beta,turn) 

if(depth<=0) 

    alpha=calculateHeuristic(board,changeTurn(turn)); 
    bestboard=board; 
    return 
else 
    child=GenerateChild(board,turn); 
    a=size(child,3); 

    if(turn==2) 

     turn=changeTurn(turn); 
     for i=1:a  
      [score,aboard]=searchTree(child(:,:,i),depth-1,alpha,beta,turn); 
      if(score>alpha) 
       alpha=score; 
       bestboard=child(:,:,i); 
      end 
     end 

     return 
    else 

     for j=1:a 
      turn=changeTurn(turn); 
      [scor,bboard]=searchTree(child(:,:,j),depth-1,alpha,beta,turn); 
      if(scor<beta) 
       beta=scor; 
       bestboard=child(:,:,j); 
       alpha=beta; 
      end 

     end 

    return 
    end 
end 
+0

錯誤總是在遞歸調用函數... – user1747975 2013-04-11 11:48:35

回答

3

這是因爲bestboard是在if沒有別的分配。在您的功能中,如果turn ~= 2scor >= betadepth > 0那麼bestboard將不會被分配給。考慮在開始時給它分配一個默認值?

+0

我該如何解決它可以üplz代碼它.... – user1747975 2013-04-11 11:56:47

+1

不,我不能編碼它,我不知道你的功能在做什麼。所有你需要做的就是確保'bestboard'總是分配給,即使在'turn〜= 2','scor> = beta'和'depth> 0'的情況下,你想要'bestboard'的值爲有?然後,只需在函數的第一行添加'bestboard = [在此插入默認值]'這一行。 – Dan 2013-04-11 11:59:42