У меня такой вопрос: как я могу использовать SUBSET (прерывистый набор) для ссылки на местоположение индекса в другом наборе, а не на фактическое значение? Я вижу, что ord () можно использовать для возврата позиции значения в наборе, но мне нужно обратное ...
моя причина в этом:
У меня есть модель, в которой некоторые из операторов набора и данных примерно:
set ALL_TIME := {0..20000};
param DATA {ALL_TIME}; #read from file in later data statement;
set myTIME := {0...1000};
Я перебираю набор myTIME и каждый раз решаю модель, а затем увеличиваю начало и конец на 1: {1..1001}, {2..1002}, {3..1003} и т. Д.
У меня есть еще один прерывистый набор, который читается из файла, который выглядит примерно так (да, ниже - плохой синтаксис, "...." просто означает, что шаблон продолжается до тех пор, пока он не достигнет 1000, поэтому мне не нужно набери все):
set SUBSET := {6,7,8,9,10, 16,17,18,19,20, 26,27.....}
Как только myTIME увеличивается так, что больше не содержит "6", я получаю ошибку undefined в нижнем индексе из ограничения, которое, как я понимаю, связано с тем, что myTIME в этом случае равно {7..1007} и, таким образом, в дальнейшем tSUB = 6 вызывает ALPHA [6] и не определено:
subject to CONSTRAINT {tSUB in SUBSET}:
ALPHA [tSUB] = ALPHA[last(tSUB)];
Я хочу иметь возможность использовать SUBSET, чтобы всегда ссылаться на одно и то же место индекса ALPHA, DATA и т. Д. Итак:
SUBSET[0] (which equals 6) should always be the 6th value of for example DATA:
{tSUB in SUBSET}: DATA[tSUB]. when tSUB is 0, I want the 6th value of DATA.
(Я новичок в Ampl, и мне трудно понять, как работают индексация и наборы - если что-то не имело смысла, спросите, и я постараюсь уточнить. Если вы думаете, что было бы более полезно увидеть мою реальный код, я постараюсь очистить данные компании и опубликовать их). Кроме того, некоторые из приведенных выше фрагментов кода имеют ужасный синтаксис. Они не скопированы из моего кода, просто приблизительны, чтобы попытаться объяснить мою проблему. :)