課程推薦:6 線性規劃模型基本原理與編程實現_嗶哩嗶哩_bilibili
目錄
一、線性規劃的實例與定義
1.1 線性規劃的實例
1.2 線性規劃的定義
1.3 最優解
1.4 線性規劃的Mathlab標準形式
1.5 使用linprog函數
二、線性規劃模型建模實戰與代碼
2.1 問題提出
2.2 基本假設
2.3 模型的分析與建立?
2.3.1 模型分析
2.3.2 建立模型
2.3.3 多目標線性規劃模型轉化為單目標線性規劃模型——制定界限
2.3.4 求解
在人們的生產實踐中,經常會遇到如何利用現有資源來安排生產,以取得最大經濟效益的問題。此類問題構成了運籌學的一個重要分支:數學規劃。而線性規劃(Linear Programming 簡記LP)則是數學規劃的一個重要分支。
一、線性規劃的實例與定義
1.1 線性規劃的實例
例:某機床廠生產甲、乙兩種機床,每臺銷售后的利潤分別為4千元與3千元。生產甲機床需用A、B機器加工,加工時間分別為每臺 2小時和1小時;生產乙機床需用A、B、C三種機器加工,加工時間為每臺各一小時。若每天可用于加工的機器時數分別為A機器10小時、B機器8小時和C機器7小時,問該廠應生產甲、乙機床各幾臺,才能使總利潤最大?
上述問題的數學模型:設該廠生產x1臺甲機床和x2乙機床時總利潤z最大,則x1,x2應滿足:
以上便是一個線性規劃問題的數學模型,其中變量x1,x2稱之為決策變量,(1.1)式被稱為問題的目標函數,(1.2)中的幾個不等式是問題的約束條件,記為s.t.(即subject to)。
1.2 線性規劃的定義
目標函數及約束條件均為線性函數,故被稱為線性規劃問題。線性規劃問題是在一組線性約束條件的限制下,求一線性目標函數最大或最小的問題。
1.3 最優解
滿足約束條件的解x=[x,,L ,xI',稱為線性規劃問題的可行解,而使目標函數達到最大值的可行解叫最優解。
1.4 線性規劃的Mathlab標準形式
線性規劃的目標函數可以是求最大值,也可以是求最小值,約束條件的不等號可以是小于號也可以是大于號。為了避免這種形式多樣性帶來的不便,Matlab中規定線性規劃的標準形式:
其中c和x為n維列向量,A、Aeq為適當維數的矩陣,b、beq為適當維數的列向量。
Matlab中求解線性規劃的命令為:
Matlab中的linprog函數是一個線性規劃求解器,可以用于求解線性規劃問題。使用條件:滿足Mathlab線性規劃標準形式。
[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返回的是決策向量的取值,fval返回的是目標函數的最優值,c為價值向量,A,b對應的是線性不等式約束,Aeq,beq對應的是線性等式約束,lb和ub分別對應的是決策向量的下界向量和上界向量。
1.5 使用linprog函數
求解的Matlab程序如下:
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
1. 目標函數中求max時,將目標函數的系數全部取反,即可看作求min,代入linprog函數,求得目標函數的最優值再取反回來,便得到了求max時目標函數的最優值(y)。這時,決策向量(x)的取值正對應著求max時目標函數的最優值,所以不變。
2. 約束條件中的不等號為大于號時,系數全部取反,代入linprog函數即可。
二、線性規劃模型建模實戰與代碼
2.1 問題提出
??????? 市場上有n種資產
(i= 1,2,L ,n)可以選擇,現用數額為M的相當大的資金作一個時期的投資。這n種資產在這一時期內購買
的平均收益率為
,風險損失率為
,投資越分散,總的風險越少,總體風險可用投資的
中最大的一個風險來度量。
????????購買時要付交易費,費率為
,當購買額不超過給定值
時,交易費按購買
計算。另外,假定同期銀行存款利率是
,既無交易費又無風險(
= 5%)。
????????已知n=4時相關數據如表1.1。
????????試給該公司設計一種投資組合方案,即用給定資金M,有選擇地購買若干種資產或存銀行生息,使凈收益盡可能大,使總體風險盡可能小。
2.2 基本假設
- (1)投資數額M相當大,為了便于計算,假設M=1。
- (2)投資越分散,總的風險越小。
- (3)總體風險用投資項目
中最大的一個風險來度量。
- (4)n+1 種
資產之間是相互獨立的。其中s0表示存入銀行的資產。
- (5)在投資的這一時期內,
,
,
為定值,不受意外因素影響。
- (6)凈收益和總體風險只受
,
,
影響,不受其它因素干擾。
2.3 模型的分析與建立?
2.3.1 模型分析
- 1. 首先,我們要明確兩個目標,即收益最大和風險最小,因此這是一個多目標規劃模型。
- 2. 總體風險用所投資的
中最大的一個風險來衡量,即
????????????????????????????????????????????????????????
- 3. 購買
(i= 1,L ,n) 所付交易費是一個分段函數,即
而所給的定值 (單位:元)相對總投資M很小,
更小可以忽略不計,這樣購買
的凈收益可以簡化為
。
2.3.2 建立模型
其中, 表示投資項目
的資金,i= 0,1,…,n;x0表示存入銀行的資產。約束條件表示總資金投入必須等于M,投資項目
的資金必須大于等于0。
2.3.3 多目標線性規劃模型轉化為單目標線性規劃模型——制定界限
方案一:固定風險水平,優化收益
在實際投資中,投資者承受風險的程度不一樣, 若給定風險一個界限a,使最大的一個風險,可找到相應的投資方案。這樣把多目標規劃變成一個目標的線性規劃。
方案二:固定盈利水平,極小化最大風險
給定收益一個界限k。
方案三:設置投資偏好系數
投資者在權衡資產風險和預期收益兩方面時,希望選擇一個令自己滿意的投資組合。因此對風險、收益分別賦予權重s (0<s≤1)和1-s,s稱為投資偏好系數。
2.3.4 求解
模型一:
由于a是任意給定的風險度,沒有一個確定的準則,不同的投資者有不同的風險度。我們從a= 0開始,以步長 = 0.001進行循環搜索,編制程序如下:
clc,clear
a=0;hold on
while a<0.05c=[-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')
可以看出,在a=0.006附近有一個轉折點,在這一點左邊,風險增加很少時,利潤增長很快。在這一點右邊,風險增加很大時,利潤增長很緩慢,所以對于風險和收益沒有特殊偏好的投資者來說,應該選擇曲線的轉折點作為最優投資組合,所對應投資方案為風險度a= 0.006,收益Q=0.2019,x0=0,x1= 0.24,x1= 0.4,x3= 0.1091,x4= 0.2212。