CPLEX, как мне написать уравнение для такой индексации - PullRequest
0 голосов
/ 16 января 2019

Я пытаюсь написать следующее ограничение в cplex ide.

x_ij +x_ji == 1 (либо автомобиль i перед автомобилем j или автомобиль j перед автомобилем i) для всех i и j, таких что i<j

им всем назначена начальная позиция в последовательности, которая составляет 1, honda - 2, bmw - 3, а audi - 4.

что я пробовал ..

{string} cars = ["bently" "honda" "bmw" "audi"];

dvar int x[cars][cars] in 0..1;

    forall(i in cars)
      forall(j in cars:i<j)
        x[i][j] + x[j][i] == 1;

заранее спасибо ..

Ответы [ 2 ]

0 голосов
/ 17 января 2019

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

forall(i in cars)
     ctA:-aps <= ((numcars - sum(i in cars, j in cars:i < j) x[i][j]) - inicarposition[i]);
   forall(i in cars)
     ctB:((numcars - sum(i in cars, j in cars:i < j) x[i][j]) - inicarposition[i]) <= aps; 

привет

0 голосов
/ 16 января 2019

может

{string} cars = {"bently" ,"honda" ,"bmw" ,"audi"};

dvar int x[cars][cars] in 0..1;

subject to
{
    forall(ordered  i,j in cars)

        x[i][j] + x[j][i] == 1;

}        

помощь?

Или

using CP;

{string} cars = {"bently" ,"honda" ,"bmw" ,"audi"};

dvar int position[cars] in 0..3;

subject to
{
    allDifferent(position);

}        

...