我收到一条错误消息:"D is already defined",我无法解决它
I get an error message: "D is already defined" and I can't solve it
我尝试设置一个最小化问题。尝试加载 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;
我猜你 运行 代码一次没有得到 "D is already defined" 错误,然后尝试重新 运行 它而不先清除你在第一个 运行。 Set/param/var 定义会一直存在,直到你做一些事情来清除它们,所以如果你重新 运行 相同的代码,你将得到关于上一个 运行.[=11= 仍然定义的任何东西的错误。 ]
我通常以 reset;
开始我的 AMPL 模型以清除所有内容,这样我就不必处理这个问题。 (当然,除非我打算 运行 它们作为更大工作流程的一部分。)
您的示例代码还有其他几个问题:
- clus的定义是指k,还没有定义
- 变量 x 被定义了两次。
我尝试设置一个最小化问题。尝试加载 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;
我猜你 运行 代码一次没有得到 "D is already defined" 错误,然后尝试重新 运行 它而不先清除你在第一个 运行。 Set/param/var 定义会一直存在,直到你做一些事情来清除它们,所以如果你重新 运行 相同的代码,你将得到关于上一个 运行.[=11= 仍然定义的任何东西的错误。 ]
我通常以 reset;
开始我的 AMPL 模型以清除所有内容,这样我就不必处理这个问题。 (当然,除非我打算 运行 它们作为更大工作流程的一部分。)
您的示例代码还有其他几个问题:
- clus的定义是指k,还没有定义
- 变量 x 被定义了两次。