【问题标题】:I get an error message: "D is already defined" and I can't solve it我收到一条错误消息:“D 已定义”但我无法解决
【发布时间】:2019-02-19 12:30:34
【问题描述】:

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

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

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

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

这是我目前编写的代码:

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;

【问题讨论】:

    标签: set ampl


    【解决方案1】:

    我猜您运行了一次代码而没有收到“D 已定义”错误,然后尝试重新运行它而没有先清除您在第一次运行中创建的定义。 Set/param/var 定义将一直存在,直到您执行某些操作来清除它们,因此如果您重新运行相同的代码,您将得到上次运行时仍然定义的任何错误。

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

    您的示例代码的其他几个问题:

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

    【讨论】:

    • 我尝试了您的方法并且它有效,但我没有意识到我每次都必须重置它。感谢您强调其他问题,我在放大器方面没有那么丰富。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2018-05-23
    • 2021-08-26
    • 2020-07-08
    • 1970-01-01
    • 2020-01-17
    • 1970-01-01
    • 2022-11-19
    相关资源
    最近更新 更多