线性规划模型理论与实践
1.1 线性规划问题
- 在人们的生产实践中,经常会遇到如何利用现有资源来安排生产,以取得最大经济效益的问题。此类问题构成了运筹学的一个重要分支一数学规划,而线性规划(Linear Programming 简记LP)则是数学规划的一个重要分支。
- 自从1947年 G . B . D a n t z i g G.B.Dantzig G.B.Dantzig提出求解线性规划的单纯形方法以来,线性规划在理论上趋向成熟,在实用中日益广泛与深入。特别是在计算机能处理成千上万个约束条件和决策变量的线性规划问题之后,线性规划的适用领域更为广泛了,已成为现代管理中经常采用的基本方法之一。
1.1.1 线性规划的实例与定义
1.实例:某机床厂生产甲、乙两种机床,每台销售后的利润分别为 4千元与3千元。生产甲机床需用4、B机器加工,加工时间分别为每台2小时和1小时;生产乙机床需用A、B、C三种机器加工,加工时间为每台各一小时。若每天可用于加工的机器时数分别为A机器10小时、B机器8小时和C机器7小时,问该厂应生产甲、乙机床各几台,才能使总利润最大?
上述问题的数学模型:设该厂生产
x
1
x_1
x1台甲机床和
x
2
x_2
x2台乙机床时总利润最大,则
x
1
,
x
2
x_1,x_2
x1,x2应满足
m
a
x
z
=
4
x
1
+
3
x
2
(1.1)
max\ \ z=4x_1+3x_2\tag{1.1}
max z=4x1+3x2(1.1)
{ 2 x 1 + x 2 ≤ 10 x 1 + x 2 ≤ 8 x 2 ≤ 7 x 1 , x 2 ≥ 0 (1.2) \begin{cases} 2x_1+x_2\le10 \\ x_1+x_2\le8\\ x_2\le7\\ x_1,x_2\ge0 \end{cases}\tag{1.2} ⎩ ⎨ ⎧2x1+x2≤10x1+x2≤8x2≤7x1,x2≥0(1.2)
变量 x 1 , x 2 x_1,x_2 x1,x2称之为决策变量,(1.1)式被称为问题的目标函数,(1.2)中的几个不等式是问题的约束条件,记为s.t(即subject to)。
2.定义:
- 目标函数及约束条件均为线性函数,故被称为线性规划问题。线性规划问题是在一组线性约束条件的限制下,求一线性目标函数最大或最小的问题。
- 在解决实际问题时,把问题归结成一个线性规划数学模型是很重要的一步,往往也是很困难的一步,模型建立得是否恰当,直接影响到求解。而选适当的决策变量,是我们建立有效模型的关键之一。
1.1.2 线性规划问题的解的概念
1.
M
a
t
l
a
b
Matlab
Matlab中求解线性规划的基本公式:下式一般求最小值,要求最大值在目标函数前加一个负号即可
m
i
n
x
c
T
x
\underset{x}{min}\ \ c^Tx
xmin cTx
s . t . { A x ≤ b A e q ⋅ x = b e q l b ≤ x ≤ u b s.t.\ \ \begin{cases} Ax\le b \\ Aeq\cdot x = beq\\ lb\le x\le ub \end{cases} s.t. ⎩ ⎨ ⎧Ax≤bAeq⋅x=beqlb≤x≤ub
其中c和x为n维向量, A 、 A e q A、Aeq A、Aeq为适当维数的矩阵, b 、 b e q b、beq b、beq为适当维数的列向量。
- 第一个式子是目标函数的简化形式;
- 第二个式子是所有不等式的集合;
- 第三个式子是所有等的集合;
- 第四个式子是决策变量的取值范围。
2.一般线性规划问题的(数学)标准型为:
m
a
x
z
=
∑
j
=
1
n
c
j
x
j
(1.3)
max\ \ z=\sum_{j=1}^nc_jx_j\tag{1.3}
max z=j=1∑ncjxj(1.3)
s . t . { ∑ j = 1 n a i j x j = b i i = 1 , 2 , 3 , . . . , m x j ≥ 0 j = 1 , 2 , 3 , . . . , n (1.4) s.t.\ \ \begin{cases} \overset{n}{\underset{j=1}{\sum}} a_{ij}x_j=b_i\ \ \ i=1,2,3,...,m \\ \\ x_j\ge0\ \ \ j=1,2,3,...,n \end{cases}\tag{1.4} s.t. ⎩ ⎨ ⎧j=1∑naijxj=bi i=1,2,3,...,mxj≥0 j=1,2,3,...,n(1.4)
3.基础概念:
- 可行解:满足约束条件(1.4)的解 x = [ x 1 , x n ] T x=[x_1,x_n]^T x=[x1,xn]T,称为线性规划问题的可行解。
- 最优解:使目标函数(1.3)达到最大值的可行解叫最优解。
- 可行域:所有可行解构成的集合称为问题的可行域,记为R。
1.1.3 线性规划的 M a t l a b Matlab Matlab标准形式及软件求解
1.线性规划的目标函数可以是求最大值,也可以是求最小值,约束条件的不等号可以是小于号也可以是大于号。为了避免这种形式多样性带来的不便,
M
a
t
l
a
b
Matlab
Matlab中规定线性规划的标准形式为:
m
i
n
x
c
T
x
\underset{x}{min}\ \ c^Tx
xmin cTx
s . t . { A x ≤ b A e q ⋅ x = b e q l b ≤ x ≤ u b s.t.\ \ \begin{cases} Ax\le b \\ Aeq\cdot x = beq\\ lb\le x\le ub \end{cases} s.t. ⎩ ⎨ ⎧Ax≤bAeq⋅x=beqlb≤x≤ub
其中, c , x , b , b e q , l b , u b c,x,b,beq,lb,ub c,x,b,beq,lb,ub为列向量, f f f称为价值向量, b b b称为资源向量, A 、 A e q A、Aeq A、Aeq为矩阵。
2. M a t l a b Matlab Matlab 中求解线性规划的命令为:
[x,fval]=linprog(c,A,b)
[x,fval]=linprog(c,A,b,Aeq,beq)
[x,fval]= linprog(c,A,b,Aeq,beq,lb,ub)
其中 x x x返回的是决策向量的取值, f v a l fval fval返回的是目标函数的最优值, c c c为价值向量, A , b A,b A,b对应的是线性不等式约束, A e q , b e q Aeq,beq Aeq,beq对应的是
线性等式约束, l b lb lb和 u b ub ub分别对应的是决策向量的下界向量和上界向量。
3.实例速递:( M a t l a b Matlab Matlab只能求最小值,最大值不是标准形式)
其中,所有的系数都加上了一个负号是因为在用 M a t l a b Matlab Matlab求解最大值。
1.1.4 可以转化为线性规划问题------构造
1.例题:
1.2 投资的收益和风险
1.2.1 问题提出
1.2.2 符号规定和基本假设
1.符号规定:
2.基本假设:
- 投资数额 M M M相当大,为了便于计算,假设 M = 1 M=1 M=1;
- 投资越分散,总的风险越小;
- 总体风险用投资项目 S i S_i Si中最大的一个风险来度量;
- n + 1 n+1 n+1种资产 S i S_i Si之间是相互独立的;
- 在投资的这一期间内, r i , p i , q i r_i,p_i,q_i ri,pi,qi为定值,不受意外因素影响;
- 净收益和总体风险只受 r i , p i , q i r_i,p_i,q_i ri,pi,qi影响,不受其它因素干扰。
1.2.3 模型的分析与建立
1.总体风险用所投资的
S
i
S_i
Si中最大的一个风险来衡量,即
m
a
x
{
q
i
x
i
∣
i
=
1
,
2
,
L
,
n
}
max\{q_ix_i|i=1,2,L,n\}
max{qixi∣i=1,2,L,n}
2.购买
S
i
(
i
=
1
,
L
,
n
)
S_i(i=1,L,n)
Si(i=1,L,n)所付交易费是一个分段函数,即
交易费
=
{
p
i
x
i
,
x
i
≥
u
i
p
i
u
i
,
x
i
≤
u
i
交易费= \begin{cases} p_ix_i,\ \ \ x_i\ge u_i \\ p_iu_i,\ \ \ x_i\le u_i \end{cases}
交易费={pixi, xi≥uipiui, xi≤ui
而题目i所给的定值
u
i
u_i
ui(单位:元)相对总投资
M
M
M很少,
p
i
u
i
p_iu_i
piui更小,这样购买
S
i
S_i
Si的净收益可以简化为
(
r
i
−
p
i
)
x
i
(r_i-p_i)x_i
(ri−pi)xi。
3.要使净收益尽可能大,总体风险尽可能小,这是一个多目标规划模型。
目标函数为:
{
m
a
x
∑
i
=
0
n
(
r
i
−
p
i
)
x
i
m
i
n
m
a
x
{
q
i
x
i
}
(
)
\begin{cases} max\ \overset{n}{\underset{i=0}{\sum}}(r_i-p_i)x_i\\ min\ \ max\{q_ix_i\}() \end{cases}
⎩
⎨
⎧max i=0∑n(ri−pi)ximin max{qixi}()
约束条件为:
{
∑
i
=
0
n
(
1
+
p
i
)
x
i
=
M
x
i
≥
0
,
i
=
0
,
1
,
.
.
.
,
n
\begin{cases} \overset{n}{\underset{i=0}{\sum}}(1+p_i)x_i=M\\ x_i\ge0,\ \ i=0,1,...,n \end{cases}
⎩
⎨
⎧i=0∑n(1+pi)xi=Mxi≥0, i=0,1,...,n
这是一个多模规划,不仅要找到净收益的最大值,还要找到风险评估的最小值,所以我们要把多模规划化简到单目标线性规划。
4.一共有三种方法:
①在实际投资中,投资者承受的风险程度不一样,若给定一个界限a,使最大的一个风险 q i x i M ≤ a \dfrac{q_ix_i}{M}\le a Mqixi≤a,可以找到相应的投资方案,这样就把多目标规划变成一个目标的线性规划。
-
模型一:固定风险水平,优化收益
-
模型二:固定盈利水平,极小化风险
②投资者在权衡资产风险和预期收益两方面时,希望选择一个令自己满意的投资组合。因此对风险、收益分别赋予权重s(0<s≤1)和(1-s),s称为投资偏好系数。
-
模型三:综合考虑
1.2.4 模型求解
1.以模型一求解为例:
由于a是任意给定的风险度,到底怎样没有一个准则,不同的投资者有不同的风险度。我们从a=0开始,以步长 Δ a = 0.001 \Delta a=0.001 Δa=0.001进行循环搜索,编制程序如下:
通过 M a t l a b Matlab Matlab运行可以得到下图所示的结果:
通过上图可以看出:
- 风险大,收益也大;
- 当投资越分散时,投资者承担的风险越小,这与题意一致。冒险的投资者会出现集中投资的情况,保守的投资者则尽量分散投资;
- 在a=0.006附近有一个转折点,在这一点左边,风险增加很少时,利润增长很快。在这一点右边,风险增加很大时,利润增长很缓慢,所以对于风险和收益没有特殊偏好的投资者来说,应该选择曲线的转折点作为最优投资组合,大约是a=0.6%,Q=20%,所对应投资方案为:
风险度a=0.006,收益Q=0.2019, x 0 = 0 x_0=0 x0=0, x 1 = 0.24 x_1=0.24 x1=0.24, x 2 = 0.4 x_2=0.4 x2=0.4, x 3 = 0.1091 x_3= 0.1091 x3=0.1091, x 4 = 0.2212 x_4= 0.2212 x4=0.2212。