【发布时间】: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