求解线性规划问题:
min z = f(x)
s.t. Ax≤b,
Aeqx=beq,
lb≤x≤ub,
其中,f, x, b, beq, lb, ub为向量, A, Aeq为矩阵。
【linprog函数】
[x,fval,exitflag,output,lambda]=linprog(f,A,b,Aeq,beq,lb,ub,x0,options)
输入综量:
- 求解最小化问题 min *x 条件 A*x ≤ b Aeq*x = beq lb ≤ x ≤ ub,如果没有不等式就设置A = [ ]和b = [ ],其他同理。
- 设置初始点x0,这个选择项只是对medium-scale算法有效。默认的large-scale算法和简单的算法忽略任何初始点。
- 最小化带有参数项的线性规划问题。其中options可以使用optimset来设置。
输出综量:
- 返回目标函数最优解x,
- 和在x处的值:fval = *x,
- 是否存在exitflag标志,
- 优化解结构体output,
- 拉格朗日乘子结构体lambda。
或使用:
x = linprog(problem)
功能:对problem求最小值,其中problem是一个结构体。通过优化工具箱来创建,导入到MATLAB工作空间。
题目:
min z = -2*x1 - x2 + x3
s.t. x1 + x2 + 2*x3 = 6 ,
x1 + 4*x2 - x3 <= 4 ,
2*x1 - 2*x2 + x3 <= 12 ,
x1, x2, x3 >= 0 .
代码:
f = [-2; -1; 1];
A = [1 4 -1; 2 -2 1];
b = [4; 12];
Aeq = [1 1 2];
beq = 6;
lb = zeros(3,1);
x0 = [0; 0; 0]
options = optimset('LargeScale', 'on', 'Display', 'iter', 'TolFun', 1e-3, 'maxiter', 4);
[x,fval,exitflag,output,lambda] = linprog(f,A,b,Aeq,beq,lb,[],x0,options)