2014-10-19 3 views
1

나는 임업 분야에서 최적화를 수행하고 있는데, 세트 C 회사는 수확 지역 세트 I에서 일부 구색 세트 A로부터 일부 목재를 공제 할 수 있습니다. x [I, 변수 A를 사용하여 C 회사의 시간 T에서 차량 V를 사용하는 수확 지역 I에서 제재 J 로의 흐름을 나타냅니다.infeasiblity를 피하기 위해 리모델링해야 함

문제는 각 제재소가 최소 필요성, d_minus.

# The flow must not exceed the total capacity for each vehicle and time period 
subject to Constraint6 {v in V, t in T}: 
    sum{i in I, j in J, c in C, a in A} x[i,j,v,t,c,a] <= capacity[v]; 

이 그러나 constraint2에서 불가능의 경계에 걸쳐 불평 컴파일러가 :

# The total flow into a node at time period t must exceed the minimum demand. 
subject to Constraint2 {j in J, t in T, p in T, c in C, a in A: p <> t}: 
    sum{v in V, i in I} x[i,j,v,p,c,a] >= d_minus[j,t,c,a]; 

말썽이 차량 V가 모델링 특정 용량을 가지고있다 :이 이루어집니다. 예

presolve: constraint Constraint2[1,1,6,1,3] cannot hold: 
body >= 1000 cannot be <= 273; difference = 727 

들어 4 개 임 차량과 각 차량에 대한 용량 (40) (I뿐만 아니라 400, 1000를 사용했지만, 에러가 남아) 사용. d_minus 매개 변수는 500과 1000 사이입니다.

저는 params가 너무 좁아서는 안된다고 생각합니다. 1000의 수용량을 사용하여, 나는 압박 할 것입니다 3의 차량 함대를 가진 필요를 준수해야합니다. 나는 "for all"제약 조건이 해결책을 제한하여 오류를 일으키고 있다고 생각합니다. Constraint2에 대해 "T에서 모든 T, J에서 J"를 사용하려고 시도했지만 d_minus에 대한 해당 subscript를 찾을 수 없습니다. 누구나 단서가 있습니까?

감사

답변

1

내가 presolve 후 제약 Constraint2[1,1,6,1,3]를 표시합니다 solexpand 명령을 사용하는 것이 좋습니다 :

solexpand Constraint2[1,1,6,1,3]; 

이 정확히 불가능 성 원인을 몇 가지 통찰력을 줄 수도 있습니다. 문제가 단일 제약 조건이므로 매우 큰 제약 조건을 사용하지 않는 한 너무 어렵지 않아야합니다.이 경우에는 데이터 집합을 가능한 가장 작게 줄여서 실행 불가능 성을 유발하는 것이 좋습니다.

+0

답장을 보내 주셔서 감사합니다. NEOS 서버를 사용 중이며 .run 파일에 해당 명령을 추가해도 아무 것도 인쇄되지 않았습니다. NEOS에서 solexpand를 사용하는 방법을 Google에 시도했지만 아무 것도 발견하지 못했습니다. NEOS를 사용하여 오류를 추적하는 방법을 알고 있습니까? – Cenderze

+0

그것은 solexpand를 사용하여 지금 일했습니다! 고마워, 그것에 대해 몰랐다. 답장을 보내 주셔서 감사합니다. 나는 solexpand를 사용하여 내 원래 포스트에서 편집 된 결과를 얻으려고 시도했다. 모든 조합에 대해 d_minus 제약 조건을 1로 수정했습니다. 그것은 모든 x 변수가 0이되어야한다는 해답을주었습니다. 어떻게 될지 알고 있습니까? – Cenderze

+1

귀하의 의견에 감사 드리며이 문제를 해결했습니다. 수락하고 upvoted 대답 물론. 다시 한 번 감사드립니다! – Cenderze