【OR】在线Matlab/Octave使用及LP求解

工具链接

Octave online,Web版的matlab,运行速度很快,操作基本与matlab一致
Octave Online
Doc for Octave

线性规划问题求解

线性规划求解流程图如下所示
LP

线性规划问题的标准形式

{ min ⁡ z = C X A X ≤ b X ≥ 0 \left\{ \begin{aligned} &\min z=\mathbf{CX}\\ &\mathbf{A}\mathbf{X}\leq\mathbf{b}\\ &\mathbf{X}\geq 0 \end{aligned} \right. minz=CXAXbX0

求解函数

matlab中线性规划求解函数为linprog

x=linprog(f, A, b, Aeq, beq, lb, ub, x0, options)
[x, fval, exitflag, output, lambda]=linprog(...)

参数说明
f, A, b:表示求解问题为 min ⁡ f T x \min f^Tx minfTx,约束条件为 A x ≤ b Ax\leq b Axb
Aeq, beq:等式约束 A e q x = b e q Aeqx=beq Aeqx=beq
lb, ub:变量 x x x的上界和下界
x0x搜索的起始点
options:表示optimset函数中定义的参数值
fval:目标函数在解x处的值
lambda:表示在解x处的Lagrange乘子

  • lambda.lowerlambda的下界
  • lambda.upperlambda的上界
  • lambda.ineqlinlambda的线性不等式
  • lamdba.eqlinlambda的线性等式

在web版的Octave中linprog只能返回xfval的信息

案例

demo 1

求解模型
min ⁡ Z = − 4 a + b + 7 c s . t { a + b − c = 5 3 a − b + c ≤ 4 a + b − 4 c ≤ − 7 a , b ≥ 0 \min Z=-4a+b+7c\\ s.t \begin{cases} a+b-c=5\\ 3a-b+c\leq 4 \\ a+b-4c\leq -7\\ a, b\geq 0 \end{cases} minZ=4a+b+7cs.ta+bc=53ab+c4a+b4c7a,b0

代码
pkg load optim % 加载求解器
clear all
clc
f=[-4 1 7]'; % 需要写成列向量
A=[3 -1 1; 1 1 -4];
b=[4; -7];
Aeq=[1 1 -1];
beq=[5]; 
vlb=[0, 0, inf]';
vub=[];
[x, fval]=linprog(f, A, b, Aeq, beq, vlb, vub);

demo 2

求解模型
min ⁡ − x ( 1 ) − 1 3 x ( 2 ) s . t . { x ( 1 ) + x ( 2 ) ≤ 2 x ( 1 ) + x ( 2 ) / 4 ≤ 1 x ( 1 ) − x ( 2 ) ≤ 2 − x ( 1 ) / 4 − x ( 2 ) ≤ 1 − x ( 1 ) − x ( 2 ) ≤ − 1 − x ( 1 ) + x ( 2 ) ≤ 2 x ( 1 ) + 1 4 x ( 2 ) = 1 2 1.5 ≥ x ( 1 ) ≥ − 1 1.25 ≥ x ( 2 ) ≥ − 0.5 \min -x(1)-\frac{1}{3}x(2)\\ s.t. \begin{cases} x(1)+x(2)\leq 2\\ x(1)+x(2)/4\leq 1\\ x(1)-x(2)\leq 2\\ -x(1)/4-x(2) \leq 1\\ -x(1)-x(2) \leq -1 \\ -x(1)+x(2)\leq 2 \\ x(1)+\frac{1}{4}x(2)=\frac{1}{2}\\ 1.5\geq x(1) \geq -1\\ 1.25\geq x(2) \geq -0.5 \end{cases} minx(1)31x(2)s.t.x(1)+x(2)2x(1)+x(2)/41x(1)x(2)2x(1)/4x(2)1x(1)x(2)1x(1)+x(2)2x(1)+41x(2)=211.5x(1)11.25x(2)0.5

代码
pkg load optim
clear all
clc
f=[-1 -1/3]';
A=[
    1 1;
    1 1/4;
    1 -1;
    -1/4 -1;
    -1 -1;
    -1 1
];
b=[2 1 2 1 -1 2]';
Aeq = [1 1/4];
beq = 1/2;

lb=[-1 -0.5]';
ub=[1.5 1.25]';

[x, fval]=linprog(f, A, b, Aeq, beq, lb, ub);

结果如图所示
octave

demo 3

求解模型
min ⁡ f ( x ) = − 5 x 1 − 4 x 2 − 6 x 3 s . t . { x 1 − x 2 + x 3 ≤ 20 3 x 1 + 2 x 2 + 4 x 3 ≤ 42 x 1 ≥ 0 x 2 ≥ 0 x 3 ≥ 0 \min f(x)=-5x_1-4x_2-6x_3 \\ s.t. \begin{cases} x_1-x_2+x_3\leq 20\\ 3x_1+2x2+4x_3\leq 42 \\ x1\geq 0\\ x2\geq 0\\ x3\geq 0\\ \end{cases} minf(x)=5x14x26x3s.t.x1x2+x3203x1+2x2+4x342x10x20x30

代码
pkg load optim
clear all
clc
f=[-5 -4 -6]';
A=[
    1 -1 1;
    3 2 4;
    3 2 0;
];
b=[20 42 30]';
lb=[0 0 0]';
[x, fval]=linprog(f, A, b, [], [], lb, []);

单纯性线性规划(simplex)

simplex从所有基本可行解的一个较小部分中通过迭代过程找出最优解,其迭代过程如下

  1. 将线性规划方程转为标准形式,可以得到一个初始基本可行解 x 0 x_0 x0,将它作为迭代的出发点,当前目标值为 z 0 z_0 z0.
  2. 通过高斯消元寻找其他基本可行解 x i x_i xi,当满足 z i ≤ z i − 1 z_i\leq z_{i-1} zizi1时则保留当前解.
  3. 迭代到某个 z z z不可被替换为止.
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

Quant0xff

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值