找回密码
 会员注册
查看: 30|回复: 0

数学建模:运筹优化类——线性规划

[复制链接]

4

主题

0

回帖

13

积分

新手上路

积分
13
发表于 2024-9-12 12:11:54 | 显示全部楼层 |阅读模式
目录1.线性规划2.线性规划模型三要素3.模型特点4.建模步骤5.案例演示1.线性规划线性规划(LP)是研究线性约束条件下线性目标函数的极值问题的数学理论和方法。可为合理利用有限人力、物力、财力等资源作出最优决策,提供科学依据。 2.线性规划模型三要素决策变量:问题中要确定的未知量,用于表明规划问题中的用数量表示的方案、措施等,可由决策者决定和控制。目标函数:决策变量的函数,优化目标通常是求该函数的最大值或最小值。约束条件:决策变量的取值所受到的约束和限制条件,通常用含有决策变量的等式或不等式表示。3.模型特点要解决的问题是优化类的(即在有限的资源条件下,获取最大的收益)。目标函数和约束条件都是决策变量的线性函数,即不存在等。线性规划模型:在一组线性约束条件下,求线性目标函数的最大值或最小值。4.建模步骤1.根据影响所要达到目的的因素找到决策变量。2.由决策变量和所在达到目的之间的函数关系确定目标函数。3.由决策变量所受的限制条件确定决策变量所要满足的约束条件。5.案例演示5.1游戏升满级题目:该游戏每天有100点体力,可通过反复通关A、B、C三张地图来获取经验升级,通关A图可获得20点经验,通关B图可获得30点经验,通关C图可获得45点经验,但通关地图会消耗体力,其中通关A图消耗4点体力,通关B图消耗8点体力,通关C图消耗5点体力,同时A、B、C三图每天加在一起最多通关20次,求该怎么组合通关ABC三个地图的次数来使今天获得的经验最大?解答:由上题可知:决策变量:三个地图通关次数。设A、B、C三个地图通关的次数分别为,,。目标函数:获得的经验最高。设经验为y,。约束条件:消耗体力不能超过100(),三个地图最多超过20次(),隐藏约束条件(),用一般形式(代数形式)表现为:转换为矩阵表现形式为:其中:——目标函数的系统向量,即价值向量;——决策向量;——约束方程组的系数矩阵;——约束方程组的常数向量。编程实现:importnumpyasnpfromscipy.optimizeimportlinprog#目标函数系数,这里取负值,因为linprog默认进行最小优化c=[-20,-30,-45]#不等式约束的系数矩阵A_ub=[[4,8,15],[1,1,1]]#不等式约束的右侧向量值bb_ub=[100,20]#定义域bounds=[[0,None],[0,None],[0,None]]#求解线性规划问题#注意:由于linprog默认是求解最小化问题,我们通过对目标函数系数取负值来转换为最大化问题result=linprog(c,A_ub,b_ub,bounds=bounds)#输出结果print('A、B、C三图分别通关的次数为:',result.x)#解向量#目标函数的最大值是最小化问题的相反数y=-result.funprint('最终获得的经验为:',y)输出结果如下,可知通过通关A图15次,B图5次,C图0次即可获得今天经验最大450值:5.2投资选择题目:市场上有n种资产(如股票、债券、......)(i=1,2,...,n)供投资者选择,某公司有数额为M的一笔相当大的资金可用作一个时期的投资。公司财务分析人员对这n种资产进行了评估,估算出在这一时期内购买资产的平均收益率为,并预测出购买的风险损失率为。考虑到投资越分散,总的风险越小,公司确定,当用这笔资金购买若干种资产时,总体风险可用所投资的中最大的一个风险来度量。购买要付交易费,费率为,并且当购买额不超过给定值时,交易费按购买计算(不买无须付费)。另外,假定同期银行存款利率是(=5%),且既无交易又无风险。已知n=4时的相关数据如表所示:(%)(%)(%)(元)282.51103211.52198235.54.552252.66.540问:给上述公司设计投资组合方案,用给定资金M,有选择地购买若干种资产或存银行生息,使净收益尽可能大,总体风险尽可能小。 解答:由上题可知:决策变量:投资不同项目的为(i=1,2,...,n)。目标函数:净收益Q尽可能大、总风险尽可能小。约束条件:总资金M有限,每一笔投资都是非负数。模型假设:可供投资的资金数额M相当大。投资越分散,总的风险越小,总体风险可用所投资的中最大的一个风险来度量。可供选择的n+1种资产(含银行存款)之间是相互独立的。每种资产可购买的数量为任意值。在当前投资周期内,,,,(i=0,1,...,n)固定不变。不考虑在资产交易过程中产生的其他费用。由于投资数额M相当大,而题目设定的定额相对M很小,更小,因此假设每一笔交易都大于对应定额。模型建立:1)总体风险用所投资的中最大的一个风险来衡量,即.2)购买(i=1,2,...,n)所付交易费本来是一个分段函数,但假设中已假设每一笔交易都大于对应定额,所以交易费=,这样购买的净收益可以简化为.3)由以上可以得出:目标函数为:约束条件为:可以发现这是一个多目标规划模型,我们可以将其进行简化变成一个目标的线性规划。 模型简化:在实际投资中,投资者承受风险的程度不一样,这时可以给定风险一个界限a,使最大的一个风险 ,这样就可以将目标函数中的转换为约束条件(总体风险小于某个常数)。至此,模型用一般形式表现为:将数值代入进去得:这里M我们取1万元,由于a是任意给定的风险度,不妨a从0开始,以步长=0.001进行循环搜索,搜索至a=5%(低风险者能够接受的风险)。 编程实现:importmatplotlib.pyplotaspltfromnumpyimportones,diag,c_,zeros#用于创建和操作数组fromscipy.optimizeimportlinprog#用于执行线性规划#设置matplotlib的参数使其支持LaTeX文本和字体大小plt.rc('text',usetex=True)plt.rc('font',size=16)#线性规划问题的目标函数系数c=[-0.05,-0.27,-0.19,-0.185,-0.185]#线性不等式约束的系数矩阵#使用c_来合并数组,zeros创建一个全0的数组作为第1列,diag创建一个对角阵A=c_[zeros(4),diag([0.025,0.015,0.055,0.026])]#线性等式约束的系数矩阵和右侧的值Aeq=[[1,1.01,1.02,1.045,1.065]]beq=[1]#初始化参数a,以及两个用于存储结果的空列表a=0aa=[]ss=[]#循环,a的值从0开始,以0.0001的步长增加,直到0.05whilea)plt.ylabel('$Q,rotation=90)#显示图形plt.show()风险a与收益Q之间的关系由上图可以看出:①风险不超过2.5%时,风险大,收益也大;②在a=0.006附近有一个转折点,在这一点左边,风险增加很少时,利润增长很快。在这一点右边,风险增加很大时,利润增长很缓慢。所以对于风险和收益没有特殊偏好的投资者来说,应该选择曲线的转折点作为最优投资组合,大约是a=0.6%,Q=2000,所对应的投资方案为:风险度a=0.006,收益Q=2019元;=0元,=2400元,=4000元,=1091元,=2212元。
回复

使用道具 举报

您需要登录后才可以回帖 登录 | 会员注册

本版积分规则

QQ|手机版|心飞设计-版权所有:微度网络信息技术服务中心 ( 鲁ICP备17032091号-12 )|网站地图

GMT+8, 2024-12-27 00:40 , Processed in 1.571874 second(s), 26 queries .

Powered by Discuz! X3.5

© 2001-2024 Discuz! Team.

快速回复 返回顶部 返回列表