我收到一条错误消息:“已经定义了D”,但我无法解决它

时间:2019-02-19 12:30:35

标签: set ampl

我尝试设置一个最小化问题。尝试加载mod文件时,我不断收到此错误消息:

basemodel.mod, line 4 (offset 86): D is already defined context: set >>> D; <<<

我使用Ampl控制台,想要先加载mod文件,然后再加载dat文件,然后再解决问题。在加载mod文件之后和加载dat文件之前,会出现错误消息。

我试图排除各种参数和变量,以希望找出错误的代码行。 las,每当我尝试排除行的新组合时,错误仍然存​​在。

这是我到目前为止编写的代码:

set D;

param clus {1..k} integer;

param x1 {D};
param x2 {D};

# euclidian distance
param d {i in D, j in D} = sqrt((x1[i]-x1[j])^2 + (x2[i]-x2[j])^2);

var x {i in D, l in clus} binary;
var x {j in D, l in clus} binary;

var D_l {l in k} >= 0;
var D_max;

minimize cost_function: D_max;

subject to C1: D_l[l] >= d[i,j] * (x[i,l] + x[j,l] - 1);
subject to C2 {i in D}: sum {l in k} x[l] = 1;
subject to C3 {i in D}:D_max >= D_l;

1 个答案:

答案 0 :(得分:0)

我猜测您只运行了一次代码而没有收到“ D is defined”错误,然后尝试重新运行它,而没有先清除您在第一次运行中创建的定义。 Set / param / var定义会一直徘徊,直到您执行一些操作来清除它们为止,因此,如果重新运行相同的代码,则对于上次运行中仍定义的任何内容,都会出错。

我通常以reset;开始我的AMPL模型,以清除所有内容,因此我不必处理此问题。 (当然,除非我打算将它们作为更大的工作流程的一部分来运行。)

示例代码还有其他两个问题:

  • clus的定义是指k,尚未定义
  • 变量x被定义两次。