Я получаю сообщение об ошибке: «D уже определен», и я не могу решить его - PullRequest
0 голосов
/ 19 февраля 2019

Я пытаюсь настроить проблему минимизации.При попытке загрузить мод-файл я получаю следующее сообщение об ошибке:

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

Я работаю с консолью amp и сначала хочу загрузить мод-файл, затем-файл, а затем решить проблему.Сообщение об ошибке появляется после загрузки мод-файла и перед загрузкой 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;

1 Ответ

0 голосов
/ 20 февраля 2019

Я предполагаю, что вы запустили код один раз, не получив сообщение об ошибке «D уже определено», а затем попытались запустить его без предварительной очистки определений, которые вы создали при первом запуске.Определения set / param / var будут зависать до тех пор, пока вы не сделаете что-то для их очистки, поэтому, если вы повторно запустите тот же код, вы получите ошибки для всего, что все еще определено с последнего запуска.

Обычно я начинаю свои модели AMPL сreset; чтобы очистить все, чтобы мне не приходилось сталкиваться с этой проблемой.(Если, конечно, я не планирую запускать их как часть более крупного рабочего процесса.)

Пара других проблем с вашим примером кода:

  • Определение кластера относится кk, который не был определен
  • Var x определен дважды.
...