在代码片段中,T、P、C 是集合,x、z 是二元变量。
Equipa {t in T, p in P}:
max{c in C} x[p,t,c] = z[p,t];
我收到错误:
max{...} 之后的被积函数类型无效
我怎样才能以有效的方式重写它?
该错误不会发生在 AMPL 中,而是发生在 GLPK 中,GLPK 仅实现了 AMPL 语法的子集。
以下型号:
set T := 1..10;
set P := 1..10;
set C := 1..10;
var x{P,T,C};
var z{P,T};
Equipa {t in T, p in P}:
max{c in C} x[p,t,c] = z[p,t];
通过
glpsol
解决时会产生错误:
glpsol --model test.run
GLPSOL--GLPK LP/MIP Solver 5.0
Parameter(s) specified in the command line:
--model test.run
Reading model section from test.run...
test.run:9: integrand following max{...} has invalid type
Context: ...quipa { t in T , p in P } : max { c in C } x [ p , t , c ] =
MathProg model processing error
问题是 GLPK 不接受
max
变量,只接受 max
参数。将 var x{P,T,C};
替换为 param x{P,T,C} default 0;
修复了错误。
在 AMPL 中,如果求解器本身不支持
max
,则接受一组变量 max
并自动线性化。