AMPL - max{...} 之后的被积函数具有无效类型

问题描述 投票:0回答:1

在代码片段中,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
1个回答
0
投票

该错误不会发生在 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
并自动线性化。

© www.soinside.com 2019 - 2024. All rights reserved.