mcp15.gms : 모델 문에서 equList 일치 테스트

설명

모델 명령문에서 equList 일치를 테스트합니다.
특히 유효하지 않은 입력에 대한 테스트

기고자: Steven Dirkse, 2024년 9월

소형 모델 유형 :MCP


카테고리 : 슬롯 게임 테스트 라이브러리


메인 파일 : mcp15.gms

$title 모델 명령문에서 equList 일치 테스트(MCP15, SEQ=968)

$onText
모델 문에서 equList 일치를 테스트합니다.
특히 유효하지 않은 입력에 대한 테스트

기고자: Steven Dirkse, 2024년 9월
$offText

스칼라 c / 0 /;

세트
  당신 / a, b, c /
  i1(유)
  i2(유)
  i3(유)
  ;

변수 v(u);
방정식
  n1(u) '일치 =N= 행'
  n2(u) '일치 =N= 행'
  n3(u) '일치 =N= 행'

  e1(u) '일치하는 방정식'
  e2(u) '일치하는 방정식'
  e3(u) '일치하는 방정식'

  h '일치하지 않는 방정식'
  ;

n1(i1(u)).. v(u-1) + v(u) + c * v(u+1) =N= min(2,ord(u));
n2(i2(u)).. v(u-1) + v(u) + c * v(u+1) =N= min(2,ord(u));
n3(i3(u)).. v(u-1) + v(u) + c * v(u+1) =N= min(2,ord(u));

e1(i1(u)).. v(u-1) + v(u) + c * v(u+1) =E= min(2,ord(u));
e2(i2(u)).. v(u-1) + v(u) + c * v(u+1) =E= min(2,ord(u));
e3(i3(u)).. v(u-1) + v(u) + c * v(u+1) =E= min(2,ord(u));

h .. v('b') + v('c') =E= 2;

$ifthen OLDWAY로 설정
모델 m1 / n1.v, n2.v, n3.v /;
모델 m2 / n1.v /;
모델 m3 / e1.v, e2.v e3.v /;
모델 mf '일치하지 않는 h 포함' / m1, h /;
$else
모델 m1 / ( n1 | n2 | n3 ) : v /;
모델 m2 / (n1) : v /;
모델 m3 / ( e1 | e2 | e3 ) : v /;
모델 mf '일치하지 않는 h 포함' / m1, h /;
$endif
$macro CHECK_ERR abort$(0=execerror) '이전 해결에서 실행 오류가 예상됩니다'
$macro CHECK_MOD(m) abort$[m.modelstat <> %modelstat.NoSolutionReturned%] '잘못된 modelstat', m.modelstat; \
                    abort$[m.solvestat <> %solvestat.SolveProcessingSkipped%] '잘못된solvestat', m.solvestat
$macro CLEAR_ERR 실행 오류 = 0
* 오류를 지우지 않으면 후속 해결은 건너뜁니다.
$매크로 DOSTUFF(m) CHECK_ERR;  CHECK_MOD(m);  CLEAR_ERR

* maxexecerror > 0으로 설정하면 오류가 발생해도 작업을 계속할 수 있습니다.
maxexecererror = 1;

$ontext
-----------------------------------------------------------
행: n1_a, n2_b, n3_c
            n1_b
열: v_a, v_b, v_c
결과: v의 경계에 관계없이 잘못된 일치
-----------------------------------------------------------
$offtext
i1(u) = sameas(u,'a') 또는 sameas(u,'b');
i2(u) = sameas(u,'b');
i3(u) = sameas(u,'c');

mcp를 사용하여 m1을 해결합니다.  도스터프(m1);

* v.fx('b') = 1;
mcp를 사용하여 m1을 해결합니다.  도스터프(m1);

v.lo('b') = -INF;
v.up('b') = INF;

$ontext
-----------------------------------------------------------
행: n2_b, n3_c
열: v_a, v_b, v_c
결과: v_a가 수정되지 않은 경우 잘못된 일치
-----------------------------------------------------------
$offtext
i1(u) = 아니요;
i2(u) = sameas(u,'b');
i3(u) = sameas(u,'c');

mcp를 사용하여 m1을 해결합니다.  도스터프(m1);

v.lo('a') = 1;
mcp를 사용하여 m1을 해결합니다.  도스터프(m1);

v.up('a') = 2;
mcp를 사용하여 m1을 해결합니다.  도스터프(m1);

v.lo('a') = -INF;
v.up('a') = INF;

$ontext
-----------------------------------------------------------
행: e1_b, e2_c
                  e3_c
열: v_a, v_b, v_c
결과: v의 경계에 관계없이 잘못된 일치
-----------------------------------------------------------
$offtext
i1(u) = sameas(u,'b');
i2(u) = sameas(u,'c');
i3(u) = sameas(u,'c');

mcp를 사용하여 m3을 해결합니다.    도스터프(m3);