MATLAB 投资问题

投资问题

设有一笔资金 10 万,未来 5 年内可以投资 4 个项目:

  • 项目 1:每年初投资,次年年末回收本利 115%;
  • 项目 2:第 3 年初投资,第 5 年末回收本利 125%,投资额不能超过 3 万;
  • 项目 3:第 2 年初投资,第 5 年末回收本利 140%,投资额不能超过 4 万;
  • 项目 4:每年初投资,当年年末回收本利 106%。

要使 5 年后收益最大化,请问 5 年内应如何投资?


模型建立

考虑每个项目的可投资时段,可得到下表:

第 i 年初12345
项目 1\checkmark\checkmark\checkmark\checkmark
项目 2\checkmark
项目 3\checkmark
项目 4\checkmark\checkmark\checkmark\checkmark\checkmark

表中的对号\checkmark 表示该项目在该年初可以投资,空白表示该项目在该年初不可以投资。

xijx_{ij} 表示项目ii 在第jj 年初投资的金额,i=1,2,3,4i=1,2,3,4j=1,2,3,4,5j=1,2,3,4,5
可得出以下优化模型:

maxf(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.06x44x233x324xij0\begin{align*} \begin{align*} \max f(x)=1.15x_{14}+1.25x_{23}+1.4x_{32}+1.06x_{45} \end{align*} \\ \begin{align*} \text { s.t. } \begin{cases} & 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{cases} \end{align*} \end{align*}


MATLAB 求解

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
% 创建优化问题
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

结果:

1
2
3
4
5
6
7
8
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 年初12345
项目 12.60873.834804.41000
项目 2003.000000
项目 304.0000000
项目 47.39130000

最终收益为14.421510=4.4215(万元)14.4215 - 10 = 4.4215(\text{万元})