天天看點

線性規劃—MATLAB數學模組化線性規劃問題求解

線性規劃問題求解

1.線性規劃問題的解的概念:

​ 标準型:

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 。 式 中 : b i ≥ 0 , i = 1 , 2 , ⋯   , m 。 max\;z=\sum_{j=1}^n{c_j}{x_j},\\ s.t. \begin{cases} \sum_{j=1}^n{a_{ij}}{x_j} =b_i,i=1,2,\cdots,m,\\ x_j\geq0,j=1,2,\cdots,n。\\ \end{cases}\\ 式中:b_i\geq0,i=1,2,\cdots,m。 maxz=j=1∑n​cj​xj​,s.t.{∑j=1n​aij​xj​=bi​,i=1,2,⋯,m,xj​≥0,j=1,2,⋯,n。​式中:bi​≥0,i=1,2,⋯,m。

​ 可行解:滿足限制條件式的解

x = [ x 1 , ⋯   , x n ] T x=[x_1,\cdots,x_n]^T x=[x1​,⋯,xn​]T

​ 稱為線性規劃問題的可行解,而讓z達到最大值的可行解稱為最優解。

​ 可行域:所有可行解構成的集合稱為問題的可行域,記為R。

2.線性規劃的Matlab标準形式及軟體求解:

​ Matlab中規定線性規劃的标準形式為:

m i n f T x ( 1 ) , s . t . { A ⋅ x ≤ b , ( 2 ) A e q ⋅ x = b e q , ( 3 ) l b ≤ x ≤ u b 。 ( 4 ) 式 中 : f , x , b , b e q , l b , u b 為 列 向 量 , 其 中 f 稱 為 價 值 向 量 , b 稱 為 資 源 向 量 ; A , A e q 為 矩 陣 。 minf^Tx\quad(1),\\ s.t.\begin{cases} A\cdot x\leq b,\quad(2)\\ Aeq\cdot x=beq,\quad(3)\\ lb\leq x\leq ub。\quad(4)\\ \end{cases}\\ 式中:f,x,b,beq,lb,ub為列向量,其中f稱為價值向量,b稱為資源向量;\\A,Aeq為矩陣。 minfTx(1),s.t.⎩⎪⎨⎪⎧​A⋅x≤b,(2)Aeq⋅x=beq,(3)lb≤x≤ub。(4)​式中:f,x,b,beq,lb,ub為列向量,其中f稱為價值向量,b稱為資源向量;A,Aeq為矩陣。

PS: (1)式表示求解式。規定求最小值的形式,若要求最大值,則需要把式子求負,即最小值求負表示最大值。

​ (2)式表示不等式限制條件。規定求小于的形式,若是大于則需要通過兩邊求負進行轉換。若有多個不等式條件,則用矩陣的形式來 分别表示A,b。

​ (3)式表示等式限制條件。若有多個等式條件,也用矩陣的形式來分别表示Aeq,beq。

​ (4)式表示取值範圍。

Matlab中求解線性規劃的指令為:

​ [x,fval] = linprog(f,A,b,Aeq,beq,lb,ub)

​ 式中:x傳回決策向量的取值;

​ fval傳回目标函數的最優值;

​ f為價值向量;

​ A和b對應線性不等式限制;

​ Aeq和beq對應線性等式限制;

​ lb和ub分别對應決策向量的下界向量和上界向量;

PS: (1)若限制條件中間不齊全,則可以用空向量[]來替代缺失部分,如:

​ [x,fval] = linprog(f,A,b,[],beq,[],ub)

​ (2)若限制條件隻有前面條件,則可以直接省略參數,如:

​ [x,fval] = linprog(f,A,b)

3.例題求解應用:

​ 例1.求解下列線性規劃問題:

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 \quad z=2x_1+3x_2-5x_3,\\ s.t.\begin{cases} x_1+x_2+x_3=7,\\ 2x_1-5x_2+x_3\geq 10,\\ x_1+3x_2+x_3\leq12,\\ x_1,x_2,x_3>=0。 \end{cases} maxz=2x1​+3x2​−5x3​,s.t.⎩⎪⎪⎪⎨⎪⎪⎪⎧​x1​+x2​+x3​=7,2x1​−5x2​+x3​≥10,x1​+3x2​+x3​≤12,x1​,x2​,x3​>=0。​

​ 解:先把上式轉化稱為Matlab的标準形式:

m i n w = − 2 x 1 − 3 x 2 + 5 x 3 , s . t . { − 2 x 1 + 5 x 2 − x 3 ≤ − 10 , x 1 + 3 x 2 + x 3 ≤ 12 , x 1 + x 2 + x 3 = 7 , x 1 , x 2 , x 3 ≥ 0 。 min\quad w=-2x_1-3x_2+5x_3,\\ s.t.\begin{cases} -2x_1+5x_2-x_3 \leq -10,\\ x_1+3x_2+x_3 \leq 12,\\ x_1+x_2+x_3=7,\\ x_1,x_2,x_3 \geq 0。 \end{cases} minw=−2x1​−3x2​+5x3​,s.t.⎩⎪⎪⎪⎨⎪⎪⎪⎧​−2x1​+5x2​−x3​≤−10,x1​+3x2​+x3​≤12,x1​+x2​+x3​=7,x1​,x2​,x3​≥0。​

​ 現在再把标準形式按照函數提取出我們想要參數:

​ 依照**[x,fval] = linprog(f,A,b,Aeq,beq,lb,ub)**

​ 可得:

f = [ − 2 − 3 5 ] 或 者 [ − 2 − 3 5 ] T A = [ − 2 5 − 1 1 3 1 ] b = [ − 10 12 ] 或 者 [ − 10 12 ] T A e q = [ 1 1 1 ] 或 者 [ 1 1 1 ] T b e q = 7 l b = [ 0 0 0 ] 或 者 [ 0 0 0 ] T u b = [ ∞ ∞ ∞ ] 或 者 [ ∞ ∞ ∞ ] T f=\begin{bmatrix} -2\\-3\\5 \end{bmatrix} 或者 \begin{bmatrix} -2 & -3 &5 \end{bmatrix}^T\\ A=\begin{bmatrix} -2 & 5 & -1\\ 1 & 3 & 1 \end{bmatrix}\\ b=\begin{bmatrix} -10\\12 \end{bmatrix} 或者 \begin{bmatrix} -10 & 12 \end{bmatrix}^T\\ Aeq=\begin{bmatrix} 1\\1\\1 \end{bmatrix} 或者 \begin{bmatrix} 1&1&1 \end{bmatrix}^T\\ beq=7\\ lb=\begin{bmatrix} 0\\0\\0 \end{bmatrix} 或者 \begin{bmatrix} 0&0&0 \end{bmatrix}^T\\ ub=\begin{bmatrix} \infty\\\infty\\\infty \end{bmatrix} 或者 \begin{bmatrix} \infty&\infty&\infty \end{bmatrix}^T f=⎣⎡​−2−35​⎦⎤​或者[−2​−3​5​]TA=[−21​53​−11​]b=[−1012​]或者[−10​12​]TAeq=⎣⎡​111​⎦⎤​或者[1​1​1​]Tbeq=7lb=⎣⎡​000​⎦⎤​或者[0​0​0​]Tub=⎣⎡​∞∞∞​⎦⎤​或者[∞​∞​∞​]T

​ 用Matlab中的程式語言來表示:

f = [-2;-3;5];
                a = [-2,5,-1;1,3,1];
                b = [-10;12];
                aeq = [1,1,1];
                beq = 7;
           

​ 代入求解時:lb可用zeros(3,1)來生成三行一列的零向量

​ ub則不填參來表示無窮

​ 最後解得的fval取相反數即為所要求的最大值z

​ 完整代碼如下:

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));
                x,y = -y
           

​ 求解得結果如下圖:

線性規劃—MATLAB數學模組化線性規劃問題求解

​ 例2:某機床廠生産甲、乙兩種機床,每台銷售後的利潤分别為4000元和3000元。生産甲機床需用A、B機器加工,加工時間分别 為每台2h和1h;生産乙機床需用A、B、C三種機器加工,加工時間為每台各1h。若每天可用于加工的機器時數分别為A機器 10h、B機器8h和C機器7h,問該廠應生産甲、乙機床各幾台,才能使總利潤最大?

​ 解:對上述描述建立數學模型:設該廠生産 x 1 x_1 x1​台甲機床和 x 2 x_2 x2​台乙機床時總利潤z最大,則 x 1 x_1 x1​, x 2 x_2 x2​應滿足:

m a x z = 4 x 1 + 3 x 2 , s . t . { 2 x 1 + x 2 ≤ 10 , x 1 + x 2 ≤ 8 , x 2 ≤ 7 , x 1 , x 2 ≥ 0 。 變 量 x 1 , x 2 為 決 策 變 量 max \quad z=4x_1+3x_2,\\ s.t.\begin{cases} 2x_1+x_2 \leq 10,\\ x_1+x_2 \leq 8,\\ x_2 \leq 7,\\ x_1,x_2 \geq 0。 \end{cases}\\ 變量x_1,x_2為決策變量 maxz=4x1​+3x2​,s.t.⎩⎪⎪⎪⎨⎪⎪⎪⎧​2x1​+x2​≤10,x1​+x2​≤8,x2​≤7,x1​,x2​≥0。​變量x1​,x2​為決策變量

​ 将上式轉化為Matlab标準型并抽取參數得:

f = [ − 4 − 3 ] A = [ 2 1 1 1 ] b = [ 10 8 ] l b = [ 0 0 ] u b = [ ∞ 7 ] f=\begin{bmatrix} -4\\-3 \end{bmatrix}\\ A=\begin{bmatrix} 2&1\\ 1&1 \end{bmatrix}\\ b=\begin{bmatrix} 10\\8 \end{bmatrix}\\ lb=\begin{bmatrix} 0\\0 \end{bmatrix}\\ ub=\begin{bmatrix} \infty\\7 \end{bmatrix} f=[−4−3​]A=[21​11​]b=[108​]lb=[00​]ub=[∞7​]

​ 完整代碼如下:

f = [-4;-3];
A = [2,1;1,1];
b = [10;8];
ub = [inf;7];
[x,y] = linprog(f,A,b,[],[],zeros(2,1),ub);
x,y=-y
           

​ 求解得結果如下圖:

線性規劃—MATLAB數學模組化線性規劃問題求解

4.可以轉化為線性規劃的問題:

​ 對于

m i n ∣ x 1 ∣ + ∣ x 2 ∣ + ⋯ + ∣ x n ∣ s . t . A x ≤ b 。 式 中 : x = [ x 1 , ⋯   , x n ] T ; A 和 b 為 相 應 維 數 的 矩 陣 和 向 量 min\quad |x_1|+|x_2|+\cdots +|x_n|\\ s.t.\quad Ax\leq b。\\ 式中:x=[x_1,\cdots,x_n]^T;\\ A和b為相應維數的矩陣和向量 min∣x1​∣+∣x2​∣+⋯+∣xn​∣s.t.Ax≤b。式中:x=[x1​,⋯,xn​]T;A和b為相應維數的矩陣和向量

​ 可以依據對任意的 x i x_i xi​,存在 u i , v i ≥ 0 u_i,v_i\geq 0 ui​,vi​≥0滿足

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​=ui​−vi​,∣xi​∣=ui​+vi​

​ 隻要取 u i = x i + ∣ x i ∣ 2 , v i = ∣ x i ∣ − x i 2 u_i=\frac{x_i+|x_i|}{2},v_i =\frac{|x_i|-x_i}{2} ui​=2xi​+∣xi​∣​,vi​=2∣xi​∣−xi​​即可滿足上面的條件

​ 這樣記 u = [ u 1 , ⋯   , u n ] T , v = [ v 1 , ⋯   , v n ] T u=[u_1,\cdots,u_n]^T,v=[v_1,\cdots,v_n]^T u=[u1​,⋯,un​]T,v=[v1​,⋯,vn​]T,即可化問題為

m i n ∑ i = 1 n ( u i + v i ) , s . t . { A ( u − v ) ≤ b , u , v ≥ 0 。 min\quad \sum_{i=1}^{n}(u_i+v_i),\\ s.t.\begin{cases} A(u-v)\leq b,\\ u,v\geq 0。 \end{cases} mini=1∑n​(ui​+vi​),s.t.{A(u−v)≤b,u,v≥0。​

​ 進一步改寫模型為:

m i n ∑ i = 1 n ( u i + v i ) , s . t . { [ A , − A ] [ u v ] ≤ b , u , v ≥ 0 。 min\quad \sum_{i=1}^{n}(u_i+v_i),\\ s.t.\begin{cases} [A,-A]\begin{bmatrix}u\\v\end{bmatrix}\leq b,\\ u,v\geq 0。 \end{cases} mini=1∑n​(ui​+vi​),s.t.⎩⎨⎧​[A,−A][uv​]≤b,u,v≥0。​

​ 例3:求解下列數學規劃問題:

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\quad z=|x_1|+2|x_2|+3|x_3|+4|x_4|,\\ s.t.\begin{cases} x_1-x_2-x_3+x_4\leq -2,\\ x_1-x_2+x_3-3x_4\leq -1,\\ x_1-x_2-2x_3+3x_4\leq-\frac{1}{2} \end{cases} minz=∣x1​∣+2∣x2​∣+3∣x3​∣+4∣x4​∣,s.t.⎩⎪⎨⎪⎧​x1​−x2​−x3​+x4​≤−2,x1​−x2​+x3​−3x4​≤−1,x1​−x2​−2x3​+3x4​≤−21​​

​ 解:做變量變換 u i = x i + ∣ u i ∣ 2 , v i = ∣ x i ∣ − x i 2 u_i=\frac{x_i+|u_i|}{2},v_i=\frac{|x_i|-x_i}{2} ui​=2xi​+∣ui​∣​,vi​=2∣xi​∣−xi​​,i=1,2,3,4,并把新變量重新排序成一維向量 y = [ u v ] = [ u 1 , ⋯   , u 4 , v 1 , ⋯   , v 4 ] T y=\begin{bmatrix}u\\v\end{bmatrix}=[u_1,\cdots,u_4,v_1,\cdots,v4]^T y=[uv​]=[u1​,⋯,u4​,v1​,⋯,v4]T,則可 把模型變換為線性規劃模型

m i n c T y , s . t . { [ A , − A ] [ u v ] ≤ b , y ≥ 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 ] 。 min\quad c^Ty,\\ s.t.\begin{cases} [A,-A]\begin{bmatrix}u\\v\end{bmatrix}\leq b,\\ y\geq0。 \end{cases}\\ 式中:c=[1,2,3,4,1,2,3,4]^T,\\ b=[-2,-1,-\frac{1}{2}]^T,\\ A=\begin{bmatrix} 1&-1&-1&1\\ 1&-1&1&-3\\ 1&-1&-2&3 \end{bmatrix}。 mincTy,s.t.⎩⎨⎧​[A,−A][uv​]≤b,y≥0。​式中:c=[1,2,3,4,1,2,3,4]T,b=[−2,−1,−21​]T,A=⎣⎡​111​−1−1−1​−11−2​1−33​⎦⎤​。

​ 故Matlab代碼如下:

c = 1:4;
c = [c,c]';%構造價值列向量
a = [1 -1 -1 1;1 -1 1 -3;1 -1 -2 3];
a = [a,-a];%構造變換後新的系數矩陣
b = [-2 -2 -1/2]';
[y,z] = linprog(c,a,b,[],[],zeros(8,1))%這裡沒有等式限制,對應的矩陣為空矩陣
x =  y(1:4) - y(5:end)%變換到原問題的解,x=u-v
           

​ 結果如圖:

線性規劃—MATLAB數學模組化線性規劃問題求解

5.經典模型:投資的收益與風險

​ 例4:市場上有n種資産 s i ( i = 1 , 2 , ⋯   , n ) s_i(i=1,2,\cdots,n) si​(i=1,2,⋯,n)​可以選擇,現用數額為M的相當大的資金作一個時期的投資。這n種資産在這一時期内購買 s i s_i si​​的平均收益率為 r i r_i ri​​,風險損失率為 q i q_i qi​​,投資越分散,總的風險越少,總體風險可用投資的 s i s_i si​​中最大的一個風險來度量。

購買 s i s_i si​時要付交易費,費率為 p i p_i pi​,當購買額不超過給定值 u i u_i ui​時,交易費按購買 u i u_i ui​計算。另外,假定同期銀行存款利率是 r 0 r_0 r0​,既無交易也無風險 ( r 0 = 5 % ) (r_0=5\%) (r0​=5%)。

已知n=4時相關資料如表所示:

s i s_i si​ r i / % r_i/\% ri​/% q i / % q_i/\% qi​/% p i / % p_i/\% pi​/% u i / 元 u_i/元 ui​/元
s 1 s_1 s1​ 28 2.5 1 103
s 2 s_2 s2​ 21 1.5 2 198
s 3 s_3 s3​ 23 5.5 4.5 52
s 4 s_4 s4​ 25 2.6 6.5 40

試給該公司設計一種投資組合方案,即用給定資金M,有選擇地購買若幹種資産或存銀行生息,使淨收益盡可能的大,總體風險盡可能的小。

​ 解:首先進行符号規定和基本假設:

1.符号規定

(1) s i 表 示 第 i 種 投 資 項 目 , 如 股 票 、 債 券 等 , i = 0 , 1 , ⋯   , n , 其 中 s 0 指 存 入 銀 行 。 s_i表示第i種投資項目,如股票、債券等,i=0,1,\cdots,n,其中s_0指存入銀行。 si​表示第i種投資項目,如股票、債券等,i=0,1,⋯,n,其中s0​指存入銀行。

(2) r i , p i , q i 分 别 表 示 s i 的 平 均 收 益 率 、 交 易 費 率 、 風 險 損 失 率 , i = 0 , 1 , ⋯   , n , 其 中 p 0 = 0 , q 0 = 0. r_i,p_i,q_i分别表示s_i的平均收益率、交易費率、風險損失率,i=0,1,\cdots,n,其中p_0=0,q_0=0. ri​,pi​,qi​分别表示si​的平均收益率、交易費率、風險損失率,i=0,1,⋯,n,其中p0​=0,q0​=0.

(3) u i 表 示 s i 的 交 易 定 額 , i = 1 , 2 , ⋯   , n 。 u_i表示s_i的交易定額,i=1,2,\cdots,n。 ui​表示si​的交易定額,i=1,2,⋯,n。

(4) x i 表 示 投 資 項 目 s i 的 資 金 , i = 0 , 1 , ⋯   , n 。 x_i表示投資項目s_i的資金,i=0,1,\cdots,n。 xi​表示投資項目si​的資金,i=0,1,⋯,n。

(5) a 表 示 投 資 風 險 度 a表示投資風險度 a表示投資風險度

(6) Q 表 示 總 體 收 益 Q表示總體收益 Q表示總體收益

2.基本假設

(1) 投 資 數 額 M 相 當 大 , 為 了 便 于 計 算 , 假 設 M = 1 投資數額M相當大,為了便于計算,假設M=1 投資數額M相當大,為了便于計算,假設M=1

(2) 投 資 越 分 散 , 總 的 風 險 越 小 投資越分散,總的風險越小 投資越分散,總的風險越小

(3) 總 體 風 險 用 投 資 項 目 s i 中 最 大 的 一 個 風 險 來 度 量 總體風險用投資項目s_i中最大的一個風險來度量 總體風險用投資項目si​中最大的一個風險來度量

(4) n + 1 種 資 産 s i 之 間 是 相 互 獨 立 的 n+1種資産s_i之間是互相獨立的 n+1種資産si​之間是互相獨立的

(5) 在 投 資 的 這 一 時 期 内 , r i , p i , q i 為 定 值 , 不 受 意 外 因 素 影 響 在投資的這一時期内,r_i,p_i,q_i為定值,不受意外因素影響 在投資的這一時期内,ri​,pi​,qi​為定值,不受意外因素影響

(6) 淨 收 益 和 總 體 風 險 隻 受 r i , p i , q i 影 響 , 不 受 其 他 因 素 幹 擾 淨收益和總體風險隻受r_i,p_i,q_i影響,不受其他因素幹擾 淨收益和總體風險隻受ri​,pi​,qi​影響,不受其他因素幹擾

​ 再構模組化型:

( 1 ) 總 體 風 險 用 所 投 資 的 s i 中 最 大 的 一 個 風 險 來 衡 量 , 即 m a x { q i x i ∣ i = 1 , 2 , ⋯   , n } (1)總體風險用所投資的s_i中最大的一個風險來衡量,即\\max\{q_ix_i|i=1,2,\cdots,n\} (1)總體風險用所投資的si​中最大的一個風險來衡量,即max{qi​xi​∣i=1,2,⋯,n}​

(2) 購 買 s i ( i = 1 , 2 , ⋯   , n ) 所 付 交 易 費 是 一 個 分 段 函 數 , 即 交 易 費 = { p i x i , x i > u i , p i u i , x i ≤ u i 。 而 題 目 所 給 的 定 值 u i ( 單 位 : 元 ) 相 當 總 投 資 M 很 少 , p i U i 更 小 , 這 樣 購 買 s i 的 淨 收 益 可 以 化 簡 為 ( r i − p i ) x i 。 購買s_i(i=1,2,\cdots,n)所付交易費是一個分段函數,即\\交易費=\begin{cases}p_ix_i,x_i> u_i,\\p_iu_i,x_i\leq u_i。\end{cases}\\而題目所給的定值u_i(機關:元)相當總投資M很少,p_iU_i更小,這樣購買s_i的淨收益可以化簡為(r_i-p_i)x_i。 購買si​(i=1,2,⋯,n)所付交易費是一個分段函數,即交易費={pi​xi​,xi​>ui​,pi​ui​,xi​≤ui​。​而題目所給的定值ui​(機關:元)相當總投資M很少,pi​Ui​更小,這樣購買si​的淨收益可以化簡為(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\sum_{i=0}^{n}(r_i-p_i)x_i,\\ min\{max\{q_ix_i\}\} \end{cases} {max∑i=0n​(ri​−pi​)xi​,min{max{qi​xi​}}​

s . t . { ∑ i = 0 n ( 1 + p i ) x i = M , x i ≥ 0 , i = 0 , 1 , ⋯   , n 。 s.t.\begin{cases} \sum_{i=0}^{n}(1+p_i)x_i=M,\\ x_i\geq 0,i=0,1,\cdots,n。 \end{cases} s.t.{∑i=0n​(1+pi​)xi​=M,xi​≥0,i=0,1,⋯,n。​

​ 再簡化模型:

一是固定風險水準,優化收益。

m a x ∑ i = 0 n ( r i − p i ) x i , s . t . { q i x i M ≤ a , i = 1 , 2 , ⋯   , n , ∑ i = 0 n ( 1 + p i ) x i = M , x i ≥ 0 , i = 0 , 1 , ⋯   , n 。 max\sum_{i=0}^n(r_i-p_i)x_i,\\ s.t.\begin{cases} \frac{q_ix_i}{M}\leq a,i=1,2,\cdots,n,\\ \sum_{i=0}^{n}(1+p_i)x_i=M,x_i\geq0,i=0,1,\cdots,n。 \end{cases} maxi=0∑n​(ri​−pi​)xi​,s.t.{Mqi​xi​​≤a,i=1,2,⋯,n,∑i=0n​(1+pi​)xi​=M,xi​≥0,i=0,1,⋯,n。​

二是固定盈利水準,極小化風險

m i n { m a x { 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 , i = 0 , 1 , ⋯   , n 。 min\{max\{q_ix_i\}\},\\ s.t.\begin{cases} \sum_{i=0}^{n}(r_i-p_i)x_i\geq k,\\ \sum_{i=0}^{n}(1+p_i)x_i = M,\\ x_i\geq 0,i=0,1,\cdots,n。 \end{cases} min{max{qi​xi​}},s.t.⎩⎪⎨⎪⎧​∑i=0n​(ri​−pi​)xi​≥k,∑i=0n​(1+pi​)xi​=M,xi​≥0,i=0,1,⋯,n。​

三是對風險收益分别賦予權重s和1-s,s稱為投資偏好系數

m i n s { m a x { 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 , i = 0 , 2 , ⋯   , n min\quad s\{max\{q_ix_i\}\}-(1-s)\sum_{i=0}^{n}(r_i-p_i)x_i,\\ s.t.\begin{cases} \sum_{i=0}^{n}(1+p_i)x_i=M,\\ x_i\geq 0,i=0,2,\cdots,n \end{cases} mins{max{qi​xi​}}−(1−s)i=0∑n​(ri​−pi​)xi​,s.t.{∑i=0n​(1+pi​)xi​=M,xi​≥0,i=0,2,⋯,n​

模型一代碼如下:

%%從a=0開始以0.001為步長進行循環搜尋
a = 0;
hold on
while a<0.05
	c = [-0.05,-0.27,-0.19,-0.185,-0.185];
	A = [zeros(4,1),diag([0.025,0.015,0.055,0.026])];
	b = a*ones(4,1);
	Aeq = [1,1.01,1.02,1.045,1.065];
	beq = 1;
	LB = zeros(5,1);
	[x,Q] = linprog(c,A,b,Aeq,beq,LB);
	Q = -Q;
	plot(a,Q,'*k');
	a = a + 0.001;
end
xlabel('a'),ylabel('Q')
           

結果如圖:

線性規劃—MATLAB數學模組化線性規劃問題求解

結果分析:

( 1 ) 風 險 大 , 收 益 也 大 (1)風險大,收益也大 (1)風險大,收益也大

( 2 ) 當 投 資 越 分 散 時 , 投 資 者 承 擔 的 風 險 越 小 (2)當投資越分散時,投資者承擔的風險越小 (2)當投資越分散時,投資者承擔的風險越小

( 3 ) 在 a = 0.006 附 近 有 一 個 轉 折 點 , 在 這 一 點 左 邊 , 風 險 增 加 很 小 時 , 利 潤 增 長 很 快 ; 在 這 一 點 的 右 邊 反 之 , 所 以 應 選 a = 0.6 % , Q = 20 % , 所 以 對 應 的 投 資 方 案 為 風 險 度 a = 0.006 , 收 益 Q = 0.2019 , x 0 = 0 , x 1 = 0.24 , x 2 = 0.4 , x 3 = 0.1091 , x 4 = 0.2212. (3)在a=0.006附近有一個轉折點,在這一點左邊,風險增加很小時,利潤增長很快;在這一點的右邊反之,是以應選a=0.6\%,Q=20\%,\\是以對應的投資方案為風險度a=0.006,收益Q=0.2019,x_0=0,x_1=0.24,x_2=0.4,x_3=0.1091,x_4=0.2212. (3)在a=0.006附近有一個轉折點,在這一點左邊,風險增加很小時,利潤增長很快;在這一點的右邊反之,是以應選a=0.6%,Q=20%,是以對應的投資方案為風險度a=0.006,收益Q=0.2019,x0​=0,x1​=0.24,x2​=0.4,x3​=0.1091,x4​=0.2212.

繼續閱讀