Поиск ограничения MILP для предотвращения чередования целочисленных переменных - PullRequest
0 голосов
/ 29 августа 2018

Вот именно мой случай: Давайте предположим, что переменная x[t], которая является NonNegativeInteger, меньше или равна 3.

Так что x[t] может быть {0,1,2,3}. Индексируется по временной серии.

Я бы хотел предотвратить чередование x[t]. Значит, я бы хотел запретить

x[0] = 0
x[1] = 1
x[2] = 0

но также

x[0] = 1
x[1] = 2
x[2] = 1

и

x[0] = 2
x[1] = 3
x[2] = 2

Я ищу ограничение, чтобы запретить это. Три временных шага должны быть вовлечены в это ограничение.

Я пробовал пару ограничений. Я не уверен, возможно ли это даже с простым ограничением.

Может быть, мне нужно добавить переменную, чтобы сделать эту работу. У вас есть опыт работы с такой проблемой?

Заранее спасибо!

1 Ответ

0 голосов
/ 29 августа 2018

Вы можете обеспечить увеличение или уменьшение ордера с помощью следующих ограничений:

x [t] + M (y-1) <= x [t + 1] </p>

x [t] + My> = x [t + 1]

y: двоичная переменная (во всех уравнениях используется один и тот же y)

M: большое число (больше, чем возможно, наибольшее значение)

...