1

我正在为 MathProg 中一个看似简单的模型而苦苦挣扎。模型如下:

set W;
set V;

param b {W, V} binary;
param p;

var w {j in W} <= 0, >= 1;

minimize obj: 0;

subject to within_radius_of {i in V}:
    sum {j in W} b[i,j] * w[j] >= 1;

subject to p_limit:
    sum {j in W} w[j] <= p;

end;

当我运行它时,它给了我错误feasibility.glp:11: b[v1,w1] out of domain。我不知道出了什么问题。对我来说更奇怪的是,如果我将相关行更改为b[j,i]它会一直给出完全相同的错误(不像b[w1,v1]我预期的那样)。

我仔细检查了AMPL 饮食示例,尽管我发现模型的相关部分没有任何差异,但它仍然不起作用。怎么了?

4

1 回答 1

0

参数b被声明为binary只能取值 0 或 1。您尚未提供数据文件,但错误消息表明数据b超出域(不是 0 或 1),例如:

data;
set W := w1;
set V := v1;
param b := w1 v1 0.5;

在这种情况下,AMPL 会给出更详细的错误消息:

error processing param b['w1','v1']:
    failed check: param b['w1','v1'] = 0.5
        is not binary (0 or 1);

在这种情况下,索引顺序无关紧要的原因是b在模型实际实例化之前完全检查了数据。所以看起来,w1并且v1可能在数据文件中被交换。

于 2012-07-05T00:22:15.863 回答