Почему я получаю только расслабленное решение для моей модели? - PullRequest
1 голос
/ 13 апреля 2019

Я пытаюсь закодировать модель Nourinejad et al 2005 "Перемещение транспортных средств и перебалансировка персонала в односторонних системах разделения транспортных средств".

В моей модели нет ошибок, но я получаю только смягченное решение. Я не понимаю почему.

int n = 4;
range user = 1..n;

int vehicle_relocation_time[user][user]=...;
int staff_rebalance_time[user][user]=...;

 tuple User{
  int origin;
  int destination;
  int departure_time;
  int arrival_time;
}

{User} Users = ...;

int c_reloc = 40;
int c_rebal = 40;

dvar boolean x1[user][user];
dvar boolean x2[user][user][user][user];


minimize
  sum(i,j in Users) vehicle_relocation_time[i.destination][j.origin]*x1[i.destination,j.origin]*c_reloc 
+ sum(i,j,p,q in Users)staff_rebalance_time[j.origin][p.destination]*c_rebal;

subject to {  

forall (j in Users)ctConstraint2:
    sum (i in Users) x1[i.destination,j.origin] == 1;

forall(i in user)      
    x1[i,i] == 0;

forall (j in Users)ctConstraint:
    sum(i in Users: i != j)  x1[i.destination,j.origin] - sum(i in Users: i != j)  x1[j.destination,i.origin] == 0;

forall (i,j in Users : i != j && i.destination != j.origin)ctConstraint4:
    x1[i.destination,j.origin] * (j.departure_time - vehicle_relocation_time[i.destination][j.origin] - i.arrival_time) >= 0 ;

forall (i,j,p,q in Users: i != j && p!=q)ctConstraint5:
    x2[i.destination,j.origin,p.destination,q.origin] * (p.arrival_time-i.arrival_time
    - vehicle_relocation_time[i.destination][j.origin] - staff_rebalance_time[j.origin][p.destination]) >= 0;

forall (p,q in Users: p!=q)ctConstraint6:
    sum(i,j in Users: i != j) x2[i.destination,j.origin,p.destination,q.origin] == sum(r,s in Users: r != s) x2[p.destination,q.origin,r.destination,s.origin];

forall(i,j in Users: i != j)ctConstraint7:
    x1[i.destination,j.origin]*vehicle_relocation_time[i.destination][j.origin] <= sum(p,q in Users: p!=q) x2[i.destination,j.origin,p.destination,q.origin];

forall(i,j in Users: i != j) ctConstraint8:
    sum(p,q in Users: p!=q) x2[i.destination,j.origin,p.destination,q.origin] <=  x1[i.destination,j.origin];

forall(p,q in Users: p!=q) ctConstraint9:
    sum(i,j in Users: i != j) x2[i.destination,j.origin,p.destination,q.origin] <=  x1[p.destination,q.origin];     

}

1 Ответ

1 голос
/ 16 апреля 2019

Если под «смягченным» решением вы подразумеваете, что не все ограничения принимаются во внимание, это может быть связано с тем, что ваша модель фактически недостижима, а некоторые ограничения были автоматически ослаблены, чтобы в любом случае обеспечить решение.

Это поведение по умолчанию при решении моделей в IDE или использовании oplrun.

...