我试图使用GLPSOL求解器解决以下问题:
弗雷德在未来五年内投资5000美元。在每年年初,他可以投资一年或两年的定期存款。银行支付一年期定期存款的4%利息和两年期定期存款的9%(总额)。此外,West World Limited将从第二年开始提供三年期证书。这些证书将返回15%(总计)。如果弗雷德每年重新投入他的资金,可以制定一个线性计划,向他展示如何在第五年结束时最大限度地增加现金总额。
我提出了以下LP模型:
作为x ij 在第j年投资于期权i的金额,我们期待着 最大化z = 1,04x 15 + 1,09x 24 + 1,15x 33 ,
受制于:
- x 11 + x 12 < = 5000
- x 31 = x 34 = x 35 = 0
- x 12 + x 22 + x 32 < = 1,04 x 11
- x 13 + x 23 + x 33 < = 1,04 x 12 + 1, 09 x 21
- x 14 + x 24 < = 1,04 x 13 + 1,09 x 22
- x 15 &lt; = 1,04 x 14 + 1,09 x 23 + 1,15 x 32 < /子>
- x ij &gt; = 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;
但是,我收到以下错误:
inv.mod:14:x乘以声明的
上下文:...... [1,5] + 1.09 * x [2,4] + 1.15 * x [3,3]; S.T. x
MathProg模型处理错误
有没有人对此有任何想法?
答案 0 :(得分:2)
您必须为每个约束指定一个唯一的名称。不允许多次分配。
这适用于我的机器:
/* 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
祝你好运!