2016-08-16 13 views
0

여기 내 문제가 있습니다. 10 가지 제품을 포장한다고 가정 해 보겠습니다. 모든 10 개 제품의 포장은 동일한 라인/기계에서 이루어집니다.CPLEX 최적화 - 단일 기계에서 일련의 제품 계획하기

다른 제품간에 설정 시간이 다릅니다. 예를 들어, 제품 1에서 제품 2까지의 설치 시간 (높이를 조정해야하며 작은 정리를해야 함)은 30 분입니다. 제품 2에서 제품 1까지 (높이 조절 만하면되며 청소는 필요 없습니다), 설치 시간은 15 분입니다. 제품 1에서 제품 3까지는 5 분이 걸립니다.

설치 시간을 최소화하려고합니다.

어떻게 해결할 수 있습니까? 실제 문제는 100 개의 다른 제품 (100 x 100 매트릭스)을 가지고 있습니다.

Traveling Salesman Problem과 정말 흡사합니다. 차이점은 제품 1 (또는 TSP의 도시 A)에서 절대 떠나야하는 것은 아니며 마지막에 제품 1로 돌아갈 필요가 없다는 것입니다.

다음은 이전에 사용한 TSP 코드입니다. 문제를 해결하기 위해 그것을 수정할 수 있습니까? 아니면 제가 할 수있는 다른 방법이 있습니까?

감사합니다! 나는 당신의 문제를 이해한다면

// *********************** 
// Parameters 
// *********************** 

int  N  = ...; 

range V = 1..N; 

// arcs 

tuple  arc  {int v_dep; int v_arr;} 
setof(arc) A  = {<i,j> | i,j in V: i != j}; 

// Matrix Setup Time 

float   D[V][V] = ...; 

// *********************** 
// Decision variable 
// *********************** 


// x [<i,j>]= 1 if node j follows i 

dvar boolean x[A]; 

// flow conversion 

dvar float+ y[A]; 


// *********************** 
// Objective 
// *********************** 

// Minimize setup times 

minimize sum (<i,j> in A) D[i][j]*x[<i,j>]; 




subject to { 


forall (v in V) 

    sum (a in A: a.v_arr == v) x[a] == 1; 


forall (v in V) 

    sum (a in A: a.v_dep == v) x[a] == 1; 



forall (v in V:v != 1) 

sum (a in A: a.v_arr == v) y[a]-sum (a in A: a.v_dep == v) y[a] == 1; 


    sum (a in A: a.v_arr == 1) y[a]-sum (a in A: a.v_dep == 1) y[a] == -(N-1); 

forall (a in A) 

y[a] <= N*x[a]; 

}; 

답변

0

, 당신은 제품 난에 제품 0에서 비용을 0으로하는 "제품 0"을 작성하여 TSP로 줄이고, 제품에 제품 전에서 0 요할 수 0

그러면 패키징 문제가 "제품 0"으로 시작하고 TSP로 끝나는 TSP가됩니다.