Matlab实现:
A = [-1 3; 7 1];
b = [6; 35];
c = [-7; -9];%标准格式是求min,此题为max,需要转换一下
lb = [0; 0];%x值的初始范围下界
ub=[inf;inf];%x值的初始范围上界
optX = [0; 0];%存放最优解的x,初始迭代点(0,0)
optVal = 0;%最优解
[x, fit, exitF, iter] = BranchBound1(A, b, c, [], [], lb, ub, optX, optVal, 0)
%A,b,c分别对应此题的不等式约束系数矩阵,不等式约束常数向量,目标函数系数向量
%Aeq 等式约束系数矩阵, Beq 等式约束常数向量
%vlb 定义域的下界 vub 定义域的上界
%optXin 每次迭代的最优x optF 每次迭代最优的f值 iter迭代次数
function [xstar, fxstar, flagOut, iter] = BranchBound1(A, b, c, Aeq, Beq, vlb, vub, optXin, optF, iter)
global optX optVal optFlag;%将最优解定义为全局变量
iter = iter + 1;
optX = optXin; optVal = optF;%更新迭代得到的值
% options = optimoptions("linprog", 'Algorithm', 'interior-point-legacy', 'display', 'none');
[x, fit, status] = linprog(c, A, b, Aeq, Beq, vlb, vub, []);
%status返回算法迭代停止原因
%status = 1