mcp19.gms : 여러 일치 항목이 있는 모델 문에서 evList 일치 테스트

설명

여러 evList 일치를 사용하여 모델 명령문에서 evList 일치를 테스트합니다.

기고자: Steven Dirkse, 2025년 4월

소형 모델 유형 :슬롯 커뮤니티


카테고리 : 슬롯 커뮤니티 테스트 라이브러리


메인 파일 : mcp19.gms

$title 여러 일치 항목이 있는 모델 문의 evList 일치 테스트(MCP19, SEQ=983)

$ontext
여러 evList 일치를 사용하여 모델 문에서 evList 일치를 테스트합니다.

기고자: Steven Dirkse, 2025년 4월
$offtext

세트
  나는 / i1 * i2 /
  j / j1 * j2 /
  k / k1 * k2 /
  l / l1 * l2 /
  ;
매개변수
  x2_(j,k)
  x3_(i,j,k)
  x4_(i,j,k,l)
  r_(k,l)
  s_(i) / i1 1.5, i2 2.5 /
  t_(j) / j1 1.0, j2 3.0 /
  A(i,j,k,l)
  B(i,j,k) / i2.j1.k1 1, i2.j1.k2 2, i2.j2.k1 2, i2.j2.k2 4 /
  ;
x2_(j,k) = ord(j) + 0.25 * (ord(k)-1);
x3_(i,j,k) = ord(i) + 0.125 * (ord(k)+ord(j)-2);
execseed = 70221;
x4_(i,j,k,l) ​​= 균일(1,2);
r_(k,l) = ord(l) + 카드(l)*(ord(k)-1);
A(i,j,k,l)$[(ord(i) eq ord(k)) and (ord(j) eq ord(l))] =uniform(0,4);
B('i1',j,k) = 1;
변수
  x2(j,k)
  x3(i,j,k)
  x4(i,j,k,l)
  너(이,제이)
  v(j,k)
  r(k,l)
  s(i)
  t(j)
  ;
방정식
  f2(j,k)
  f3(i,j,k)
  f4(i,j,k,l)
  g(i,j,k)
  h1(i)
  h2(i,j)
  ;
f2(j,k) .. exp(x2(j,k)) - ord(k) * (x2(j,k)-x2_(j,k)) =N= exp(x2_(j,k));
f3(i,j,k) .. exp(x3(i,j,k)) - ord(k) * (x3(i,j,k)-x3_(i,j,k)) =N= exp(x3_(i,j,k));
f4(i,j,k,l) ​​.. exp(x4(i,j,k,l)) - ord(k) * (x4(i,j,k,l)-x4_(i,j,k,l)) =N= exp(x4_(i,j,k,l));
g(i,j,k) .. u(i,j) + B(i,j,k) * v(j,k) =E= 1 + B(i,j,k);
h1(i) .. power(s(i),3) =E= power(s_(i),3);
h2(i,j) .. sum(k,l), A(i,j,k,l)*(r(k,l)-r_(k,l))
	     + s(i) - s_(i) + t(j) - t_(j)
               =E= 0;

모델 m /
  f2.x2
  (g) : (유, v)
  f3.x3
  (h1,h2):(r,s,t)
  f4.x4
/;

매개변수
  치키(i)
  chkj(j)
  치키(i,j)
  chkjk(j,k)
  chkkl(k,l)
  치키크(i,j,k)
  chkijkl(i,j,k,l)
  ;
$macro CHECK_MOD(m) abort$[m.solvestat <> 1] '잘못된solvestat', m.solvestat
$macro X2TEST chkjk(j,k) = 0;  chkjk(j,k) = round(x2.l(j,k)-x2_(j,k),5); 중단$카드(chkjk) chkjk, x2.l, x2_
$macro X3TEST chkijk(i,j,k) = 0;  chkijk(i,j,k) = round(x3.l(i,j,k)-x3_(i,j,k),5); \
              중단$카드(chkijk) chkijk, x3.l, x3_
$macro X4TEST chkijkl(i,j,k,l) = 0;  chkijkl(i,j,k,l) ​​= round(x4.l(i,j,k,l)-x4_(i,j,k,l),5); \
              중단$카드(chkijkl) chkijkl, x4.l, x4_
$macro UTEST chkij(i,j) = 0;  chkij(i,j) = round(u.l(i,j)-1,5); 중단$카드(chkij) chkij, u.l
$macro VTEST chkjk(j,k) = 0;  chkjk(j,k) = round(v.l(j,k)-1,5); 중단$카드(chkjk) chkjk, v.l
$macro RTEST chkkl(k,l) = 0;  chkkl(k,l) = round(r.l(k,l)-r_(k,l),5); 중단$카드(chkkl) chkkl, r.l, r_
$macro STEST chki(i) = 0;  chki(i) = round(s.l(i)-s_(i),5); 중단$카드(chki) chki, s.l, s_
$macro TTEST chkj(j) = 0;  chkj(j) = round(t.l(j)-t_(j),5); 중단$카드(chkj) chkj, t.l, t_

x2.l(j,k) = 1.5;
x3.l(i,j,k) = 1.5;
x4.l(i,j,k,l) ​​= 1.5;
s.l(i) = 1;
r.fx(k,l)$[ord(k) = ord(l)] = r_(k,l);
옵션 limrow = 999, limcol=999;
mcp를 사용하여 m을 해결합니다.
CHECK_MOD(m); X2테스트; X3테스트; X4테스트; UTEST; VTEST; RT테스트; STEST; 테스트해 보세요;