0

我正在尝试为分支定界算法实现递归函数。每次递归调用我的算法时,我都会在递归调用中更改我的 lb 和 ub 值。它显示错误UB must be a real valued nx by 1 column vertor error in MATLAB。我的代码附在下面:

function [cost] = BB(c, A, b, lb, ub, ctype, vartype, s, xmin, fmin, fid, NumberofNodes,min_cost, val);



[xmin_last, fmin_last, status] = glpk (c, A, b, lb, ub, ctype, vartype, s)      %GLPK function
frac_value_1= find(xmin_last > 0.999);

xmin(frac_value_1)=1;

frac_value_2= find(xmin_last < 0.0001);

xmin(frac_value_2)=0;


frac_value=intersect(find (xmin_last > 0) , find( xmin_last < 1)) ; %positions of fractional variables

size(frac_value,1);
    if (isempty(frac_value)) 
    fprintf(fid,'no fractional value');
    fprintf(fid,'\n\n');

        cost = fmin_last
        return

else
round_value=frac_value(1)

one_value_cost=find ( xmin_last== 1 )       %variables with value 1


    zero_value_cost=find ( xmin_last==0)        %variables with value 0


ub(zero_value_cost)=0           %changing ub for 0 values

%val=0
[cost_0] = BB(c, A, b, lb, ub(round_value)=0, ctype, vartype, s, xmin_last(round_value)=0, fmin_last, fid, NumberofNodes,min_cost,val=0);

%val=1
[cost_1] = BB(c, A, b, lb(round_value)=1, ub, ctype, vartype, s, xmin_last(round_value)=1, fmin_last, fid, NumberofNodes,min_cost, val=1);



end

min_cost = min(cost_0, cost_1)
endfunction;

它显示ub(round_value)=0和的错误lb(round_value)=1。任何帮助将不胜感激

4

1 回答 1

0

如果 find 函数找到多个值,它将返回一个包含所有等于 0 或 1 的条目的向量。您应该尝试选择 zero_value_cost 的第一个元素。

如果 find 函数没有找到 1 或 0,它将返回一个空向量。您确定这些值在您正在搜索的向量中吗?

于 2015-05-28T22:25:30.963 回答