설명
모델 명령문에서 varList 일치를 테스트합니다. 특히 유효한 입력에 대해 테스트하십시오. 기고자: Steven Dirkse, 2024년 9월
소형 모델 유형 :슬롯
카테고리 : 슬롯 테스트 라이브러리
메인 파일 : mcp12.gms
$title 모델 명령문에서 varList 일치 테스트(MCP12, SEQ=965)
$ontext
모델 문에서 varList 일치를 테스트합니다.
특히 유효한 입력에 대해 테스트하십시오.
기고자: Steven Dirkse, 2024년 9월
$offtext
스칼라
XX '모델에 x 포함'
x_ '해에서 x의 값' / 0.5 /
;
세트
당신 / a, b, c /
j1(u)
j2(유)
j3(u)
;
별칭(u,a);
매개변수
v1_(u) '해에서 v1의 값'
v2_(u) '해에서 v2의 값'
v3_(u) '해에서 v3의 값'
;
v1_(u) = 1 + (ord(u)-1)/4;
v2_(u) = 2 + (ord(u)-1)/4;
v3_(u) = 3 + (ord(u)-1)/4;
변수
v1(유)
v2(유)
v3(유)
엑스
;
방정식
전자(유)
에프(유)
;
$macro ERHS(j) [v1_(j) + v2_(j) + v3_(j) + x_]
$macro FRHS(j) [v1_(j) + v2_(j) + v3_(j)]
e(u).. v1(u)$j1(u) + v2(u)$j2(u) + v3(u)$j3(u) + x$XX +
v1_(u)$[j1(u) 아님] + v2_(u)$[j2(u) 아님] + v3_(u)$[j2(u) 아님] + x_$[XX 아님]
=E= ERHS(u);
f(u).. v1(u) + v2(u) + v3(u) =E= FRHS(u);
모델 나 / e : ( v1 | v2 | v3 ) /;
모델 mf / f : ( v1 | v2 | v3 ) /;
$macro CHECK_MOD(m) abort$[m.solvestat <> 1] '잘못된solvestat', m.solvestat
$ontext
-----------------------------------------------------------
사례: 일부 튜플에 대해 빈 v-list가 있는 e.(v1,v2,v3)
행: e_a, e_b, e_c
열: v1_a, v2_b x
결과: e_c가 =E=이고 x가 비어 있다고 가정하면 좋은 일치입니다.
-----------------------------------------------------------
$offtext
j1(u) = sameas(u,'a');
j2(u) = sameas(u,'b');
j3(u) = 아니오;
XX = 1;
슬롯를 사용하여 문제를 해결하세요. CHECK_MOD(나);
v1.fx('a') = 1;
슬롯를 사용하여 문제를 해결하세요. CHECK_MOD(나);
v1.lo('a') = -INF;
슬롯를 사용하여 문제를 해결하세요. CHECK_MOD(나);
v1.up('a') = 0.25;
슬롯를 사용하여 문제를 해결하세요. CHECK_MOD(나);
v1.up('a') = INF;
$ontext
-----------------------------------------------------------
사례: 모든 튜플에 대해 싱글톤 v-list가 있는 e.(v1,v2,v3)
행: e_a, e_b, e_c
열: v1_a, v2_b, v3_c
결과: 모든 변수의 경계에 관계없이 좋은 일치
-----------------------------------------------------------
$offtext
j1(u) = sameas(u,'a');
j2(u) = sameas(u,'b');
j3(u) = sameas(u,'c');
XX = 0;
슬롯를 사용하여 문제를 해결하세요. CHECK_MOD(나);
v3.fx('c') = 1;
슬롯를 사용하여 문제를 해결하세요. CHECK_MOD(나);
v3.lo('c') = -INF;
슬롯를 사용하여 문제를 해결하세요. CHECK_MOD(나);
v3.up('c') = 0.25;
슬롯를 사용하여 문제를 해결하세요. CHECK_MOD(나);
v3.up('c') = INF;
$ontext
-----------------------------------------------------------
사례: 모든 튜플에 대한 전체 v-list가 있는 f.(v1,v2,v3)
행: e_a, e_b, e_c
열: v1_a, v1_b, v1_c
v2_a, v2_b, v2_c
v3_a, v3_b, v3_c
결과: 각 튜플에 대해 2개 이상의 변수를 수정하면 좋은 일치입니다.
-----------------------------------------------------------
$offtext
* 모든 것을 고치고 시작하세요
v1.fx(u) = v1_(u);
v2.fx(u) = v2_(u);
v3.fx(u) = v3_(u);
슬롯를 사용하여 mf를 해결합니다. CHECK_MOD(mf);
v1.fx('c') = 8;
슬롯를 사용하여 mf를 해결합니다. CHECK_MOD(mf);
v1.lo('c') = 0;
슬롯를 사용하여 mf를 해결합니다. CHECK_MOD(mf);
v2.lo('b') = -INF;
v2.up('b') = INF;
슬롯를 사용하여 mf를 해결합니다. CHECK_MOD(mf);
v1.up('a') = 1000;
v1.lo('a') = -1000;
슬롯를 사용하여 mf를 해결합니다. CHECK_MOD(mf);
$onText
-----------------------------------------------------------
사례: 모든 스칼라 = fs.(vs1,vs2,vs3)
행: fs
열: va1
va2
va3
결과: 2개 이상의 변수를 수정하면 좋은 일치
-----------------------------------------------------------
$offText
변수
vs1
vs2
vs3
;
방정식
FS
;
fs.. vs1 + vs2 + vs3 =E= 1;
모델 mfs / fs : ( vs1 | vs2 | vs3 ) /;
* 모든 것을 고치고 시작하세요
vs1.fx = 1;
vs2.fx = 1;
vs3.fx = 1;
슬롯를 사용하여 mfs를 해결합니다. CHECK_MOD(mfs);
vs2.lo = -INF;
vs2.up = INF;
슬롯를 사용하여 mfs를 해결합니다. CHECK_MOD(mfs);
$onText
-----------------------------------------------------------
사례: 모든 튜플에 대한 전체 v-list가 있는 f.(v1,v2,v3) - 추가 차원 포함
행: fv_a, fv_b, fv_c
열: vv1_a, vv1_b, vv1_c
vv2_a, vv2_b, vv2_c
vv3_a, vv3_b, vv3_c
결과: 각 튜플에 대해 2개 이상의 변수를 수정하면 좋은 일치입니다.
-----------------------------------------------------------
$offText
세트
v / x, y, z /
;
매개변수
vv1_(u,v) '해에서 v1의 값'
vv2_(u,v) '해에서 v2의 값'
vv3_(u,v) '해에서 v3의 값'
;
vv1_(u,v) = 1 + (ord(u)-1)/4 + (ord(v)-1)/4;
vv2_(u,v) = 2 + (ord(u)-1)/4 + (ord(v)-1)/4;
vv3_(u,v) = 3 + (ord(u)-1)/4 + (ord(v)-1)/4;
변수
vv1(유,v)
vv2(유,v)
vv3(유,v)
;
방정식
fv(유,v)
;
$macro FRHSV(j,v) [vv1_(j,v) + vv2_(j,v) + vv3_(j,v)]
fv(u,v).. vv1(u,v) + vv2(u,v) + vv3(u,v) =E= FRHSV(u,v);
모델 mfv / fv : ( vv1 | vv2 | vv3 ) /;
* 모든 것을 고치고 시작하세요
vv1.fx(u,v) = vv1_(u,v);
vv2.fx(u,v) = vv2_(u,v);
vv3.fx(u,v) = vv3_(u,v);
슬롯를 사용하여 mfv를 해결합니다. CHECK_MOD(mfv);
vv1.fx('c',v) = 8;
슬롯를 사용하여 mfv를 해결합니다. CHECK_MOD(mfv);
vv1.lo('c',v) = 0;
슬롯를 사용하여 mfv를 해결합니다. CHECK_MOD(mfv);
vv2.lo('b',v) = -INF;
vv2.up('b',v) = INF;
슬롯를 사용하여 mfv를 해결합니다. CHECK_MOD(mfv);
vv1.up('a',v) = 1000;
vv1.lo('a',v) = -1000;
슬롯를 사용하여 mfv를 해결합니다. CHECK_MOD(mfv);