我试图解决以下问题,使用GLPSOL求解器:
Fred在未来五年有5000美元要投资。每年年初,他可以投资一年或两年的定期存款。银行对一年期定期存款支付4%的利息,对两年期定期存款支付9%的利息。此外,西部世界有限公司将从第二年开始提供为期三年的证书。这些证书将返还15%(总计)。如果弗雷德每年都把可用的钱再投资,制定一个线性计划,告诉他如何在第五年年底使他手头的现金总额最大化。
我提出了以下LP模型:
xij是期权i在第j年的投资金额,我们看
最大化z = 1, 04 x <子>子> 15 + 1,09年24 x <子>子> + 1,15 x 33 <子>子>,
受制于:
- x <子>子> 11 + x <子> 12 子> & lt; = 5000
- x <子>子> = x 31日<子> = 34 35 x <子>子> = 0 子>
- x <子>子> 12 + x <子> 22子> 子> & lt; = 1, 04 x <子> 11 子>
- 13 x <子>子> 23 + x <子>子> 33 + x <子>子> & lt; = 1, 04 x <子>子> 12 + 1,09年x <子> 21 子>
- x <子>子> 14 + x <子>子> 24日& lt; = 1, 04 x <子>子> 13 + 1,09年22 x <子>子>
- x <子>子> 15 & lt; = 1, 04 14 x <子>子> + 1,09年x <子>子> 23 + 1,15 32 x <子>子>
- xij>= 0
并尝试用GMPL来写:
/* Variables */
var x{i in 1..3, j in 1..5} >= 0;
/* Objective */
maximize money: 1.04*x[1,5] + 1.09*x[2,4] + 1.15*x[3,3];
/* Constraints */
s.t. x[1,1] + x[2,1] <= 5000;
s.t. x[3,1] = x[3,4] = x[3,5] = 0;
s.t. x[1,2] + x[2,2] + x[3,2] <= 1.04 * x[1,1];
s.t. x[1,3] + x[2,3] + x[3,3] <= 1.04 * x[1,2] + 1.09 * x[2,1];
s.t. x[1,4] + x[2,4] <= 1.04 * x[1,3] + 1.09 * x[2,2];
s.t. x[1,5] <= 1.04 * x[1,4] + 1.09 * x[2,3] + 1.15 * x[3,2];
/* Resolve */
solve;
/* Results */
printf{j in 1..5}:"n* %.2f %.2f %2.f n", x[1,j], x[2,j], x[3,j];
end;
然而,我得到以下错误:
发票。Mod:14: x multiply声明
背景:……[1,5] + 1.09 * x [2,4] + 1.15 * x [3,3];s.t.x
模型处理错误
有人对此有什么想法吗?
必须为每个约束指定唯一的名称。不允许多次赋值。
在我的机器上运行:
/* Variables */
var x{i in 1..3, j in 1..5} >= 0;
/* Objective */
maximize money: 1.04*x[1,5] + 1.09*x[2,4] + 1.15*x[3,3];
/* Restrições */
s.t. c1: x[1,1] + x[2,1] <= 5000;
s.t. c2: x[3,1] = 0;
s.t. c3: x[3,4] = 0;
s.t. c4: x[3,5] = 0;
s.t. c5: x[1,2] + x[2,2] + x[3,2] <= 1.04 * x[1,1];
s.t. c6: x[1,3] + x[2,3] + x[3,3] <= 1.04 * x[1,2] + 1.09 * x[2,1];
s.t. c7: x[1,4] + x[2,4] <= 1.04 * x[1,3] + 1.09 * x[2,2];
s.t. c8: x[1,5] <= 1.04 * x[1,4] + 1.09 * x[2,3] + 1.15 * x[3,2];
/* Resolve */
solve;
/* Results */
printf{j in 1..5}:"n* %.2f %.2f %2.f n", x[1,j], x[2,j], x[3,j];
end;
它打印:
* 0.00 5000.00 0
* 0.00 0.00 0
* 0.00 0.00 5450
* 0.00 0.00 0
* 0.00 0.00 0
祝你好运!