AI智能
改变未来

lingo入门——河北省第三届研究生建模竞赛B题


一、题干

1.1 题目

投资建模(河北省第三届研究生建模竞赛B题)
从2021年年初开始到2050年前,未来教育基金会(FFE)向M国部分高等院校捐助一笔经费以帮助贫困学生,将现有的8000万美元资金进行债务投资。
相关投资要求:

  1. 医药健康债券购买金额不能少于购买总金额的20%,交通运输、科技研发、装备制造以及国民福利的债券购买金额不能少于购买总金额的10%。
  2. 所购买债券的平均风险等级不得低于2.5,等级数字越大,风险越低。
  3. 所购买的债券的平均到期年限不超过10年。
  4. 要求捐助活动结束后FFE继续保留8000万美元资金。

如上所示为各个基金的一些信息,值得注意的是,其对风险等级的约束很小,而收益率又定义为固定值,所以这个模型相对实际问题已经做了很大的简化。

1.2 问题

  • 若 SEB 债券投资只允许在第一年初进行,分配8000万美元使收益最大。
  • 假定可以进行重复投资,使得 2050 年末的一次性捐款金额达到最大。
  • FFE 改变捐助方式,计划从 2021 开始,在未来 30 年内每年年初捐助一笔每年金额固定的经费。允许重复投资。使得每年捐助的金额达到最大。
  • FFE 为了帮助疫情防控,决定在每年捐助给高校的金额尽量不低于第 3 问 的金额的前提下,投资尽量向医药健康和科技研发上倾斜。原则上规定:医药健康的投资额,尽量与科技研发相等,尽量是交通运输的 1.2 倍,尽量是装备制造 的 1.5 倍,尽量是国民福利的 2 倍。允许重复投资。

二、模型的建立

第一问没啥写的价值,直接写第二、三、四问。

2.1 符号

符号 意义
money_inimoney\\_in_imoney_ini​ 第iii年在收入状态后的总资金
money_outimoney\\_out_imoney_outi​ 第iii年在支出状态后的总资金
xi,jx_{i,j}xi,j​ 第iii年对第jjj个债券的购买量
aia_iai​ 第iii个产品在一轮周期后的利润率
bib_ibi​ 第iii个产品一轮周期时常
cic_ici​ 第iii个产品增值税率
did_idi​ 第iii个产品风险等级
ppp 每年的捐款数量

2.2、思路

2.2.1、思路1

观察这道题目在投资时的资金流转过程,可以发现它每年都有这么两组操作:

  • 继承一年剩下的资产、获取前几年投资所带来的利润
  • 进行各类债券进行投资、对外捐赠(第三问)

所以我们可以考虑对该问约束时进行状态分离,即先进行moneyinimoneyin_imoneyini​操作,再进行moneyoutimoneyout_imoneyouti​操作。其间的等量关系大致如下,其他的具体情况在正式做的时候再具体讨论:
money_ini=money_outi−1+∑j=115[xi−bi,j+xi−bi,jai(1−ci)]money_ini=money_outi+p+∑j=115xi,jmoney\\_in_i=money\\_out_{i-1}+\\sum_{j=1}^{15}{[x_{i-b_i,j}+x_{i-b_i,j}a_i(1-c_i)]}\\\\money\\_in_i=money\\_out_i+p+\\sum_{j=1}^{15}{x_{i,j}}money_ini​=money_outi−1​+j=1∑15​[xi−bi​,j​+xi−bi​,j​ai​(1−ci​)]money_ini​=money_outi​+p+j=1∑15​xi,j​

2.2.2、思路2

首先根据一个很明显的构想:如果你当下有钱,且时间足够充裕到你得到收益,那么你必然会去拿这笔钱去投资。甭管投啥,反正会投(而投啥其实就是我们要去求解的内容)。因为如果你今年不投,今后再投的话,在收益上除了时间线的后移外没有任何变化。所以这里本质上是一个带约束的贪心问题。
我们可以粗略的建立一个等量关系,其他的具体情况在正式做的时候再具体讨论:
∑j=115xi,j=∑j=115[xi−bi,j+xi−bi,jai(1−ci)]\\sum_{j=1}^{15}{x_{i,j}}=\\sum_{j=1}^{15}{[x_{i-b_i,j}+x_{i-b_i,j}a_i(1-c_i)]}j=1∑15​xi,j​=j=1∑15​[xi−bi​,j​+xi−bi​,j​ai​(1−ci​)]

2.3 确定等量关系

思考了上面两个思路后,发现他们本身其实是并不冲突的,但问题在于以上的贪心算法并没有考虑留每天的捐款的情况。只是表现的形式不一样。所以可以将他们结合起来,建立如下等量关系。
{money_ini=money_outi−1+∑j=115[xi−bi,j+xi−bi,jai(1−ci)]money_ini=money_outi+p+∑j=115xi,j\\begin{cases}money\\_in_i=money\\_out_{i-1}+\\sum\\limits_{j=1}^{15}{[x_{i-b_i,j}+x_{i-b_i,j}a_i(1-c_i)]}\\\\money\\_in_i=money\\_out_i+p+\\sum\\limits_{j=1}^{15}{x_{i,j}}\\\\% p+\\sum\\limits_{j=1}^{15}{x_{i,j}}=\\sum\\limits_{j=1}^{15}{[x_{i-b_i,j}+x_{i-b_i,j}a_i(1-c_i)]}\\end{cases}⎩⎪⎪⎨⎪⎪⎧​money_ini​=money_outi−1​+j=1∑15​[xi−bi​,j​+xi−bi​,j​ai​(1−ci​)]money_ini​=money_outi​+p+j=1∑15​xi,j​​
然后基于我们对于题目的分析与各类情况的思考,可以得到以下几点:

  • 当剩余天数少于该债券周期的话,那么必然不买这个债券。
  • 因为债券最小周期为2天,且采用贪心策略,所以前两天必定是全部花费。(在第三问及第四问中,应留下用于每天捐赠的钱)
  • 因为是贪心策略,所以money_outimoney\\_out_imoney_outi​只有在最后一天不为0(该特性为第二问独有,第三问与第四问需考虑给捐款存钱的情况)

将其转化为符号语言即为:
{∑j=115∑i=31−bj30xi,j=0∑j=115×1,j+x2,j=2p\\begin{cases}\\sum\\limits_{j=1}^{15}{\\sum\\limits_{i=31-b_j}^{30}{x_{i,j}}}=0\\\\\\sum\\limits_{j=1}^{15}{x_{1,j}+x_{2,j}}=2p\\end{cases}⎩⎪⎪⎪⎨⎪⎪⎪⎧​j=1∑15​i=31−bj​∑30​xi,j​=0j=1∑15​x1,j​+x2,j​=2p​

2.4、明确约束

首先根据常识,可以得到如下几条约束:
{xi,j>=0p>=0money_ini>=money_outi>=0\\begin{cases}x_{i,j}>=0\\\\p>=0\\\\money\\_in_i>=money\\_out_i>=0\\end{cases}⎩⎪⎨⎪⎧​xi,j​>=0p>=0money_ini​>=money_outi​>=0​
然后根据那四条投资要求,可得出以下四个约束:
{∑j=115(bj∑i=130xi,j)≤10∑j=115∑i=130xi,j∑j=115(dj∑i=130xi,j)≥2.5∑j=115∑i=130xi,j∑i=130(xi,1+xi,2+xi,3)>0.2∑j=115∑i=130xi,j∑i=130(xi,3k+xi,3k−1+xk,3j−2)>0.1∑j=115∑i=130xi,j,(k∈{2,3,4,5})\\begin{cases}\\sum\\limits_{j=1}^{15}{(b_j\\sum\\limits_{i=1}^{30}{x_{i,j}})}≤10\\sum\\limits_{j=1}^{15}{\\sum\\limits_{i=1}^{30}{x_{i,j}}}\\\\\\sum\\limits_{j=1}^{15}{(d_j\\sum\\limits_{i=1}^{30}{x_{i,j}})}≥2.5\\sum\\limits_{j=1}^{15}{\\sum\\limits_{i=1}^{30}{x_{i,j}}}\\\\\\sum\\limits_{i=1}^{30}(x_{i,1}+x_{i,2}+x_{i,3})>0.2\\sum\\limits_{j=1}^{15}{\\sum\\limits_{i=1}^{30}{x_{i,j}}}\\\\\\sum\\limits_{i=1}^{30}(x_{i,3k}+x_{i,3k-1}+x_{k,3j-2})>0.1\\sum\\limits_{j=1}^{15}{\\sum\\limits_{i=1}^{30}{x_{i,j}}},(k\\in\\{2,3,4,5\\})\\end{cases}⎩⎪⎪⎪⎪⎪⎪⎪⎪⎪⎪⎪⎨⎪⎪⎪⎪⎪⎪⎪⎪⎪⎪⎪⎧​j=1∑15​(bj​i=1∑30​xi,j​)≤10j=1∑15​i=1∑30​xi,j​j=1∑15​(dj​i=1∑30​xi,j​)≥2.5j=1∑15​i=1∑30​xi,j​i=1∑30​(xi,1​+xi,2​+xi,3​)>0.2j=1∑15​i=1∑30​xi,j​i=1∑30​(xi,3k​+xi,3k−1​+xk,3j−2​)>0.1j=1∑15​i=1∑30​xi,j​,(k∈{2,3,4,5})​
暂时想到这些。

三、编写程序

3.1、第二问

3.2、第三问

3.3、第四问

四、总结

赞(0) 打赏
未经允许不得转载:爱站程序员基地 » lingo入门——河北省第三届研究生建模竞赛B题