目录
*
- 模型建立
- 模型 I : 固定风险水平, 优化收益
- 模型 II : 固定盈利水平, 极小化风险
- 模型 III : 两个目标函数加权求和
市场上有 n n n 种资产 s i {s_i}s i ( i = 1 , 2 , ⋯ , n i = 1,2, \cdots ,n i =1 ,2 ,⋯,n )可以选择,现用数额为 M M M 的充分大的资金作一个时期的投资。这 n n n 种资产在这一时期内购买 s i {s_i}s i 的平均收益率为 r i {r_i}r i ,风险损失率为 q i {q_i}q i ,投资越分散,总的风险越少,总体风险可用投资的 s i {s_i}s i 中最大的一个风险来度量。
购买 s i {s_i}s i 时要付交易费,费率为 p i {p_i}p i ,当购买额不超过给定值 u i {u_i}u i 时,交易费按购买 u i {u_i}u i 计算。另外,假定同期银行存款利率是 r 0 {r_0}r 0 ,既无交易费又无风险( r 0 = 5 % {r_0} = 5\%r 0 =5 % )。
给该公司设计一种投资组合方案,即用给定资金 ,有选择地购买若干种资产或存银行生息,使净收益尽可能大,使总体风险尽可能小。
已知 n = 4 n = 4 n =4, 相关数据如下表.
s i {s_i}s i r i {r_i}r i
(%)
q i {q_i}q i
(%)
p i {p_i}p i
(%)
u i {u_i}u i
(元)
s 1 {s_1}s 1
282.51103
s 2 {s_2}s 2
211.52198
s 3 {s_3}s 3
235.54.552
s 4 {s_4}s 4
252.66.540
模型建立
设 x i x_i x i 表示投资项目 s i s_i s i 的资金, a a a 表示投资风险度, Q Q Q 表示总体收益, 建立如下多目标线性规划模型
{ max ∑ i = 0 n ( r i − p i ) x i min max 1 ≤ i ≤ n { q i x i } s . t . { ∑ i = 0 n ( 1 + p i ) x i = M x i ≥ 0 , i = 0 , 1 , ⋯ , n \begin{gathered} \left{\begin{array}{l} \max \quad \sum_{i=0}^{n}\left(r_{i}-p_{i}\right) x_{i} \ \min \quad \max {1 \leq i \leq n}\left{q{i} x_{i}\right} \end{array}\right. \ s.t. \left{\begin{array}{l} \sum_{i=0}^{n}\left(1+p_{i}\right) x_{i}=M \ x_{i} \geq 0, \quad i=0,1, \cdots, n \end{array}\right. \end{gathered}{max ∑i =0 n (r i −p i )x i min max 1 ≤i ≤n {q i x i }s .t .{∑i =0 n (1 +p i )x i =M x i ≥0 ,i =0 ,1 ,⋯,n
在实际投资中, 投资者承受风险的程度不一样, 下面分别通过给定风险界限, 总收益下限和对风险, 收益分别赋予权重建立三个简化模型把多目标线性规划变成单目标线性规划求解.
模型 I : 固定风险水平, 优化收益
给定风险一个界限 a a a ,使最大的一个风险 q i x i M ⩽ a \displaystyle{\frac{{{q_i}{x_i}}}{M} \leqslant a}M q i x i ⩽a ,可找到相应的投资方案,把多目标规划变成单目标线性规划
max ∑ 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 . \begin{gathered} \max \quad \sum_{i=0}^{n}\left(r_{i}-p_{i}\right) x_{i} \ \text { s.t. }\left{\begin{array}{l} \frac{q_{i} x_{i}}{M} \leq a, i=1,2, \cdots, n, \ \sum_{i=0}^{n}\left(1+p_{i}\right) x_{i}=M, \quad x_{i} \geq 0, \quad i=0,1, \cdots, n . \end{array}\right. \end{gathered}max i =0 ∑n (r i −p i )x i s.t.{M q i x i ≤a ,i =1 ,2 ,⋯,n ,∑i =0 n (1 +p i )x i =M ,x i ≥0 ,i =0 ,1 ,⋯,n .
设 M = 1 M=1 M =1, 代入数据
min f = ( − 0.05 , − 0.27 , − 0.19 , − 0.185 , − 0.185 ) ⋅ ( x 0 , x 1 , x 2 , x 3 , x 4 ) T s . t . { 0.025 x 1 ≤ a 0.015 x 2 ≤ a 0.055 x 3 ≤ a 0.026 x 4 ≤ a x 0 + 1.01 x 1 + 1.02 x 2 + 1.045 x 3 + 1.065 x 4 = 1 x i ≥ 0 ( i = 0 , 1 , ⋯ , 4 ) \begin{gathered} { \min } \quad f=(-0.05,-0.27,-0.19,-0.185,-0.185) \cdot\left(x_{0}, x_{1}, x_{2}, x_{3}, x_{4}\right)^{T} \ { s.t. }\left{\begin{array}{l} 0.025 x_{1} \leq a \ 0.015 x_{2} \leq a \ 0.055 x_{3} \leq a \ 0.026 x_{4} \leq a \ x_{0}+1.01 x_{1}+1.02 x_{2}+1.045 x_{3}+1.065 x_{4}=1 \ x_{i} \geq 0(i=0,1, \cdots, 4) \end{array}\right. \end{gathered}min f =(−0 .0 5 ,−0 .2 7 ,−0 .1 9 ,−0 .1 8 5 ,−0 .1 8 5 )⋅(x 0 ,x 1 ,x 2 ,x 3 ,x 4 )T s .t .⎩⎪⎪⎪⎪⎪⎪⎨⎪⎪⎪⎪⎪⎪⎧0 .0 2 5 x 1 ≤a 0 .0 1 5 x 2 ≤a 0 .0 5 5 x 3 ≤a 0 .0 2 6 x 4 ≤a x 0 +1 .0 1 x 1 +1 .0 2 x 2 +1 .0 4 5 x 3 +1 .0 6 5 x 4 =1 x i ≥0 (i =0 ,1 ,⋯,4 )
从 a = 0 a=0 a =0 开始, 以步长 Δ a = 0.001 \Delta a=0.001 Δa =0 .0 0 1 进行循环搜索, 使用 scipy.optimize.linprog 求解
import matplotlib.pyplot as plt
import numpy as np
from scipy.optimize import linprog
c = [-0.05,-0.27,-0.19,-0.185,-0.185]
A = np.c_[np.zeros(4),np.diag([0.025,0.015,0.055,0.026])]
Aeq =[[1,1.01,1.02,1.045,1.065]]; beq = [1]
a=0; aa=[]; rr=[]
while a<0.05:
b = np.ones(4)*a
res = linprog(c,A,b,Aeq,beq)
x = res.x; Q = -res.fun
aa.append(a); rr.append(Q)
a = a+0.001
plt.rc('font',size=16); plt.rc('font',family='SimHei'); plt.rc('text',usetex=False)
plt.plot(aa,rr,'k')
plt.plot(aa,rr,'r.')
plt.xlabel("风险 a"); plt.ylabel("收益 R",rotation=0)
plt.show()
从图中可以看出, 风险越大, 收益越大, 在 a = 0.006 a=0.006 a =0 .0 0 6 附近有一个转折点, 在这一点左边, 风险增加很少时, 利润增长很快; 在这一点右边, 风险增加很大时, 利润增长很缓慢, 所以对于风险和收益没有特殊偏好的投资者来说,应该选择曲线的转折点作为最优投资组合, 大约是 a = 0.006 a=0.006 a =0 .0 0 6, Q = 0.2019 Q=0.2019 Q =0 .2 0 1 9.
模型 II : 固定盈利水平, 极小化风险
总盈利至少达到水平 k k k 以上,在风险最小的情况下寻求相应的投资组合, 建立模型
min max 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 , i = 0 , 1 , ⋯ , n . \begin{gathered} \min \quad \max {1 \leq i \leq n}\left{q{i} x_{i}\right} \ { s.t. }\left{\begin{array}{l} \sum_{i=0}^{n}\left(r_{i}-p_{i}\right) x_{i} \geq k \ \sum_{i=0}^{n}\left(1+p_{i}\right) x_{i}=M, \ x_{i} \geq 0, \quad i=0,1, \cdots, n . \end{array}\right. \end{gathered}min 1 ≤i ≤n max {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 .
设 x n + 1 = max 1 ≤ i ≤ n { q i x i } x_{n+1}=\max {1 \leq i \leq n}\left{q{i} x_{i}\right}x n +1 =max 1 ≤i ≤n {q i x i }, 则可以线性化为
min x n + 1 , s . t . { q i x i ≤ x n + 1 , i = 1 , 2 , ⋯ , n , ∑ 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 \begin{gathered} &\min \quad x_{n+1}, \ & { s.t. }\left{\begin{array}{l} q_{i} x_{i} \leq x_{n+1}, \quad i=1,2, \cdots, n, \ \sum_{i=0}^{n}\left(r_{i}-p_{i}\right) x_{i} \geq k \ \sum_{i=0}^{n}\left(1+p_{i}\right) x_{i}=M, \ x_{i} \geq 0, \quad i=0,1, \cdots, n \end{array}\right. \end{gathered}min x n +1 ,s .t .⎩⎪⎪⎨⎪⎪⎧q i x i ≤x n +1 ,i =1 ,2 ,⋯,n ,∑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 x 5 , s . t . { 0.025 x 1 − x 5 ≤ 0 0.015 x 2 − x 5 ≤ 0 0.055 x 3 − x 5 ≤ 0 0.026 x 4 − x 5 ≤ 0 − 0.05 x 0 − 0.27 x 1 − 0.19 x 2 − 0.185 x 3 − 0.185 x 4 ≤ − k , x 0 + 1.01 x 1 + 1.02 x 2 + 1.045 x 3 + 1.065 x 4 = 1 x i ≥ 0 , i = 0 , 1 , ⋯ , 5. \begin{gathered} &\min \quad x_{5}, \ & { s.t. }\left{\begin{array}{l} 0.025 x_{1}-x_{5} \leq 0 \ 0.015 x_{2}-x_{5} \leq 0 \ 0.055 x_{3}-x_{5} \leq 0 \ 0.026 x_{4}-x_{5} \leq 0 \ -0.05 x_{0}-0.27 x_{1}-0.19 x_{2}-0.185 x_{3}-0.185 x_{4} \leq-k, \ x_{0}+1.01 x_{1}+1.02 x_{2}+1.045 x_{3}+1.065 x_{4}=1 \ x_{i} \geq 0, \quad i=0,1, \cdots, 5 . \end{array}\right. \end{gathered}min x 5 ,s .t .⎩⎪⎪⎪⎪⎪⎪⎪⎪⎨⎪⎪⎪⎪⎪⎪⎪⎪⎧0 .0 2 5 x 1 −x 5 ≤0 0 .0 1 5 x 2 −x 5 ≤0 0 .0 5 5 x 3 −x 5 ≤0 0 .0 2 6 x 4 −x 5 ≤0 −0 .0 5 x 0 −0 .2 7 x 1 −0 .1 9 x 2 −0 .1 8 5 x 3 −0 .1 8 5 x 4 ≤−k ,x 0 +1 .0 1 x 1 +1 .0 2 x 2 +1 .0 4 5 x 3 +1 .0 6 5 x 4 =1 x i ≥0 ,i =0 ,1 ,⋯,5 .
k k k 从 0.05 0.05 0 .0 5, 以 0.005 0.005 0 .0 0 5 步长迭代, 用 cvxpy 求解
import matplotlib.pyplot as plt
import numpy as np
import cvxpy as cp
x=cp.Variable(6,pos=True)
obj=cp.Minimize(x[5])
a1=np.array([0.025, 0.015, 0.055, 0.026])
a2=np.array([0.05, 0.27, 0.19, 0.185, 0.185])
a3=np.array([1, 1.01, 1.02, 1.045, 1.065])
k=0.05; kk=[]; qq=[]
while k<0.27:
con=[cp.multiply(a1,x[1:5])-x[5]0,a2@x[:-1]>=k, a3@x[:-1]==1]
prob=cp.Problem(obj,con)
prob.solve(solver='GLPK_MI')
kk.append(k); qq.append(prob.value)
k=k+0.005
plt.rc('text',usetex=False); plt.rc('font',size=16); plt.rc('font',family='SimHei')
plt.plot(kk,qq,'k')
plt.plot(kk,qq,'b.')
plt.xlabel("收益 k"); plt.ylabel("风险 Q",rotation=0)
plt.show()
从图中可以看出, 风险越大, 收益越大, 拐点在 k = 0.21 , Q = 0.0077 k=0.21, Q=0.0077 k =0 .2 1 ,Q =0 .0 0 7 7 附近.
模型 III : 两个目标函数加权求和
对风险、收益分别赋予权重 s ( 0 < s ≤ 1 ) s(0 ~~s (0 <s ≤1 )~~ 和 ( 1 − s ) (1-s)(1 −s ), 建立模型
min s ( max 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 , i = 0 , 1 , 2 , ⋯ , n \begin{gathered} \min \;s\left( \mathop {\max }\limits_{1 \leqslant i \leqslant n} \,{ {q_i}{x_i}} \right) - (1 - s)\sum\limits_{i = 0}^n {({r_i} - {p_i}){x_i}} , \ {{s}}{{.t}}{{.}}\left{ \begin{gathered} \sum\limits_{i = 0}^n {(1 + {p_i}){x_i} = M,} \ {x_i} \geqslant 0,\quad i = 0,1,2, \cdots ,n \ \end{gathered} \right. \ \end{gathered}min s (1 ⩽i ⩽n max {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 ,1 ,2 ,⋯,n
令 x n + 1 = max 1 ≤ i ≤ n { q i x i } x_{n+1}=\max {1 \leq i \leq n}\left{q{i} x_{i}\right}x n +1 =max 1 ≤i ≤n {q i x i }, 线性化为
min w x n + 1 − ( 1 − w ) ∑ i = 0 n ( r i − p i ) x i \min \quad w x_{n+1}-(1-w) \sum_{i=0}^{n}\left(r_{i}-p_{i}\right) x_{i}min w x n +1 −(1 −w )i =0 ∑n (r i −p i )x i
s.t. { q i x i ⩽ x n + 1 , i = 1 , 2 , ⋯ , n ∑ i = 0 n ( 1 + p i ) x i = M , x i ⩾ 0 , i = 0 , 1 , 2 , ⋯ , n . \text { s.t. }\left{\begin{array}{ll} q_{i} x_{i} \leqslant x_{n+1}, & i=1,2, \cdots, n \ \sum_{i=0}^{n}\left(1+p_{i}\right) x_{i}=M, & \ x_{i} \geqslant 0, & i=0,1,2, \cdots, n . \end{array}\right.s.t.⎩⎨⎧q i x i ⩽x n +1 ,∑i =0 n (1 +p i )x i =M ,x i ⩾0 ,i =1 ,2 ,⋯,n i =0 ,1 ,2 ,⋯,n .
import matplotlib.pyplot as plt
import numpy as np
import cvxpy as cp
x=cp.Variable(6,pos=True)
r=np.array([0.05, 0.28, 0.21, 0.23, 0.25])
p=np.array([0, 0.01, 0.02, 0.045, 0.065])
q=np.array([0, 0.025, 0.015, 0.055, 0.026])
con=[q[1:]@x[1:-1]x[5], (1+p)@x[:-1]==1, x>=0]
ss,qq,rr=[],[],[]
ww = set()
for w in range(1001):
obj=cp.Minimize((w/1000)*x[5]-(1-w/1000)*((r-p)@x[:-1]))
prob=cp.Problem(obj,con)
prob.solve(solver='GLPK_MI')
ss.append(prob.value)
qq.append(x.value[5])
rr.append((r-p)@x.value[:-1])
ww.add(((r-p)@x.value[:-1], x.value[5]))
plt.rc('font',size=16); plt.rc('font',family='SimHei'); plt.rc('text',usetex=False)
plt.plot(rr,qq,'b--')
plt.plot(rr,qq,'r.')
plt.xlabel("收益 R"); plt.ylabel("风险 Q",rotation=0)
plt.show()
投资的收益越大,风险也越大。投资者可以根据自己对风险喜好的不同,选择合适的投资方案,拐点在 R = 0.186 , Q = 0.015 R=0.186, Q=0.015 R =0 .1 8 6 ,Q =0 .0 1 5 左右.
Original: https://blog.csdn.net/qq_55851911/article/details/124459101
Author: Charle4Leclerc
Title: 数学建模:线性规划—投资的收益和风险模型 (Python 求解)

28【源码】数据可视化:基于 Echarts + Python Flask 动态实时大屏范例 – 数据分析看板

读源码之SimBertv2-stage1

【语音识别】语音识别技术入门

tensorflow使用gpu报错

多模态语义分析_多模态数字人,5G时代下的人机交互

线性回归详解及Tensorflow实战

【Tensorflow2.x学习笔记】day05

自学Seurat进阶——官网教程代码手把手解读(上)

Elasticsearch环境搭建详细教程

修改ROS中使用的全局规路径划算法——将dikstra修改为A*

PCL点云处理与关键点提取

论文阅读 (三)BERT学习

数据压缩第一周作业——Audaity音频文件分析与RGB文件熵计算

《30天吃掉那只 TensorFlow2.0》 1-4 时间序列数据建模流程范例 (国内新冠疫情结束时间预测问题)
