规划问题的建模与编程(一)投资问题
程序员文章站
2022-08-06 08:47:01
建模阶段多目标规划模型:第一个优化目标为总体风险尽可能小。第二个优化目标为总净收益尽可能大。约束条件为总购买额为M和单个购买额大于等于零。对于一个多目标优化模型,常用的考虑方式为先固定其中一个目标,再优化另一个目标。模型一、固定风险水平,优化收益模型二、固定盈利水平,极小化风险模型三、用投资偏好系数赋权更多:https://blog.csdn.net/qq_29831163/article/details/89502094编程阶段模型一的求解示例文件# 1.导入相关库...
建模阶段
多目标规划模型:
第一个优化目标为总体风险尽可能小。
第二个优化目标为总净收益尽可能大。
约束条件为总购买额为M和单个购买额大于等于零。
对于一个多目标优化模型,常用的考虑方式为先固定其中一个目标,再优化另一个目标。
模型一、固定风险水平,优化收益
模型二、固定盈利水平,极小化风险
模型三、用投资偏好系数赋权
更多:https://blog.csdn.net/qq_29831163/article/details/89502094
编程阶段
模型一的求解
示例文件
# 1.导入相关库
import numpy as np
import matplotlib.pyplot as plt
import scipy.optimize as op
# 2.定义初始变量
a = 0
profit_list = [] #记录最大收益
a_list = [] #记录a的取值
# 3.采样搜索
while a<0.05:
#定义决策变量取值范围
x1 = (0,None)
#定义目标函数系数
c = np.array([-0.05,-0.27,-0.19,-0.185,-0.185])
#定义不等式约束条件左边系数
A = np.hstack((np.zeros((4,1)),np.diag([0.025,0.015,0.055,0.026])))
#定义不等式约束条件右边系数
b = a*np.ones((4,1))
#定义等式约束条件左边系数
Aeq = np.array([[1,1.01,1.02,1.045,1.065]])
#定义等式约束条件右边系数
beq = np.array([1])
#求解
res = op.linprog(c,A,b,Aeq,beq,bounds=(x1,x1,x1,x1,x1))
profit = -res.fun
profit_list.append(profit)
a_list.append(a)
a = a+0.001
# 4.绘制风险偏好与最大收益的曲线图
plt.figure(figsize=(10,7))
plt.plot(a_list,profit_list)
plt.xlabel('a')
plt.ylabel('Profit')
plt.savefig("a.png")
plt.show()
运行结果
分析阶段
1.风险越大,收益也就越大
2.冒险的投资者会出现集中投资的情况,保守的投资者则尽量分散投资。
3.在a=0.006附近有一个转折点,在这点左边,风险增加很少时,利润增长很快。在这一点右边,风险增加很大时,利润增长很缓慢。所以对于风险和收益没有特殊偏好的投资者来说,应该选择曲线的拐点作为最优投资组合。
本文地址:https://blog.csdn.net/Small_Lemon_Tree/article/details/107661057