CPLEX - 制定与调度相关的约束

问题描述 投票:0回答:0

我的问题是我想在满足某些条件的时间窗口内为每个车库分配一辆车:

  1. 每辆车在特定时间只能分配到一个车库

  2. 例如。有两个车库,3辆车同时到达。如果1号车被分配到1号车库,2号车必须被分配到2号库,3号车必须等到1号车或2号车离开,所以才有空位给3号车

这是我在 Cplex 中的代码,但它没有按照条件运行。希望有人能帮我改正这个模型。

提前致谢。

int numCar=3; //Number of Receiving trucks
range car=1..numCar;
int numGarage=2;//Number of Receiving doors
range garage=1..numGarage;
int T_max=100;//Maximum Time Window 
range time=1..T_max;
int BigM=10000;

dvar boolean Y[car][garage][time];//if car assign to garage at time t
dvar boolean UR[car][garage][time];//Auxilary Var
dvar boolean VR[car][garage][time];//Auxilary var
dvar boolean RR[car][garage][time];//Auxilary var
dvar int+ ER[car];//Enter Time of c
dvar int+ LR[car];//Leaving Time of c

subject to{
 forall(c in car, g in garage, t in time){
    t>=ER[c]-BigM*(1-UR[c][g][t]);
    t<=ER[c]-1+BigM*UR[c][g][t];
    t<=LR[c]+BigM*(1-VR[c][g][t]);
    t>=LR[c]+1-BigM*VR[c][g][t];
    RR[c][g][t]<=UR[c][g][t];
    RR[c][g][t]<=VR[c][g][t];
    RR[c][g][t]<=Y[[c][g][t];
    RR[c][g][t]>=UR[c][g][t]+VR[c][g][t]+Y[c][g][t]-2;
  }
 forall(c in car, t in time){
    sum(g in gargae)RR[c][g][t]<=1;
  }
  
  forall(c in gargae, t in time){
    sum(c in car)RR[c][g][t]<=numGargae;
  }
model constraints scheduling cplex
© www.soinside.com 2019 - 2024. All rights reserved.