0
votes

I'm a beginner of CPLEX and need your help. I wanna solve a simple integer programming problem for scheduling and my whole code is below. The errors are generated in ct2 and ct3 and I think array range is wrong. My question is, how can I make array ranges for "forall" and "sum" function?

Really hope I can get some answer here.

int NbGroup = ...;
int NbAutoclave = ...;
int NbTimeslot = ...;
range Group = 1..NbGroup;
range Autoclave = 1..NbAutoclave;
range Timeslot = 1..NbTimeslot;
int MonthlyProduct[Group] = ...;
int CycleTime[Group] = ...;
int CureTime[Group] = ...;

dvar int Assign[Group][Autoclave][Timeslot] in 0..1;
minimize
  sum( g in Group, a in Autoclave, t in Timeslot ) t * Assign[g][a][t];

subject to {
  forall (g in Group)
    ct1:
      sum( a in Autoclave, t in Timeslot ) 
        Assign[g][a][t] == MonthlyProduct[g]; 

  forall (g in Group)
    forall (t in 1..(NbTimeslot-CycleTime[g]+1))
      ct2:
        sum( a in Autoclave, cy in 1..CycleTime[g] )
             Assign[g][a][t+cy-1] <= 1;                  

  forall( a in Autoclave, t in Timeslot )
    ct3:
        sum( g in Group, cu in 1..CureTime[g])
           Assign[g][a][t-cu+1] <= 1; 

}
tuple SolutionT{ 
    int a;
    int b;
    int c;
    int d; 
};
{SolutionT} Solution = {<a0,b0,c0,Assign[a0][b0][c0]> | a0 in Group, b0 in Autoclave, c0 in Timeslot};
execute{ 
    writeln(Solution);
} 
1
How about starting by telling us what the errors were? - TimChippingtonDerrick

1 Answers

0
votes
forall (g in Group)
forall (t in 1..NbTimeslot:t in (1..NbTimeslot-CycleTime[g]+1))
  ct2:
    sum( a in Autoclave, cy in 1..CycleTime[g] )
         Assign[g][a][t+cy-1] <= 1;                  

forall( a in Autoclave, t in Timeslot )
  ct3:
    sum( g in Group, cu in 1..CureTime[g]: t-cu+1 in Timeslot)
       Assign[g][a][t-cu+1] <= 1; 

should work better