Модель CPLEX не работает, но я не знаю почему - PullRequest
0 голосов
/ 14 января 2019

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

Может ли кто-нибудь решить эту проблему?

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

// input data defined externally
// number of control points
int n = ...;
// set of control point indices
{int} N = ...;
// score at each control point
int p[N] = ...;
// distance matrix (travel time)
int t[0..n+1][0..n+1] = ...;
// maximum distance
int Tmax = ...;
 //time xindow
int O[N] = ...;
int C[N]= ...;
//demand
int demand[N] = ...;
//service time
int servicetime[N]= ...;
//Capacity
int Cap= ...;
//M variable
int M= 1000;
//decision variable
 dvar boolean x[0..n][1..n+1]; 
 dvar float B[0..n];
//objective function
dexpr float profit = sum(i in 1..n, j in 1..n+1) 
                        p[i]*x[i][j];
maximize profit;

//constraints
subject to {

  //Time Window 
    forall(i in N)
        O[i] <= B[i];

    forall(i in N)
      B[i] + servicetime[i] <= C[i];


   forall(i in N, j in N)
        B[i] + servicetime[i] + t[i][j] - B[j] <=  M * (1 - x[i][j]);

        //Capacity  
    sum(i in 1..n, j in 1..n+1) demand[i]*x[i][j] <= Cap                           
        //leave starting point
    sum(j in 1..n+1) x[0][j] == 1;
       //arrive at finishing point
    sum(i in 0..n) x[i][n+1] == 1;
      //flow conservation
    forall (k in N)
     sum(i in 0..n) x[i][k] == sum(j in 1..n+1) x[k][j]
    //visit controll points at most once
    forall(k in N)
      sum(i in 0..n) x[i][k] <= 1;
     //maximum tour duration
     sum(i in 0..n, j in 1..n+1)  t[i][j]*x[i][j] <= Tmax;}
...