【问题标题】:Define the function for distance matrix in ampl. Keep getting "i is not defined"在ampl 中定义距离矩阵的函数。不断收到“我未定义”
【发布时间】:2019-02-22 09:25:48
【问题描述】:

我正在尝试建立一个放大模型,该模型根据 Saglam 等人 (2005) 的模型在二维空间中对给定点进行聚类。出于测试目的,我想随机生成一些数据点,然后为它们计算欧几里得距离矩阵(因为我需要这个)。我知道我只能在没有数据点的情况下制作距离矩阵,但在后面的步骤中会给出数据点,然后我需要计算每个点之间的距离。

您将在下面找到我迄今为止编写的代码。在加载模型时,我不断收到错误消息“我未定义”。因为 i 是一个应该在 x1 上运行的下标,而 x1 是一个在集合 D 上定义的参数并且有一个下标,所以我无法弄清楚为什么这段代码应该是无效的。据我了解,如果仅将变量用作下标,则不必定义变量?

reset;

# parameters to define clustered
param m; # numbers of data points
param n; # numbers of clusters

# sets
set D := 1..m; #points to be clustered
set L := 1..n; #clusters

# randomly generate datapoints
param x1 {D} = Uniform(1,m);
param x2 {D} = Uniform(1,m);
param d {D,D} = sqrt((x1[i]-x1[j])^2 + (x2[i]-x2[j])^2);

# variables
var x {D, L} binary;
var D_l {L} >=0;
var D_max >= 0;

#minimization funcion
minimize max_clus_dis: D_max;

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

到目前为止,我尝试将线形参数 x1 更改为

param x1 {i in D, j in D} = ...

还有

param d {x1, x2} = ...

唉,这些都没有帮助。因此,非常感谢有人可以提供的任何帮助。我搜索了网络,但没有发现对我的任务有用。

【问题讨论】:

    标签: ampl


    【解决方案1】:

    我最终找到了丢失的东西。我计算参数 d 的行应该是

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

    回想起来,很明显下标 i 和 j 应该已经被提到了,我不知道我怎么会错过。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2019-03-16
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2021-09-28
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多