1 线性规划

第一章 线性规划

P: 如何利用现有资源来安排生产,以取得最大经济效益的问题。此类问题构成了运筹学的一个重要分支——数学规划,而线性规划(Linear Programming,LP)则是数学规划的一个重要分支。

1.1 线性规划模型及概念

1.线性规划建模过程

(1)问题分析

①如何制定一个最优的计划
②有何约束条件
③达到最终目标的最值函数

(2)模型假设

①条件假设:

②符号说明:
(通常情况 x i x_i xi决策变量

③模型建立:
建立最终目标函数
添加约束条件

(3)综上所述,可以为该类问题建模

线性规划的一般形式为:
m a x ( 或 m i n ) z = ∑ j = 1 n c j x j s . t . = { ∑ j = 1 n a i j x j ≥ (或 = , ≤ ) b i , i = 1 , 2 , . . . , m , x j ≥ 0 , j = 1 , 2 , . . . , n . max(或min) z=\sum_{j=1}^{n}c_jx_j\\ \begin{equation} {\boldsymbol{s.t.}} =\left\{ \begin{array}{ll} \sum_{j=1}^{n}a_{ij}x_j \geq(或=,\leq)b_i,i=1,2,...,m, \\ x_j \geq0,j=1,2,...,n. \end{array}\right. \end{equation} max(min)z=j=1ncjxjs.t.={j=1naijxj(或=,)bi,i=1,2,...,m,xj0,j=1,2,...,n.

其向量表示形式为:
m a x ( 或 m i n ) z = c T x s . t . = { ∑ j = 1 n P j x j ≥ (或 = , ≤ ) b , x ≥ 0. max(或min) z=c^Tx\\ \begin{equation} {\boldsymbol{s.t.}} =\left\{ \begin{array}{ll} \sum_{j=1}^{n}P_jx_j \geq(或=,\leq)b, \\ x \geq0. \end{array}\right. \end{equation} max(min)z=cTxs.t.={j=1nPjxj(或=,)b,x0.

其矩阵表示形式为:
m a x ( 或 m i n ) z = c T x s . t . = { A x ≥ (或 = , ≤ ) b , x ≥ 0. max(或min) z=c^Tx\\ \begin{equation} {\boldsymbol{s.t.}} =\left\{ \begin{array}{ll} Ax \geq(或=,\leq)b, \\ x \geq0. \end{array}\right. \end{equation} max(min)z=cTxs.t.={Ax(或=,)b,x0.

式中:
c = [ c 1 , c 2 , . . . , c n ] T c=[c_1,c_2,...,c_n]^T c=[c1,c2,...,cn]T目标函数的系数向量,又称为价值向量
x = [ x 1 , x 2 , . . . , x n ] T x=[x_1,x_2,...,x_n]^T x=[x1,x2,...,xn]T决策向量;
A = ( a i j ) m ∗ n A=(a_{ij})_{m*n} A=(aij)mn约束方程组的系数矩阵
P j = [ a 1 j , a 2 j , . . . , a m j ] T , j = 1 , 2 , . . . , n P_j=[a_{1j},a_{2j},...,a_{mj}]^T,j=1,2,...,n Pj=[a1j,a2j,...,amj]T,j=1,2,...,nA的列向量,又称为约束方程组的系数向量
b = [ b 1 , b 2 , . . . , b n ] T b=[b_1,b_2,...,b_n]^T b=[b1,b2,...,bn]T约束方程组的常数向量

2.线性规划问题的标准式

一般的,称
m a x z = ∑ j = 1 n c j x j s . t . = { ∑ j = 1 n a i j x j = b i , i = 1 , 2 , . . . , m , x j ≥ 0 , j = 1 , 2 , . . . , n . maxz=\sum_{j=1}^{n}c_jx_j\\ \begin{equation} {\boldsymbol{s.t.}} =\left\{ \begin{array}{ll} \sum_{j=1}^{n}a_{ij}x_j=b_i,i=1,2,...,m, \\ x_j \geq0,j=1,2,...,n. \end{array}\right. \end{equation} maxz=j=1ncjxjs.t.={j=1naijxj=bi,i=1,2,...,m,xj0,j=1,2,...,n.

式中:
b i ≥ 0 , i = 1 , 2 , . . . , m b_i\geq0,i=1,2,...,m bi0,i=1,2,...,m

线性规划问题的数学标准型

可行解:满足约束条件(4)的解 x = [ x 1 , x 2 , . . . , x n ] T x=[x_1,x_2,...,x_n]^T x=[x1,x2,...,xn]T,成为线性规划问题的可行解,而使(4)中 m a x z = ∑ j = 1 n c j x j maxz=\sum_{j=1}^{n}c_jx_j maxz=j=1ncjxj达到最大值的可行解称为最优解。

可行域:所有可行解构成的集,记为 R ′ R' R

3.灵敏度分析

是指对系统因周围条件变化显示出来的敏感程度的分析。

对于数学规划模型,一定要做灵敏度分析(详见第3章)

1.2 线性规划模型求解及应用

1.线性规划的Matlab求解

(1)Matlab基于求解器的求解方法:
①Matlab基于求解器的求解方法中规定线性规划的标准形式为:

m i n x = f T x s . t . = { A ⋅ x ≤ b , A e q ⋅ x = b e q , l b ≤ x ≤ u b . \underset{x}{min}=f^Tx\\ \begin{equation} {\boldsymbol{s.t.}} =\left\{ \begin{array}{ll} A·x\leq b, \\ Aeq·x=beq,\\ lb\leq x\leq ub. \end{array}\right. \end{equation} xmin=fTxs.t.= Axb,Aeqx=beq,lbxub.
式中:
f , x , b , b e q , l b , u b f,x,b,beq,lb,ub f,x,b,beq,lb,ub为列向量,其中, f f f为价值向量, b b b为资源向量;
A , A q e A,Aqe A,Aqe分别为不等式约束对应的矩阵。

②Matlab基于求解器的求解线性规划函数调用格式为
[x,fval] = linprog(f,A,b)
[x,fval] = linprog(f,A,b,Aeq,beq)
[x,fval] = linprog(f,A,b,Aeq,beq,lb,ub)

其中,
x返回决策向量的取值;
fval返回目标函数的最优值;
f为价值向量;
A,b对应线性不等式约束;
Aeq,beq,对应线性等式约束;
lb和ub分别对应决策向量的下界向量和上界向量。

(2)Matlab基于问题的求解方法

Resource: https://blog.csdn.net/weixin_52901292/article/details/119385051

相比于matlab求解器linprog函数,fmincon等函数,它们更适合用于一些简单约束条件和目标函数条件的方程,如下所举的例题(但是是用optimproblem做的),但是如果当约束条件和目标函数比较复杂,运用求和符号或者连乘符号表示的话,就用optimproblem函数比较简便

e.g.:
这里设置目标函数为f=4x1+3x2
约束条件为:
2*x1+x2<=10;
x1+x2<=8;
x2<=7.
x的下界为0,上界为正无穷

具体详解和例子如代码:

%基于问题求解
clear
clc
prob=optimproblem('ObjectiveSense','max');
%这里ObjectiveSense是目标类型为求最大值的意思
%有时候直接是prob=optimproblem就是默认求最小值

b=[10;8;7];
A=[2,1
    1,1
    0,1];
x=optimvar('x',1,2,'TYPE','integer','LowerBound',0,'UpperBound',inf);

%optimvar函数是一种类似于赋值的函数
%第一个‘x’里面是变量名,后面说的是该变量所包含的行数和列数
%‘TYPE’,后面定义的是该函数所属类型,比如说integer整数型,double双精度型号等
%‘LowerBound'与'UpperBound'表示下界与上界所跟的0,inf分别是范围
prob.Objective=f*x;
%目标函数需要得到一个标量数值,不是矩阵向量!,所以注意自己不能用.*
%这里是设置目标函数
prob.Constraints.con=A*x<=b;
%注意这里不是.*!那个得到的是一个矩阵,这个是线性代数里的矩阵相乘,得到数值,注意维度

[sol fval flag]=solve(prob);
fval
sol.x

2.可以转化为线性规划的问题

很多看起来不是线性规划的问题,也可以转变为线性规划的问题来解决。

(1)数学规划问题:

m i n ∣ x 1 ∣ + ∣ x 2 ∣ + . . . + ∣ x n ∣ , s . t . A x ≤ b . min|x_1|+|x_2|+...+|x_n|,\\ s.t.Ax \leq b. minx1+x2+...+xn,s.t.Axb.
式中:
x = [ x 1 , x 2 , . . . , x n ] T x=[x_1,x_2,...,x_n]^T x=[x1,x2,...,xn]T;
A和b为相应维数的矩阵和向量。

要把上面的问题变换成线性规划问题,只要注意到事实:对任意的 x i x_i xi,存在 u i , v i ≥ 0 u_i,v_i \geq 0 ui,vi0满足
x i = u i − v i , ∣ x − i ∣ = u i + v i , x_i=u_i-v_i,|x-i|=u_i+v_i, xi=uivi,xi=ui+vi,

事实上,只要取 u i = x i + ∣ x i ∣ 2 , v i = ∣ x i ∣ − x i 2 u_i=\cfrac{x_i+|x_i|}{2},v_i=\cfrac{|x_i|-x_i}{2} ui=2xi+xi,vi=2xixi就可以满足上面的条件。

这样,记 u = [ u 1 , u 2 , . . . , u n ] T , v = [ v 1 , v 2 , . . . , v n ] T u=[u_1,u_2,...,u_n]^T,v=[v_1,v_2,...,v_n]^T u=[u1,u2,...,un]T,v=[v1,v2,...,vn]T,从而可以把上面的问题变成
m i n ∑ i = 1 n ( u i + v i ) s . t . = { A ( u − v ) ≤ b , u , v ≥ 0. min\sum_{i=1}^{n}(u_i+v_i)\\ \begin{equation} {\boldsymbol{s.t.}} =\left\{ \begin{array}{ll} A(u-v)\leq b, \\ u,v \geq 0. \end{array}\right. \end{equation} mini=1n(ui+vi)s.t.={A(uv)b,u,v0.

进一步将矩阵改写成
m i n ∑ i = 1 n ( u i + v i ) s . t . = { [ A , − A ] [ u v ] ≤ b , u , v ≥ 0. min\sum_{i=1}^{n}(u_i+v_i)\\ \begin{equation} {\boldsymbol{s.t.}} =\left\{ \begin{array}{ll} [A,-A] \begin{bmatrix} u\\ v\\ \end{bmatrix} \leq b, \\ u,v \geq 0. \end{array}\right. \end{equation} mini=1n(ui+vi)s.t.= [A,A][uv]b,u,v0.

(2)对于带有绝对值的非线性规划问题,尽量先手工进行线性化,再使用软件求解,这样可以提高求解效率。

e.g. m i n x i \underset{x_i}{min} ximin{ m a x y i ∣ ε i ∣ \underset{y_i}{max}|\varepsilon_i| yimaxεi},其中 ε i = x i − y i \varepsilon_i=x_i-y_i εi=xiyi

对于这个问题,如果我们取 v = m a x y i ∣ ε i ∣ v=\underset{y_i}{max}|\varepsilon_i| v=yimaxεi,这样,上述问题可以变换成
m i n v , s . t . = { x 1 − y 1 ≤ v , x 2 − y 2 ≤ v , . . . , x n − y n ≤ v , y 1 − x 1 ≤ v , y 2 − x 2 ≤ v , . . . , y n − x n ≤ v . minv,\\ \begin{equation} {\boldsymbol{s.t.}} =\left\{ \begin{array}{ll} x_1-y_1 \leq v,x_2-y_2 \leq v,...,x_n-y_n \leq v, \\ y_1-x_1 \leq v,y_2-x_2 \leq v,...,y_n-x_n \leq v. \end{array}\right. \end{equation} minv,s.t.={x1y1v,x2y2v,...,xnynv,y1x1v,y2x2v,...,ynxnv.

此即通常的线性规划问题。

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值