У меня есть переменная Rest, определенная как:
var Rest{I,J,T} >= 0;
где T — множество периодов времени, а I и J — дуги. Мне нужно определить, что каждое значение для I и J, где T = 0, должно быть равно 0. I — это набор узлов предложения, а J — набор узлов спроса.
Я пробовал:
let Rest[*,*,0] default 0;
но это вызвало у меня синтаксическую ошибку. Я пробовал это как в файле .dat, так и в файле .mod, используя как :=, так и :
Я также пытался поместить это в файл .dat
var Rest default 0:=
[*,*,0] 1 City1 0;
но это дало мне ошибку
Error at _cmdno 3 executing "solve" command
(file amplin, line 286, offset 11443):
error processing constraint Constraint1[1,'Leveaniemi',1]:
invalid subscript Rest[1,'City1',0]
Заранее спасибо!
РЕДАКТИРОВАТЬ: теперь я использую:
var Rest default 0 :=
[*,*,0] 1 Leveaniemi 0;
которые дают мне ошибку
Error at _cmdno 3 executing "solve" command
(file amplin, line 286, offset 11438):
error processing constraint Constprocessing commands.
Executing on neos-3.neos-server.org
Error (2) in /opt/ampl/ampl -R amplin
(Я использую сервер NEOS, решатель Gurobi). Что это вообще значит? Кроме того, если я объявлю Variable Rest таким образом, это приведет к тому, что каждое решение Rest станет равным 0? Или компилятор интерпретирует это как начальное значение?
РЕДАКТИРОВАТЬ: я попытался реализовать решение, предоставленное vitaut. Однако это не сработало, как указано в комментариях ниже этого ответа. Я понял, что, поскольку я определил T как:
set T := 1 2 3 ... 15;
и поскольку я хотел сделать оператор let при t = 0, я должен это учесть и определить Rest как:
var Rest{I,J,TimeT};
где TimeU представляет собой T объединение набора только с 0 элементом, т.е. TimeU интерпретируется как:
TimeU := 0 1 2 3 ... 15;
Однако с этим исправлением компилятор жалуется, что все мои переменные и параметры уже определены.