✅作者简介:人工智能专业本科在读,喜欢计算机与编程,写博客记录自己的学习历程。
🍎个人主页:小嗷犬的个人主页
🍊个人网站:小嗷犬的技术小站
🥭个人信条:为天地立心,为生民立命,为往圣继绝学,为万世开太平。
本文目录
- 投资问题
- 模型建立
- MATLAB 求解
投资问题
设有一笔资金 10 万,未来 5 年内可以投资 4 个项目:
- 项目 1:每年初投资,次年年末回收本利 115%;
- 项目 2:第 3 年初投资,第 5 年末回收本利 125%,投资额不能超过 3 万;
- 项目 3:第 2 年初投资,第 5 年末回收本利 140%,投资额不能超过 4 万;
- 项目 4:每年初投资,当年年末回收本利 106%。
要使 5 年后收益最大化,请问 5 年内应如何投资?
模型建立
考虑每个项目的可投资时段,可得到下表:
第 i 年初 | 1 | 2 | 3 | 4 | 5 |
---|---|---|---|---|---|
项目 1 | ✓ \checkmark ✓ | ✓ \checkmark ✓ | ✓ \checkmark ✓ | ✓ \checkmark ✓ | |
项目 2 | ✓ \checkmark ✓ | ||||
项目 3 | ✓ \checkmark ✓ | ||||
项目 4 | ✓ \checkmark ✓ | ✓ \checkmark ✓ | ✓ \checkmark ✓ | ✓ \checkmark ✓ | ✓ \checkmark ✓ |
表中的对号 ✓ \checkmark ✓ 表示该项目在该年初可以投资,空白表示该项目在该年初不可以投资。
设
x
i
j
x_{ij}
xij 表示项目
i
i
i 在第
j
j
j 年初投资的金额,
i
=
1
,
2
,
3
,
4
i=1,2,3,4
i=1,2,3,4,
j
=
1
,
2
,
3
,
4
,
5
j=1,2,3,4,5
j=1,2,3,4,5。
可得出以下优化模型:
min f ( x ) = 1.15 x 14 + 1.25 x 23 + 1.4 x 32 + 1.06 x 45 s.t. { x 11 + x 41 = 10 x 12 + x 32 + x 42 = 1.06 x 41 x 13 + x 23 + x 43 = 1.15 x 11 + 1.06 x 42 x 14 + x 44 = 1.15 x 12 + 1.06 x 43 x 45 = 1.15 x 13 + 1.06 x 44 x 23 ≤ 3 x 32 ≤ 4 x i j ≥ 0 \begin{align*} \min f(x)=1.15x_{14}+1.25x_{23}+1.4x_{32}+1.06x_{45} \end{align*} \\ \begin{align*} \text { s.t. } \left\{ \begin{array}{c} x_{11} + x_{41} = 10 \\ x_{12} + x_{32} + x_{42} = 1.06x_{41} \\ x_{13} + x_{23} + x_{43} = 1.15x_{11} + 1.06x_{42} \\ x_{14} + x_{44} = 1.15x_{12} + 1.06x_{43} \\ x_{45} = 1.15x_{13} + 1.06x_{44} \\ x_{23} \leq 3 \\ x_{32} \leq 4 \\ x_{ij} \geq 0 \end{array} \right. \end{align*} minf(x)=1.15x14+1.25x23+1.4x32+1.06x45 s.t. ⎩ ⎨ ⎧x11+x41=10x12+x32+x42=1.06x41x13+x23+x43=1.15x11+1.06x42x14+x44=1.15x12+1.06x43x45=1.15x13+1.06x44x23≤3x32≤4xij≥0
MATLAB 求解
% 创建优化问题
prob = optimproblem('ObjectiveSense','max');
% 创建优化变量
x = optimvar('x',4,5,'LowerBound',0);
% 设置优化目标
prob.Objective = 1.15*x(1,4)+1.25*x(2,3)+1.4*x(3,2)+1.06*x(4,5);
% 添加约束
prob.Constraints.cons1 = x(1,1)+x(4,1)==10;
prob.Constraints.cons2 = x(1,2)+x(3,2)+x(4,2)==1.06*x(4,1);
prob.Constraints.cons3 = x(1,3)+x(2,3)+x(4,3)==1.15*x(1,1)+1.06*x(4,2);
prob.Constraints.cons4 = x(1,4)+x(4,4)==1.15*x(1,2)+1.06*x(4,3);
prob.Constraints.cons5 = x(4,5)==1.15*x(1,3)+1.06*x(4,4);
prob.Constraints.cons6 = x(2,3)<=3;
prob.Constraints.cons7 = x(3,2)<=4;
% 检查优化问题
show(prob)
% 求解优化问题
[sol,fval] = solve(prob);
fval
sol.x
结果:
fval =
14.4215
ans =
2.6087 3.8348 0 4.4100 0
0 0 3.0000 0 0
0 4.0000 0 0 0
7.3913 0 0 0 0
即 5 年内应按下表进行投资:
第 i 年初 | 1 | 2 | 3 | 4 | 5 |
---|---|---|---|---|---|
项目 1 | 2.6087 | 3.8348 | 0 | 4.4100 | 0 |
项目 2 | 0 | 0 | 3.0000 | 0 | 0 |
项目 3 | 0 | 4.0000 | 0 | 0 | 0 |
项目 4 | 7.3913 | 0 | 0 | 0 | 0 |
最终收益为 14.4215 − 10 = 4.4215 ( 万元 ) 14.4215 - 10 = 4.4215(万元) 14.4215−10=4.4215(万元)。