설명
슬롯 나라 31에서는 변수 영역을 제한하는 기능을 도입했습니다. 모델 선언문에서. 이 테스트는 이에 대한 구문이 작동하는지 확인합니다. 예상대로. 기고자: Lutz Westermann, 2020년 3월
소형 모델 유형 :슬롯 나라
카테고리 : 슬롯 나라 테스트 라이브러리
메인 파일 : limdom03.gms
$title 변수에 대한 제한된 도메인에 대한 모델 문의 구문을 테스트합니다(limdom03,SEQ=814)
$onText
슬롯 나라 31에서는 변수 영역을 제한하는 기능을 도입했습니다.
모델 선언문에서. 이 테스트는 이에 대한 구문이 작동하는지 확인합니다.
예상대로.
기고자: Lutz Westermann, 2020년 3월
$offText
i / i1 * i3 / 설정
j / j1 * j3 /;
하위(i,j)/i2를 설정합니다. j2 /
하위2(i,j) /i2.(j2,j3)/
하위3(j,j) /j2.(j2,j3)/
하위4(*,*) /i2.(j2,j3)/
하위 5(i,j)
하위6;
양수 변수 x(i,j);
변수 z;
방정식 obj 더미 목적 함수;
obj.. z =e= sum((i,j), x(i,j));
모델 m1 / obj /;
m1 min z를 풀려면 lp를 사용하세요.
abort$(m1.numVar<>10) '완전한 모델에서 10개의 변수가 예상됩니다.'
모델 m2 / obj, x(sub) /;
m2 min z를 풀려면 lp를 사용하세요.
abort$(m2.numVar<>2) 'DL 모델에서 2개의 변수가 예상됩니다.'
* 이는 noOpt여야 합니다.
모델 m3 / m1 - x /;
m3 min z를 풀려면 lp를 사용하세요.
abort$(m3.numVar<>10) '완전한 모델에서 10개의 변수가 예상됩니다.'
* 이는 noOpt여야 합니다.
모델 m4 / m1 - x(sub) /;
m4 min z를 풀려면 lp를 사용하세요.
abort$(m4.numVar<>10) '완전한 모델에서 10개의 변수가 예상됩니다.'
* 이렇게 하면 m2의 DL 부분이 제거됩니다.
모델 m5 / m2 - x /;
m5 min z를 풀려면 lp를 사용하세요.
abort$(m5.numVar<>10) '완전한 모델에서 10개의 변수가 예상됩니다.'
* 이는 이전에 정의된 m2의 DL 부분을 대체해야 합니다.
모델 m6 / m2 + x(sub2) /;
m6 min z를 풀려면 lp를 사용하세요.
abort$(m6.numVar<>3) '완전한 모델에서 3개의 변수가 예상됩니다.'
*** 다음 예에서는 오류가 발생합니다 ***
* x(sub2)가 추가된 적이 없으므로 오류가 발생합니다.
모델 e1 / m2 - x(sub2) /;
$if errorfree $abort 'x(sub2)가 추가되지 않았기 때문에 오류가 발생해야 합니다.'
$clearError
* x에 이미 DL 조건이 있으므로 오류가 발생합니다.
모델 e2 / m2, x(sub2) /;
$if errorfree $abort 'x에 이미 DL 조건이 있으므로 오류가 발생해야 합니다.'
$clearError
* x에 제한 세트가 필요하므로 오류가 발생합니다.
모델 e3 / obj, x /;
$if errorfree $abort 'x에 제한 세트가 필요하므로 오류가 발생해야 합니다.'
$clearError
* x에 제한 세트가 필요하므로 오류가 발생합니다.
모델 e4 / obj + x /;
$if errorfree $abort 'x에 제한 세트가 필요하므로 오류가 발생해야 합니다.'
$clearError
* x와 sub3에는 일치하는 도메인이 없으므로 오류가 발생합니다.
모델 e5 / obj + x(sub3) /;
$if errorfree $abort 'x와 sub3에는 일치하는 도메인이 없으므로 오류가 발생해야 합니다.'
$clearError
* x와 sub4에 일치하는 도메인이 없으므로 오류가 발생합니다.
모델 e6 / obj + x(sub4) /;
$if errorfree $abort 'x와 sub4에 일치하는 도메인이 없으므로 오류가 발생해야 합니다.'
$clearError
* sub5가 초기화되지 않았기 때문에 오류가 발생합니다.
모델 e7 / obj + x(sub5) /;
e7 min z를 풀려면 lp를 사용하세요.
$if errorfree $abort 'sub5가 초기화되지 않았기 때문에 오류가 발생해야 합니다.'
$clearError
* sub6에는 알려진 차원이 없으므로 오류가 발생합니다.
모델 e8 / obj + x(sub6) /;
$if errorfree $abort 'sub6에는 알려진 차원이 없으므로 오류가 발생해야 합니다.'
$clearError
* 접미사가 있는 변수에 도메인 제한을 사용하므로 오류가 발생합니다.
방정식은 다음과 같습니다.
suf.. z =l= sum((i,j), x.l(i,j));
모델 e9 / obj, suf, x(sub) /;
e9 min z를 풀려면 lp를 사용하세요.
$if errorfree $abort '접미사가 있는 변수에 도메인 제한을 사용하므로 오류가 발생합니다.'
$clearError
* 이렇게 하면 마지막 오류가 사라집니다.
$onSuffixDLVars
e9 min z를 해결하려면 lp를 사용하세요.