Как убедиться, что транспортное средство стартует из депо м, оно должно вернуться в то же депо в CPLEX в Проблеме маршрутизации на месте - PullRequest
1 голос
/ 19 сентября 2019

это в моем OPL-коде в Location Routing Problem, есть 3 депо-кандидата, 8 клиентов и 4 автомобиля.оптимальный результат был: 300174667, депо, открывающее 2-е и 3-е депо.маршрут получается следующим образом:

from depot 2-4-8- depot 3 (vehicle 2)
from depot 2-7-5- depot 2 (vehicle 1)
from depot 2-10-9- depot 3 (vehicle 4)
from depot 3-6-11- depot 3 (vehicle 3)

видно, что есть два маршрута, которые начинаются с депо 2 и заканчиваются в депо 3. Я надеюсь, что в случае, если транспортное средство стартует в депо 2, онизакончится также в депо 2.

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

это моя модель:

int m=...; //depot
int c=...; //customer
int k=...; //vehicle
range M=1..m;
range C=m+1..m+c;
range V=1..m+c;
range K=1..k;

tuple jalur {int i;int j;}
tuple jalur_truk {int i;int j;int k;}

setof (jalur) ij={<i,j> | i,j in V:i!=j};
setof (jalur_truk) ijk={<i,j,k> | i,j in V:i!=j, k in K};

int ct[ij]=...;
int f[M]=...;
int o[K]=...;
int Q[M]=...;
int d[C]=...;
int q[K]=...;

//decision variable
dvar boolean X[ijk]; 
dvar boolean Y[M];

//(1): objective functions:
minimize sum(m in M) f[m]*Y[m] + sum(i,j in V:i!=j, k in K) ct[<i,j>]*X[<i,j,k>]+
    sum(m in M, i in C, k in K) o[k]*X[<m,i,k>]; 

 subject to{
//(2): each customer must be visited exactly once
forall (j in C) 
  sum (k in K, i in V:j!=i) X[<i,j,k>] == 1;

forall (i in C) 
  sum (k in K, j in V:j!=i) X[<i,j,k>] == 1;

//(3)-(5): vehicle flow conservation 
forall (k in K)
  sum (m in M, i in C) X[<m,i,k>] == 1;  

forall (k in K)
  sum (i in C, m in M) X[<i,m,k>] == 1; 

forall (h in C, k in K)
  sum(i in V:i!=h) X[<i,h,k>] - sum (j in V:j!=h) X[<h,j,k>] == 0 ;

//(6)-(7): vehicle and depot capacity constraints
forall (k in K)
  sum(i in C,j in V: j!=i) d[i]*X[<i,j,k>] <= q[k];

forall (m in M)
  sum(j in C, k in K) d[j]*X[<m,j,k>] <= Q[m]*Y[m];

//(8): computes and limits the number of vehicle U used
  sum (i in M, j in C, k in K) X[<i,j,k>] - k == 0;  

}

И данные:

//data
m=3;
c=8;
k=4;
ct=[3200    4267    2133    6400    5333    8384    5760    6688      3093  3093
3200        2133    2240    1493    4267    2987    5333    6731    245 245
4267    5333        4267    9493    2987    3072    9600    10101   10240   10240
6688    3093    5760        1280    3072    9995    11093   8384    10347   10347
6731    245 5333    6731        9995    3008    907 2987    5653    5653
10101   10240   9600    10101   10240       11093   1493    3072    6187    6187
8384    10347   11093   8384    10347   3072        9493    9995    9493    9493
2987    5653    907 2987    5653    9995    10240       3008    6720    6720
3072    6187    1493    3072    6187    3008    10347   6720        3008    9493
9995    9493    9493    9995    9493    11093   5653    9493    3072        1280
3008    6720    1280    3008    6720    9493    6187    1280    9995    3008]; 
f=[150000000 150000000 150000000];
o=[32896 32896 32896 32896];
Q=[1500 1500 1500];
d=[419 526 475 464 680 489 509 460];
q=[1100 1100 1100 1100];
...