Leo Yeh's Blog

SAS 優化研究 (10)

教學目標

初步了解投資組合優化問題之優化模型程式碼應用的基本概念。

重點概念

首先我們主要能夠透過 PROC OPTMODEL 程序解決非線性規劃問題 (Nonlinear Programming,NLP),其中主要使用 NLP 求解器,其中常見選項,請參考下表。

選項 描述 預設值
ALGORITHM 主要指定需要使用的演算法。 內點
LOGFREQ 主要設定輸出至迭代日誌的頻率。 1
SOLTYPE 主要指定最佳解決方案,其中局部最佳解為 0,最可行解為 1。 1

接著 NLP 中主要使用內點演算法,並且會在迭代日誌中產生目標值、最適性誤差、不可解性和反覆運算,以及有關 NLP 求解器的終止標準則有多個參數設定,請參考下表。

選項 描述 預設值
FEASTOL 主要定義可行的容忍度。 1e-6
OPTTOL 主要定義迭代可接受的局部最小值近似值。 1e-6
OBJLIMIT 主要指定目標值大小的上限。 1e+20
MAXITER 主要指定求解器最多主要迭代次數來確定 NLP 問題的最佳值。 5000
MAXTIME 主要指定優化過程時間單位的上限,包括問題產生時間和解決時間。 無限

再來我們能夠透過投資組合優化問題的範例選擇在不超過預期收益的前提下最大化投資組合,更進一步了解 NLP 求解器的應用,該問題的預期收益主要是基於歷史股市資料,至於預期目標風險值為 200。

優化模型程式碼 (非線性)

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
%let expected_risk = 200;
proc optmodel;
set ASSETS = /MMM AA AXP AIG T BAC BA CAT CVX C/;
num return {ASSETS} =
[9.85 10.90 7.32 1.31 5.74 4.58 11.15 16.21 11.92 7.37];
num covariance {ASSETS, ASSETS} =
[427.77 318.95 170.78 143.20 90.28 105.25 203.89 252.32 108.30 200.50
318.95 1443.56 291.85 183.88 226.06 219.65 302.50 489.91 242.84 408.71
170.76 291.85 620.01 241.68 162.42 220.33 269.85 243.93 136.24 413.14
143.20 183.88 241.68 806.94 136.94 144.73 187.12 192.30 127.08 294.13
90.28 226.06 162.42 136.94 597.30 109.05 149.69 185.79 108.41 233.04
105.25 219.65 220.33 144.73 109.05 570.09 125.59 180.80 122.89 383.32
203.89 302.50 269.85 187.12 149.69 125.58 781.05 280.31 173.51 251.25
252.32 489.91 243.93 192.30 185.79 180.80 280.31 838.37 220.19 331.84
108.30 242.84 136.24 127.08 108.41 122.89 173.51 220.19 427.53 175.78
200.50 408.71 413.14 294.13 233.04 383.32 251.25 331.84 175.78 1358.79]
;
var Prop {ASSETS} >= 0;
con Portfolio: sum {j in ASSETS} Prop[j] = 1;
con Variance: sum {i in ASSETS, j in ASSETS}
covariance[i,j] * Prop[i] * Prop[j] <= &expected_risk;
max ExpectedReturn = sum {j in ASSETS} return[j] * Prop[j];
solve ;
print {j in ASSETS: Prop[j]} Prop
{j in ASSETS: Prop[j]} return;
print Variance.ub Variance.dual;
quit;

問題摘要

項目
目標原理 最大化
目標函數 ExpectedReturn
目標類型 線性
變數數目 10
有上限 0
有下限 10
有下限和上限 0
可用 0
固定 0
限制數目 2
線性 LE (<=) 0
線性 EQ (=) 1
線性 GE (>=) 0
線性範圍 0
非線性 LE (<=) 1
非線性 EQ (=) 0
非線性 GE (>=) 0
非線性範圍 0

解法摘要

項目
求解器 NLP
演算法 內點
目標函數 ExpectedReturn
解決方案狀態 最佳
目標值 8.9805347586
最適性誤差 5E-7
不可解性 6.8167705E-8
反覆運算 6
預解時間 0.00
解決時間 0.01

優化模型結果

[1] Prop return
AA 0.0000013264 10.90
AIG 0.0302715268 1.31
AXP 0.0405319101 7.32
BA 0.0522027232 11.15
BAC 0.1299267968 4.58
C 0.0000017658 7.37
CAT 0.0182184250 16.21
CVX 0.3010719523 11.92
MMM 0.2743344647 9.85
T 0.1534390407 5.74
Variance.UB Variance.DUAL
200 0.10913

優化模型日誌

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
NOTE: 問題產生將使用 4 個執行緒。
NOTE: 問題有 10 個變數 (0 個無限制, 0 個固定)。
NOTE: 問題有 1 個線性限制 (0 個 LE、1 個 EQ、0 個 GE、0 個範圍)。
NOTE: 問題有 10 個線性限制係數。
NOTE: 問題有 1 個非線性限制 (1 個 LE、0 個 EQ、0 個 GE、0 個範圍)。
NOTE: OPTMODEL 預解器已移除 0 個變數、0 個線性限制、0 個非線性限制。
NOTE: 對目標使用分析導數。
NOTE: 對非線性限制使用數值導數。
NOTE: 對非線性評估使用 4 個執行緒。
NOTE: The NLP solver is called.
NOTE: The Interior Point algorithm is used.
NOTE: Initial point was changed to be interior to bounds.
目標 最適性
反覆運算 值 不可解性 錯誤
0 0.86350000 0.90000000 0.98630409
1 10.36744854 9.15489293 9.15489293
2 9.79983415 12.74359642 12.74359642
3 9.15520164 0.01377535 0.01377535
4 8.98727249 0.04483575 0.04483575
5 8.98053457 0.0000000735412 0.00002691
6 8.98053476 0.0000000681677 0.0000005000000
NOTE: Optimal.
NOTE: Objective = 8.9805347586.
NOTE: PROCEDURE OPTMODEL used (Total process time):
real time 0.11 seconds
cpu time 0.10 seconds

最後當我們執行優化模型程式碼之後將會輸出以上的結果,從結果中我們將能夠了解十支股票的最佳投資組合和預期年收益為 8.98,並且該問題主要使用內點演算法,以及需要進行六次迭代才能夠收斂至最佳值。

相關資源

⬅️ Go back