2017-03-13 4 views
0

저는 CPLEX의 초보자이며 도움이 필요합니다. 나는 스케줄링을위한 간단한 정수 프로그래밍 문제를 해결하고 싶다. 그리고 나의 전체 코드는 아래에있다. ct2와 ct3에서 오류가 발생하며 배열 범위가 잘못되었다고 생각합니다. 내 질문은 "forall"및 "sum"함수의 배열 범위를 어떻게 만들 수 있습니까?CPLEX에서 정수 프로그래밍을위한 배열 범위

정말 여기에 답을 얻을 수 있기를 바랍니다.

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); 
} 
+0

어떻게 오류가 무엇인지 우리에게 말함으로써 시작에 대한? – TimChippingtonDerrick

답변

0
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; 

는 잘 작동한다

+0

그것은 작동합니다! 매우 감사합니다. :) – hepark