Моделирование бинарного ограничения в AMPL - CPLEX - PullRequest
0 голосов
/ 14 октября 2019

У меня есть следующие ограничения

enter image description here

Я попытался смоделировать его в AMPL, используя следующий код:

var y {1..njobs} binary;

subject to overlap 
    {i in 1..njobs, j in i+1..njobs: i<>j}:
        xi[i] + si[i] <= xi[j]+m*y[i];

 subject to order
    {i in 1..njobs, j in i+1..njobs: i<j}:
        y[i] + y[j] = 1;

Я новичок в этой теме и, кажется, что-то упустил в коде выше. какие-либо предложения?

1 Ответ

1 голос
/ 14 октября 2019

Согласно ограничениям, у y есть два индекса, i и j, но ваш код дает ему только один индекс.

Должно быть что-то вроде:

var y {1..njobs,1..njobs} binary;
subject to overlap 
    {i in 1..njobs, j in i+1..njobs: i<>j}:
        xi[i] + si[i] <= xi[j]+m*y[i,j];

 subject to order
    {i in 1..njobs, j in i+1..njobs: i<j}:
        y[i,j] + y[j,i] = 1;

В настоящее время поведениекогда i = j не определено. Вы можете либо добавить ограничение, которое определяет поведение в этом случае, либо исключить его из индексного пространства при объявлении y, например:

var y {i in 1..njobs,j in 1..njobs: i <> j} binary;
...