2013-04-11 60 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

相关问题