【问题标题】:Alpha beta Pruning implementation in matlabmatlab中的Alpha beta剪枝实现
【发布时间】:2013-04-11 20:23:09
【问题描述】:

我在调用以下函数时不断收到错误消息。错误是在调用 searchTree.m 期间未分配输出参数 bestboard(可能还有其他参数)。

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

【问题讨论】:

  • 错误总是在递归调用函数...

标签: matlab recursion


【解决方案1】:

这是因为 bestboard 被分配在一个 if 中,没有别的。在您的函数中,如果 turn ~= 2scor &gt;= betadepth &gt; 0 则不会分配给 bestboard。考虑在开始时为其分配一个默认值?

【讨论】:

  • 不,我不会编码,我不知道你的函数在做什么。您需要做的就是确保始终分配bestboard,即使turn ~= 2scor &gt;= betadepth &gt; 0,您希望bestboard 具有什么值?然后只需将行bestboard = [insert your default value here] 添加到函数的第一行即可。
最近更新 更多