一.概念
1.数学规划:
人们经常会遇到如何利用现有资源进行生产,以取得最大经济效益的问题.这类问题形成了运筹学的1个重要分支——数学规划,即研究如何在一定的资源和条件限制下,将某个目标最大或最小化
2.线性规划
(1)概念:
线性规划(Linear Programming;LP)是数学规划的1个重要分支,专门研究线性规划问题,即在1组线性约束条件的限制下,求1个线性目标函数的最大或最小值的问题
(2)一般形式:
一般线性规划问题的(数学)标准型为: m a x / m i n z = ∑ j = 1 n c j x j ( 1.1 ) s . t . { b i 1 ≤ ∑ j = 1 n a i j x j ≤ b i 2 ( i = 1 , 2... m ) l ≤ x j ≤ u ( j = 1 , 2... n ) ( 1.2 ) max/min\:\,z=\displaystyle\sum_{j=1}^nc_jx_j\qquad(1.1)\\s.t.\begin{cases}b_{i1}≤\displaystyle\sum_{j=1}^na_{ij}x_j≤b_{i2}\,(i=1,2...m)\\l≤x_j≤u\,(j=1,2...n)\end{cases}\qquad(1.2) max/minz=j=1∑ncjxj(1.1)s.t.⎩⎪⎨⎪⎧bi1≤j=1∑naijxj≤bi2(i=1,2...m)l≤xj≤u(j=1,2...n)(1.2)其中式(1.1)称为问题的目标函数;式(1.2)称为问题的约束条件,记为 s . t . s.t. s.t.(即subject to);称满足式(1.2)的解 x = [ x 1 , x 2 . . . x n ] T x=[x_1,x_2...x_n]^T x=[x1,x2...xn]T为线性规划问题的可行解,所有可行解构成的集合称为问题的可行域,记为 R R R;而使式(1.1)达到最大或最小值的可行解称为最优解
二.利用MATLAB求解
1.标准形式:
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 \mathop{min}\limits_{x}\:\,f^Tx\\s.t.\begin{cases}A·x≤b\\Aeq·x=beq\\lb≤x≤ub\end{cases} xminfTxs.t.⎩⎪⎨⎪⎧A⋅x≤bAeq⋅x=beqlb≤x≤ub其中 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 e q A,Aeq A,Aeq为矩阵
2.求解:
MATLAB中使用
linprog()
求解线性规划问题(详情参见 MATLAB.函数 部分)
例如: m a x z = 2 x 1 + 3 x 2 − 5 x 3 s . t . { x 1 + x 2 + x 3 = 7 2 x 1 − 5 x 2 + x 3 ≥ 10 x 1 + 3 x 2 + x 3 ≤ 12 x 1 , x 2 , x 3 ≤ 0 max\,\:z=2x_1+3x_2-5x_3\\s.t.\begin{cases}x_1+x_2+x_3=7\\2x_1-5x_2+x_3≥10\\x_1+3x_2+x_3≤12\\x_1,x_2,x_3≤0\end{cases} maxz=2x1+3x2−5x3s.t.⎩⎪⎪⎪⎨⎪⎪⎪⎧x1+x2+x3=72x1−5x2+x3≥10x1+3x2+x3≤12x1,x2,x3≤0的标准形式为: m i n w = − 2 x 1 − 3 x 2 + 5 x 3 s . t . { [ − 2 5 − 1 1 3 1 ] [ x 1 x 2 x 3 ] ≤ [ − 10 12 ] [ 1 1 1 ] [ x 1 x 2 x 3 ] = 7 [ x 1 x 2 x 3 ] ≥ [ 0 0 0 ] min\,\:w=-2x_1-3x_2+5x_3\\s.t.\begin{cases}\left[\begin{matrix}-2&5&-1\\1&3&1\end{matrix}\right]\left[\begin{matrix}x_1\\x_2\\x_3\end{matrix}\right]≤\left[\begin{matrix}-10\\12\end{matrix}\right]\\\left[\begin{matrix}1&1&1\end{matrix}\right]\left[\begin{matrix}x_1\\x_2\\x_3\end{matrix}\right]=7\\\left[\begin{matrix}x_1\\x_2\\x_3\end{matrix}\right]≥\left[\begin{matrix}0\\0\\0\end{matrix}\right]\end{cases} minw=−2x1−3x2+5x3s.t.⎩⎪⎪⎪⎪⎪⎪⎪⎪⎪⎪⎪⎪⎨⎪⎪⎪⎪⎪⎪⎪⎪⎪⎪⎪⎪⎧[−2153−11]⎣⎡x1x2x3⎦⎤≤[−1012][111]⎣⎡x1x2x3⎦⎤=7⎣⎡x1x2x3⎦⎤≥⎣⎡000⎦⎤求解代码为:
>> f=[-2;-3;5];
>> a=[-2,5,-1;1,3,1];
>> b=[-10;12];
>> aeq=[1,1,1];
>> beq=7;
>> [x,y]=linprog(f,a,b,aeq,beq,zeros(3,1));
Optimal solution found.
>> x,-y
x =
6.4286
0.5714
0
ans =
14.5714
三.可转换为线性规划的问题
1.绝对值求和类:
现有数学规划问题: m i n ∑ i = 1 n a i ∣ x i ∣ s . t . A x ≤ b min\,\:\displaystyle\sum_{i=1}^na_i|\,x_i|\\s.t.\quad Ax≤b mini=1∑nai∣xi∣s.t.Ax≤b其中 x = [ x 1 , x 2 . . . x n ] T x=[x_1,x_2...x_n]^T x=[x1,x2...xn]T; A , b A,b A,b为相应维数的矩阵和向量.现在取 u i = x i + ∣ x i ∣ 2 , v i = ∣ x i ∣ − x i 2 ( i = 1 , 2... n ) u_i=\frac{x_i+|x_i|}{2},v_i=\frac{|x_i|-x_i}{2}\,(i=1,2...n) ui=2xi+∣xi∣,vi=2∣xi∣−xi(i=1,2...n)并记 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 a i ( u i + v i ) s . t . { A ( u − v ) ≤ b u , v ≥ 0 min\,\:\displaystyle\sum_{i=1}^na_i(u_i+v_i)\\s.t.\begin{cases}A(u-v)≤b\\u,v≥0\end{cases} mini=1∑nai(ui+vi)s.t.{A(u−v)≤bu,v≥0再进一步改写为 m i n ∑ i = 1 n a i ( u i + v i ) s . t . { [ A − A ] [ u v ] ≤ b u , v ≥ 0 min\,\:\displaystyle\sum_{i=1}^na_i(u_i+v_i)\\s.t.\begin{cases}\left[\begin{matrix}A&-A\end{matrix}\right]\left[\begin{matrix}u\\v\end{matrix}\right]≤b\\u,v≥0\end{cases} mini=1∑nai(ui+vi)s.t.⎩⎨⎧[A−A][uv]≤bu,v≥0
求解下述数学规划问题: m i n z = ∣ x 1 ∣ + 2 ∣ x 2 ∣ + 3 ∣ x 3 ∣ + 4 ∣ x 4 ∣ s . t . { x 1 − x 2 − x 3 + x 4 ≤ − 2 x 1 − x 2 + x 3 − 3 x 4 ≤ − 1 x 1 − x 2 − 2 x 3 + 3 x 4 ≤ − 1 2 min\,\:z=|x_1|+2|x_2|+3|x_3|+4|x_4|\\s.t.\begin{cases}x_1-x_2-x_3+x_4≤-2\\x_1-x_2+x_3-3x_4≤-1\\x_1-x_2-2x_3+3x_4≤-\frac{1}{2}\end{cases} minz=∣x1∣+2∣x2∣+3∣x3∣+4∣x4∣s.t.⎩⎪⎨⎪⎧x1−x2−x3+x4≤−2x1−x2+x3−3x4≤−1x1−x2−2x3+3x4≤−21做变量替换 u i = x i + ∣ x i ∣ 2 , v i = ∣ x i ∣ − x i 2 ( i = 1 , 2 , 3 , 4 ) u_i=\frac{x_i+|x_i|}{2},v_i=\frac{|x_i|-x_i}{2}\,(i=1,2,3,4) ui=2xi+∣xi∣,vi=2∣xi∣−xi(i=1,2,3,4),并把新变量重新排序成1维向量 y = [ u v ] T = [ u 1 . . . u 4 , v 1 . . . v 4 ] T y=\left[\begin{matrix}u&v\end{matrix}\right]^T=[u_1...u_4,v_1...v_4]^T y=[uv]T=[u1...u4,v1...v4]T,则 m i n z = c T y s . t . { [ A − A ] [ u v ] ≤ b y ≥ 0 min\,\:z=c^Ty\\s.t.\begin{cases}\left[\begin{matrix}A&-A\end{matrix}\right]\left[\begin{matrix}u\\v\end{matrix}\right]≤b\\y≥0\end{cases} minz=cTys.t.⎩⎨⎧[A−A][uv]≤by≥0其中 c = [ 1 2 3 4 1 2 3 4 ] T b = [ − 2 − 1 − 1 2 ] T A = [ 1 − 1 − 1 1 1 − 1 1 − 3 1 − 1 − 2 3 ] c=\left[\begin{matrix}1&2&3&4&1&2&3&4\end{matrix}\right]^T\\b=\left[\begin{matrix}-2&-1&-\frac{1}{2}\end{matrix}\right]^T\\A=\left[\begin{matrix}1&-1&-1&1\\1&-1&1&-3\\1&-1&-2&3\end{matrix}\right] c=[12341234]Tb=[−2−1−21]TA=⎣⎡111−1−1−1−11−21−33⎦⎤求解代码为:
>> c=1:4;
>> c=[c,c]';
>> a=[1,-1,-1,1;1,-1,1,-3;1,-1,-2,3];
>> a=[a,-a];
>> b=[-2,-1,-1/2]';
>> [y,z]=linprog(c,a,b,[],[],zeros(8,1))
Optimal solution found.
y =
0
0
0
0
2
0
0
0
z =
2.0000
>> x=y(1:4)-y(5:end)
x =
-2
0
0
0
2.多重最值类:
现有数学规划问题: m i n x i { m a x y i ∣ ε i ∣ } \mathop{\mathbb{min}}\limits_{x_i}\{\mathop{\mathbb{max}}\limits_{y_i}|\,ε_i|\} ximin{yimax∣εi∣}其中 ε i = x i − y i ε_i=x_i-y_i εi=xi−yi.取 v = m a x y i ∣ ε i ∣ v=\mathop{\mathbb{max}}\limits_{y_i}|\,ε_i| v=yimax∣εi∣,上述问题就转换为: m i n v s . t . { x i − y i ≤ v y i − x i ≤ v min\,\:v\\s.t.\begin{cases}x_i-y_i≤v\\y_i-x_i≤v\end{cases} minvs.t.{xi−yi≤vyi−xi≤v
四.投资的风险和收益
假设市场上有 n n n种资产可供选择,分别记为 s i ( i = 1 , 2... n ) s_i\,(i=1,2...n) si(i=1,2...n).现用数额为 M M M的相当大的资金进行投资,这 n n n种资产的平均收益率分别为 r i r_i ri,风险损失率为 q i q_i qi.投资越分散,总风险就越小,总风险可用投资的 s i s_i si中最大的1个风险来衡量.购买 s i s_i si时交易费的费率为 p i p_i pi,但当购买额不超过 u i u_i ui时,交易费均按购买 u i u_i ui计算.另外,同期银行存款(记为 s 0 s_0 s0)利率为 r 0 r_0 r0,没有交易费和风险(即 p 0 = q 0 = 0 p_0=q_0=0 p0=q0=0).设投资在 s i s_i si上的资金额为 x i x_i xi,各种资产间相互独立.要求设计1种投资组合方案,使净收益尽可能大,总风险尽可能小
总风险 A = m a x { q i x i ∣ i = 1 , 2... n } A=max\{q_ix_i\,|\,i=1,2...n\} A=max{qixi∣i=1,2...n}.用于 s i s_i si的交易费 P i = { p i x i ( x i > u i ) p i u i ( x i ≤ u i ) P_i=\begin{cases}p_ix_i\,(x_i>u_i)\\p_iu_i\,(x_i≤u_i)\end{cases} Pi={pixi(xi>ui)piui(xi≤ui).由于 p i u i < u i < < M p_iu_i<u_i<<M piui<ui<<M, s i s_i si的净收益 R i ≈ ( r i − p i ) x i R_i≈(r_i-p_i)x_i Ri≈(ri−pi)xi
从而这是1个多目标规划模型 { m a x ∑ i = 0 n ( r i − p i ) x i m i n { m a x 1 ≤ i ≤ n { q i x i } } s . t . { ∑ i = 0 n ( 1 + p i ) x i = M x i ≥ 0 \begin{cases}max\displaystyle\sum_{i=0}^n(r_i-p_i)x_i\\min\{\mathop{\mathbb{max}}\limits_{1≤i≤n}\{q_ix_i\}\}\end{cases}\\s.t.\begin{cases}\displaystyle\sum_{i=0}^n(1+p_i)x_i=M\\x_i≥0\end{cases}\quad\:\:\: ⎩⎪⎪⎨⎪⎪⎧maxi=0∑n(ri−pi)ximin{1≤i≤nmax{qixi}}s.t.⎩⎪⎨⎪⎧i=0∑n(1+pi)xi=Mxi≥0
①若希望在单项投资的风险率 ( ( (即 q i x i M ) \frac{q_ix_i}{M}) Mqixi)不超过 a a a的情况下获得最大收益,则模型简化为 m a x ∑ i = 0 n ( r i − p i ) x i s . t . { q i x i M ≤ a ∑ i = 0 n ( 1 + p i ) x i = M x i ≥ 0 max\displaystyle\sum_{i=0}^n(r_i-p_i)x_i\\s.t.\begin{cases}\frac{q_ix_i}{M}≤a\\\displaystyle\sum_{i=0}^n(1+p_i)x_i=M\\x_i≥0\end{cases} maxi=0∑n(ri−pi)xis.t.⎩⎪⎪⎪⎨⎪⎪⎪⎧Mqixi≤ai=0∑n(1+pi)xi=Mxi≥0②若希望在总盈利不少于 k k k的情况下使风险最小,则模型简化为 m i n { m a x 1 ≤ i ≤ n { q i x i } } s . t . { ∑ i = 0 n ( r i − p i ) x i ≥ k ∑ i = 0 n ( 1 + p i ) x i = M x i ≥ 0 min\{\mathop{\mathbb{max}}\limits_{1≤i≤n}\{q_ix_i\}\}\\s.t.\begin{cases}\displaystyle\sum_{i=0}^n(r_i-p_i)x_i≥k\\\displaystyle\sum_{i=0}^n(1+p_i)x_i=M\\x_i≥0\end{cases} min{1≤i≤nmax{qixi}}s.t.⎩⎪⎪⎪⎪⎪⎪⎨⎪⎪⎪⎪⎪⎪⎧i=0∑n(ri−pi)xi≥ki=0∑n(1+pi)xi=Mxi≥0③若希望权衡风险和预期收益这2方面,且对风险,收益分别赋权为 0 < s ≤ 1 , 1 − s ( s 0<s≤1,1-s\,(s 0<s≤1,1−s(s称为投资偏好系数 ) ) ),则模型简化为 m i n s { m a x 1 ≤ i ≤ n { q i x i } } − ( 1 − s ) ∑ i = 0 n ( r i − p i ) x i s . t . { ∑ i = 0 n ( 1 + p i ) x i = M x i ≥ 0 min\,\:s\{\mathop{\mathbb{max}}\limits_{1≤i≤n}\{q_ix_i\}\}-(1-s)\displaystyle\sum_{i=0}^n(r_i-p_i)x_i\\s.t.\begin{cases}\displaystyle\sum_{i=0}^n(1+p_i)x_i=M\\x_i≥0\end{cases} mins{1≤i≤nmax{qixi}}−(1−s)i=0∑n(ri−pi)xis.t.⎩⎪⎨⎪⎧i=0∑n(1+pi)xi=Mxi≥0