1.线性规划的概念
/ \" d/ ~# K# t# Q线性规划(Linear Programming 简记 LP)是了运筹学中数学规划的一个重要分支。自从 1947 年 G. B. Dantzig 提出 求解线性规划的单纯形法以来,线性规划在理论上趋向成熟,在实用中由于计算机能处理成千上万个约束条件和决策变量的线性规划问题之后,线性规划现代管理中经常采用的基本方法之一。 在解决实际问题时,需要把问题归结成一个线性规划数学模型,关键及难点在于选适当的决策变量建立恰当的模型,这直接影响到问题的求解。" o8 F4 C! I2 g& c
2 v3 q+ v) x8 j7 e8 \* v- ~ 线性规划问题的目标函数及约束条件均为线性函数;约束条件记为 s.t.(即 subject to)。目标函数可以是求最大值,也可以是求最小值,约束条件的不等号可以 是小于号也可以是大于号。
* Z) O( C3 Z# x' {- c3 [! C3 x: R7 u- G' G, t
一般线性规划问题的(数学)标准型为 - ~8 o" w2 ~6 n
I1 P7 G7 n) u% x8 l![]()
5 i% i( _2 L6 [) @$ m2 J' m" C, ~8 X; O( H) _- J5 ]
线性规划的实例
# ^0 _+ I# x( O9 i/ [; I![]()
( o. P% w3 n6 z9 l0 I7 m. r3 F9 [( M* E1 l
7 T4 W4 I1 U- O3 H/ ~
2.线性规划问题的解的概念 :可行解、可行域、图解法5 T( ?; J8 F( @; D1 \( H% R
可行解 满足约束条件(4)的解 称为线性规划问题的可行解, 而使目标函数(3)达到最大值的可行解叫最优解。) g6 i( x, q4 l" O1 f
* Z- T, w% W$ ] {9 I# G可行域 所有可行解构成的集合称为问题的可行域,记为R 。
V$ J4 R! Y7 B# c F$ N$ z' ^! C
/ i$ S8 n4 T5 p6 m4 s# l图解法 简单直观,适用于二维决策变量,它有助于了解线性规划问题求解的基本原理。。对于每一固定的值z,使目标函数值等于z的点构成的直线称为目标函数等位线,当z变动时,我们得到一族平行直线。6 }. V: S4 x, e+ a* w
! Y0 z' [; i6 k
![]()
: [) U: K! c x
/ S: I3 R3 o/ I ?2.1. 推广到多维空间的线性规划:超平面、多胞形、多面体
/ w9 p0 Q7 M* R+ [以下结论可以推广到一般的线性规划问题,区别只在于空间的维数:* ^* P8 `# S3 J
8 ~, H) @1 A0 p
(1)可行域R 可能会出现多种情况。R 可能是空集也可能是非空集合,当R 非空 时,它必定是若干个半平面的交集(除非遇到空间维数的退化) 。R 既可能是有界区域, 也可能是无界区域。0 j8 l* D% S1 }0 ~! Z- R% {
4 B" a9 g( R1 A; |) M# @(2)在R 非空时,线性规划既可以存在有限最优解,也可以不存在有限最优解(其 目标函数值无界)。/ @" B( @0 E2 q3 {. Z8 B
& D7 F0 i/ ?* f0 d0 i
(3)若线性规划存在有限最优解,则必可找到具有最优目标函数值的可行域R 的 “顶点” 。+ j Z5 l& z+ F# I
; C, [$ P$ u' h" ^7 U
在一般的n维 空间中,满足线性等式 的点集被称为一个超平面;6 k! ?6 H; d8 j
8 e4 P3 B5 f6 S+ m2 Q% s
或的点集被称为一个半空间,其中为一个n维行向量,b为一个实数。
- g# r. f4 l- w% J5 G& Y. W4 Z/ X( J6 S# B
若干个半空间的交集被称为多胞形,有界的多胞形又被称为多面体。易见,线性规划的可行域必为多胞形(为统一起见,空集Φ也被视为多胞形)。 在一般n维空间中,要直接得出多胞形“顶点”概念还有一些困难。二维空间中的顶点可以看成为边界直线的交点,但这一几何概念的推广在一般n维空间中的几何意义并不十分直观。为此,我们将采用另一途径来定义它。 3 ^5 N/ \ c. F+ J$ ^
9 L6 ?; O% g+ n* ~8 h$ _% l
+ t; A) N/ A4 @! j7 ~# ]: t8 T
: q! {3 E9 N. |( w6 A单纯形法是求解线性规划问题的最常用、最有效的算法之一 ,此处不作介绍。这里我们就不介绍 单纯形法,有兴趣的读者可以参看其它线性规划书籍。下面我们介绍线性规划的 Matlab 解法。
' V4 o+ C- C; a @9 L
. e( t: |+ O: f' U& z3.求解线性规划的 Matlab 解法
, M) h6 U( G0 l { L P8 w7 hMatlab 中规定线性规划的标准形式为
8 O y- o) Y: J" ~; G. j: k
3 |# g7 q4 Z+ m$ R6 F# A! x; A 2 Q$ D3 h6 P9 ~+ E7 }0 K2 [
+ p7 g A8 C% F" d" [8 M其中c和 x为n 维列向量, A、 Aeq 为适当维数的矩阵,b 、beq为适当维数的列向量。 (Aeq 对应约束条件中等式约束的系数矩阵,A为约不等式约束的系数矩阵)。
+ V- D1 c: z7 K; N6 v) _+ ` @/ x# s l, p$ t5 \. W
; v* X; b9 t' u3 V' w4 @
' D* U$ K2 i3 e- f! R. p, b
基本函数形式为 linprog(c,A,b),它的返回值是向量 x的值。还有其它的一些函数调用形 式(在 Matlab 指令窗运行 help linprog 可以看到所有的函数调用形式),如:
' w1 f; \, l( w$ _! f: c) x5 } {2 A! _- R4 a3 o8 [
[x,fval]=linprog(c,A,b,Aeq,beq,LB,UB,X0,OPTIONS)
# l1 B/ U7 @. Y m: L8 M3 _/ B
# X* A- G, p6 V这里 fval 返回目标函数的值,LB 和 UB 分别是变量 x的下界和上界, 0 x 是x的初始值, OPTIONS 是控制参数。 例题例如求解下列线性规划问题 ![]()
解 (i)编写 M 文件
2 d! i: U$ A. D% {" Kc=[2;3;-5]; ! Q3 v' E# |# c% i! o' C+ S
a=[-2,5,-1;1,3,1]; 0 P+ T2 f) o8 f2 h
b=[-10;12];
" q. A( d$ X, Uaeq=[1,1,1];
2 @4 T# Q9 D9 @2 Y- Q Mbeq=7; # a# ?" U& J( |; J& j. s
x=linprog(-c,a,b,aeq,beq,zeros(3,1)) $ |" p/ t0 e0 x3 A! o1 d$ L
value=c'*x
% w' o7 x# u# K) I8 x2 y2 [
1 w& B6 F R* v: l7 a
- M, C& j& l& Z, h9 Y6 D* L(ii)将M文件存盘,并命名为example1.m。 (iii)在Matlab指令窗运行example1即可得所求结果。 例3 求解线性规划问题 ![]()
解 编写Matlab程序如下:
! q4 }7 b7 {4 P7 {c=[2;3;1]; 8 r. h2 S5 `" w$ w
a=[1,4,2;3,2,0]; ; y* C+ H5 l3 T
b=[8;6];
% G, n) _( J' @/ r% M) l; ^[x,y]=linprog(c,-a,-b,[],[],zeros(3,1))
/ a2 X* _4 K8 z# I ^& O7 Q3 m" k/ X" ?9 ]- n. B
3 i# F% C7 c* H# o8 j, e# b; g5 ?* d9 {. `
————————————————
0 D2 X: A' } b Q3 K0 [( d5 }版权声明:本文为CSDN博主「wamg潇潇」的原创文章,遵循CC 4.0 BY-SA版权协议,转载请附上原文出处链接及本声明。7 w e( K F5 _) C% L
原文链接:https://blog.csdn.net/qq_29831163/article/details/88893234$ e) X: s6 }* a7 r7 Q; K, w' c
# }7 [- R: \! H$ k
6 f' \8 M& U7 M- q* V& r |