설명
여러 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; 테스트해 보세요;