Реализация ограничения на основе предыдущего значения переменной в GNU Mathprog/AMPL

У меня есть двоичная программа и одна из моих переменных, x_it, определена в двух наборах: I: Set of objects и T: Set of the weeks of the year, таким образом, x_it — это двоичная переменная, обозначающая, назначен ли объект i чему-то на неделе t. Ограничение, которое мне не удалось реализовать в AMPL/GNU Mathprog, заключается в том, что если x_it равно 1, то x_i(t+1) и x_i(t+2) также должны принимать значение 1. Есть ли способ реализовать это ограничение на простом языке математического программирования?


person oakenshield1    schedule 07.12.2020    source источник


Ответы (1)


Вывод, который вы хотите реализовать:

 x(i,t) = 1 ==> x(i,t+1) = 1, x(i,t+2) = 1

AMPL поддерживает импликации (с оператором ==›), так что мы можем написать это напрямую. Матпрог нет.

Простой способ реализовать импликацию в виде прямых линейных неравенств:

x(i,t+1) >= x(i,t)    
x(i,t+2) >= x(i,t)

Это можно легко выразить в AMPL, MathProg или любом инструменте моделирования.

Это чистый, наивный перевод вопроса. Однако это означает, что когда-то один x(i,t)=1 все последующие x(i,t+1),x(i,t+2),x(i,t+3)..=1. Этого можно было бы добиться с помощью ограничения x(i,t+1) >= x(i,t).

Лучшей интерпретацией было бы: нам не нужны очень короткие тиражи. т.е. шаблоны: 010 и 0110 не допускаются. Это иногда называется минимальным временем безотказной работы при планировании машин и может быть смоделировано по-разному.

  1. Запретить шаблоны 010 и 0110:

     (1-x(i,t-1))+x(i,t)+(1-x(i,t+1)) <= 2
     (1-x(i,t-1))+x(i,t)+x(i,t+1)+(1-x(i,t+2)) <= 3
    
  2. Шаблон 01 подразумевает 0111:

      x(i,t+1)+x(i,t+2) >= 2*(x(i,t)-x(i,t-1))
    

Оба эти подхода предотвратят появление шаблонов 010 и 0110.

person Erwin Kalvelagen    schedule 08.12.2020
comment
Но не думаете ли вы, что эти ограничения в конечном итоге приводят к тому, что все x_it равны 1 ? - person oakenshield1; 08.12.2020
comment
да. Я добавлю несколько разных подходов. - person Erwin Kalvelagen; 08.12.2020