簡體   English   中英

IBM CPLEX Optimization Studio OPL 不遵守約束?

[英]IBM CPLEX Optimization Studio OPL doesn't respect constraints?

我正在處理一個項目,在該項目中,我有一個導入到 cplex 的節點之間的距離矩陣。 我這樣做:

tuple arc{
 float x;
 float y;
 float d;
 float Ttime;       //Time to travell the arc
 }

 tuple vehicle{
 key int id;
 int STdepot;   //Starting Depot (1 or 2)
 int MaxCars;       //Maximum number of cars in a vehicle
 float AvSpeed;     //Average Speed of a vehicle
 }

tuple cavities{
key int id;
float x;
float y;
float rate;         //Consumption Rate
float iniStock;     //Initial Stock to be consumed at cavitie x
float deadline;     //Deadline to arrive at cavitie x
int ProdCons;       //Production Consumed at cavitie x

}

tuple CAVtype{
key int id;
int CarsCons;       //Consuming cars of 12 or 20
}

tuple nodes{
key int id;
float x;        //Coordinates in X
float y;        //Coordinates in Y
string type;
}       
 setof(arc)         OD = ...;   //DistanceMatrix
 setof(vehicle)     K=...;      //Vehicles
 setof(cavities)    C=...;      //Cavities
 setof(CAVtype)     T=...;      // Cavities Type
 setof(nodes)       N=...;      //Nodes

  float d[N][N];
  float t[N][N];    

execute preProcess{

  cplex.tilim=300;
  for(var i in N){
    for(var j in N){
        d[i][j] = 9999;
        t[i][j] = 9999;
    }
  }

  for(var arc in OD){
  var origin = N.get(arc.x);      
  var destination = N.get(arc.y);

      d[origin][destination] = arc.d;
      t[origin][destination] = arc.Ttime;
  }  
 }

它導入所有內容,但是當我添加限制時,不遵守距離矩陣並且變量顯示沒有連接的節點之間的連接。 另外,最后一個限制改變了 q 的值,為什么會發生這種情況? 我該如何解決這個問題?

提前致謝。

目標函數和限制如下:

    dexpr float MachineStoppage = sum(k in K,i in N,j in N) d[i][j] * x[i][j][k] + 
 sum(g in C,k in K) penalize *phi[g] + sum(i in N,g in C) u[i][g];              //(1)

minimize MachineStoppage;

//*******************************|Restrictions|***********************************************************
subject to{

forall (i in C, k in K)                                         //(2)
  FlowConservation:
 sum(j in N: i.id!=j.id) x[<i.id>][j][k] == z[<i.id>][k];

forall (i in C, k in K)                                         //(3)
  FlowConservation2:
 sum(j in N: i.id!=j.id) x[j][<i.id>][k] == z[<i.id>][k];


 forall(i in N, k in K: i.type == "d" && k.STdepot!= i.id)                                          //(5)
   DepartingFromAnyDepot:
  sum(j in N: i.id!=j.id) x[i][j][k] == 0;


 forall(i in N)                      
   sum(k in K) z[i][k]==1; 

 forall(i in N,j in N,k in K: i!=j && j.id!=0)                          //(8)
   ArrivalTimeTracking1:
  w[k][i] + t[i][j] <= w[k][j] + M*(1-x[i][j][k]);


 forall(i in N,j in N,k in K: i!=j && j.id!=0)                          //(9)
   ArrivalTimeTracking2:
  w[k][i] + t[i][j] >= w[k][j]- M*(1-x[i][j][k]);

 forall(k in K, g in C, i in N)                                         //(10)
   ReplenishmentDelay:
 //w[k][<g.id>] <= g.deadline + phi[g];
  w[k][<g.id>] <= g.deadline + phi[g];

 forall(i in N, g in C, k in K)                                        //(11)
   QuantitiesToBeDeliveredToTheCavities:                            
  q[k][g] == ((g.rate*w[k][<g.id>]) + u[i][g] + (g.ProdCons-g.iniStock));

 forall(i in N,g in C,k in K)                                          //(12)
   LimitofQuantitiesToBeDelivered:
   q[k][g] >= z[i][k] * g.ProdCons;
  //q[k][g] >= z[<i.id>][k] * g.ProdCons;

 forall(h in T, k in K)                                                //(13)
   NumberOfCarsOfEachTypeinEachVehicle:
  sum(i in N,g in C) q[k][g] <= h.CarsCons*y[k][h];

/*
 forall(k in K, g in C)                                                //(14)
   MaximumOfCarsinaVehicle:
  sum(h in T) y[k][h] <=b;
*/

你確定你沒有得到一個輕松的解決方案嗎? 在文檔中

IDE 和 OPL > CPLEX Studio IDE > IDE 教程

您可以查看“放寬不可行模型”部分。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM