limdom03.gms : 변수의 제한된 도메인에 대한 모델 문의 구문을 테스트합니다.

설명

슬롯 나라 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를 사용하세요.