mcp12.gms : 모델 문에서 varList 일치 테스트

설명

모델 명령문에서 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);