intopt.m

来自「采用分支定界算法」· M 代码 · 共 47 行

M
47
字号
function[jie,fval,exflag,time]=intopt(f,a,b,intbegan,aeq,beq,lb,ub)

%这是一个求解整数规划的函数,当不入intbegan的值时默求解线形规划问题
%f,a,b为必须输入的参数,f为目标函数,A*X<=B为不等式约束
%aeq,beq为等式约束,默认为空
%ub为原问题可行域的最大范围,默认为无穷大
%lb为可行域的最小值,默认为0
%intbegan表示从哪一位开始是整数约束,注意要包括这一位,默认为可行解的维数加上1;原问题变成一个线形规划问题
%time表示分支的次数,即分支多少次后得到整数解
%

tic
n=length(f);
if nargin<8   ub=inf*ones(n,1);
    if nargin<7    lb=zeros(n,1);
        if nargin<6    beq=[];
            if nargin<5   aeq=[];
                if nargin<4   intbegan=n+1;
                end
            end
        end
    end
end


[jie,fval,exflag]=linprog(f,a,b,aeq,beq,lb,ub)
global optjie;
global optfval;
global time;
time=0;
optfval=inf;
optjie=[0;0];
[jie,fval,exflag]=branch(f,a,b,aeq,beq,lb,ub,intbegan);
disp('成功了!');
exflag=1;
disp('最优解为optjie=');
optjie
disp('最优结果为');
%optfval=f'*optjie
disp('分支的次数为time=');
time
jie=optjie;
fval=optfval;
toc


⌨️ 快捷键说明

复制代码Ctrl + C
搜索代码Ctrl + F
全屏模式F11
增大字号Ctrl + =
减小字号Ctrl + -
显示快捷键?