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

工具链接

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

线性规划问题求解

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

线性规划问题的标准形式

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

求解函数

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

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

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

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

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

案例

demo 1

求解模型
minZ=4a+b+7cs.t{a+bc=53ab+c4a+b4c7a,b0 \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}

代码

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

求解模型
minx(1)13x(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)+14x(2)=121.5x(1)11.25x(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}

代码

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

求解模型
minf(x)=5x14x26x3s.t.{x1x2+x3203x1+2x2+4x342x10x20x30 \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}

代码

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. 将线性规划方程转为标准形式,可以得到一个初始基本可行解x0x_0,将它作为迭代的出发点,当前目标值为z0z_0.
  2. 通过高斯消元寻找其他基本可行解xix_i,当满足zizi1z_i\leq z_{i-1}时则保留当前解.
  3. 迭代到某个zz不可被替换为止.
©️2020 CSDN 皮肤主题: 像素格子 设计师: CSDN官方博客 返回首页
实付0元
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值