2014-10-10 7 views
1

최적화 작업을 수행하려고하지만 원인을 찾을 수없는 오류가 발생합니다. 컴파일러는 servicetime, startlimit 및 endlimit가 유효하지 않음에 대해 불평합니다. 특히 컴파일러는 TimeConstraint 제약 조건에서 servicetime [ 'ORIGINS'] 값이 없음을 불평합니다. 문제AMPL : 유효하지 않은 첨자

제약 조건은 다음과 같습니다

set ORIGINS; 
set DESTINATIONS; 
set UNI; 
param servicetime{UNI} integer > 0; 
var x{UNI,UNI, H} binary; 
param startlimit{UNI}; 
param endlimit{UNI}; 

.DAT 파일은 다음과 같습니다 :이 작동하지 않습니다 볼 수 없습니다

set ORIGINS := 1 2 3 4 5 6 7; 
set DESTINATIONS := 8 9 10 11 12 13 14; 
set UNI = ORIGINS union DESTINATIONS; 


param: startlimit endlimit servicetime:= 
1 0 1440 360 
2 0 1440 360 
3 0 1440 360 
4 0 1440 360 
5 0 1440 360 
6 0 1440 120 
7 0 1440 120 
8 0 1440 360 
9 0 1440 360 
10 0 1440 360 
11 0 1440 360 
12 0 1440 360 
13 0 1440 120 
14 0 1440 120; 

subject to TimeConstraint {k in H}: sum{i in UNI, j in UNI} servicetime[i]*x[i,j,k] <= 1440; 

. 나에게 이것은 정확한 것처럼 보인다. 누군가가 이것에 약간의 빛을 비추 길 바랍니다! 감사

+1

시작 제한 및 종료 제한은 어떻게 정의됩니까? – vitaut

+1

답장을 보내 주셔서 감사합니다. 지금까지 포럼에 로그인 할 수 없었기 때문에 인터넷 문제가 발생했습니다. 정의를 포함하도록 원래 게시물을 수정했습니다. – Cenderze

답변

1

AMPL 데이터 표현을 허용하지 않는 형식 때문에 ORIGINS, unionDESTINATIONS 문자열보다는 당신은 초기화하여이 문제를 해결할 수

set UNI = ORIGINS union DESTINATIONS; 

데이터 문에서 집합 식 ORIGINS union DESTINATIONS로 문자 그대로 해석됩니다 모델 파일의 선언에있는 세트 :

set ORIGINS; 
set DESTINATIONS; 
set UNI = ORIGINS union DESTINATIONS; 
param servicetime{UNI} integer > 0; 
... 
+1

고마워요! 이게 내 문제를 해결했습니다! 필자가 읽은 문서에서 어떤 파일 설명이 작성되어야하는지는 명확하지 않았습니다. – Cenderze