Индексы переменных вне заданного диапазона в AMPL

Не слишком знаком с AMPL, но сталкиваюсь с некоторыми проблемами с индексами...

По сути, у меня есть некоторые переменные, определенные как таковые:

var array{i in set};

И мне нужно сделать некоторое количество проверки элементов вокруг данного i в некоторых из ограничений:

subject to Constraint{i in set}:
    array[i] + array[i-1] + array[i+1] <= 12;

Но очевидно array[0] или же array[card(set) + 1] не существует Чтобы добавить еще одну проблему, я пытаюсь смоделировать проблему, в которой array[0] или же array[card(set) + 1] просто не должно учитываться в наших вычислениях (например, оно не должно ограничивать другие переменные). Любая помощь приветствуется:) Спасибо.

2 ответа

Решение

В AMPL вы можете создавать или определять свои собственные "наборы" для допустимых индексов и использовать их в своих ограничениях.

Итак, в вашем случае, чтобы избежать недопустимых индексов, вы можете определить набор допустимых индексов: param inner_i {2..(N-1)} и зациклить их при создании ограничений.

Цена, которую мы платим, заключается в том, что мы должны четко позаботиться о ключевых случаях.

Вот один из способов сделать это: (Обратите внимание, у меня не загружен AMPL, поэтому код не проверен.)

param N > 0;      #number of elements

set ELEM;         # Elements    
set inner_i {2..(N-1)} > 0; #valid indices

var array {ELEM} >= 0;

subject to LimitSum{i in inner_i}:
    array[i-1] + array[i] + array[i+1] <= 12;

#Take care of the boundary conditions explicitly, if needed
subject to LimitSum_start:
    array[1] + array[2] <= 12;
    #only two elements since array[0] doesn't exist.

subject to LimitSum_last:
    array[N-1] + array[N] <= 12;
    #only two elements since array[N+1] doesn't exist.

Надеюсь, это поможет вам двигаться вперед.

Вы можете использовать выражение if-then-else для условного включения некоторых терминов:

subject to Constraint{i in set}:
    array[i] + (if i != 0 then array[i-1]) + (if i != N then array[i+1]) <= 12;

где N это последний элемент набора.

Другие вопросы по тегам