Я пытаюсь создать модель амплитуды, которая объединяет заданные точки в 2-мерное пространство в соответствии с моделью Саглама и др. (2005). В целях тестирования я хочу случайным образом сгенерировать некоторые точки данных, а затем вычислить для них евклидову матрицу расстояний (так как она мне нужна). Я знаю, что я могу создать только матрицу расстояний без точек данных, но на более позднем этапе точки данных будут предоставлены, а затем мне нужно рассчитать расстояния между каждой точкой.
Ниже вы найдете код, который я написал до сих пор. При загрузке модели все время появляется сообщение об ошибке «i не определено». Поскольку 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} = ...
Увы, ничего из этого не помогло. Поэтому мы очень ценим любую помощь, которую кто-то может предложить. Я поискал в Интернете, но не нашел ничего полезного для моей задачи.