설명
다중 equ:varList 일치를 사용하여 모델 명령문에서 varList 일치를 테스트합니다. 하나는 차원 3의 기호이고 다른 하나는 차원 20의 기호입니다. 기고자: Steven Dirkse, 2024년 10월
소형 모델 유형 :슬롯 머신
카테고리 : 슬롯 머신 테스트 라이브러리
메인 파일 : mcp16.gms
$title 모델 명령문에서 varList 일치 테스트(MCP16, SEQ=970)
$ontext
여러 equ:varList 일치를 사용하여 모델 문에서 varList 일치를 테스트합니다.
하나는 차원 3의 기호이고 다른 하나는 차원 20의 기호입니다.
기고자: Steven Dirkse, 2024년 10월
$offtext
세트
a / a0, a1, a2, a3 /
나는 / i1 * i4 /
j / j1 * j3 /
k / k1 * k3 /
fijk(i,j,k) 'f에 대한 패턴'
hxijk(i,j,k) 'hx에 대한 패턴'
hyijk(i,j,k) 'hy에 대한 패턴'
hzijk(i,j,k) 'hz에 대한 패턴'
xijk(i,j,k) 'x에 대한 패턴'
yijk(i,j,k) 'y에 대한 패턴'
zijk(i,j,k) 'z에 대한 패턴'
s '기호' / f, x, y, z /
ss '20-dim 기호' / v1, v2 /
;
$set ALIST aa,ab,ac,ad,ae,af,ag,ah,ai,aj,ak,al,am,an,ao,ap,aq,ar,as,at
별칭(a,%ALIST%);
세트
a0(%ALIST%)
a1(%ALIST%)
a2(%ALIST%)
tfx(%ALIST%)
;
약어
ex 'var/equ가 존재합니다'
fx 'var가 존재하며 수정되었습니다.'
;
테이블 pat(i,j,k,s) '일치하는 패턴'
f x y z
i1.j1.k1 ex fx ex fx
i1.j1.k2 ex ex fx fx
i1.j1.k3 ex fx fx ex
i1.j2.k1 ex ex
i1.j2.k2 ex ex
i1.j2.k3 ex ex
i2.j1.k1 ex fx fx fx
i2.j1.k2 ex fx fx
i2.j1.k3 ex fx fx
i2.j2.k1 ex ex fx
i2.j2.k2 ex fx ex
i2.j2.k3 ex ex fx
i2.j3.k1 ex fx ex
i2.j3.k2 ex ex fx
i2.j3.k3 ex fx ex
i3.j1.k1 FX FX FX
i3.j1.k2 ex ex ex
i3.j2.k1 예
i3.j2.k2 예
i3.j2.k3 예
;
테이블 pat20(ac,ak,ss) '일치하는 패턴'
v1 v2
a1.a2 예
a1.a3 FX
a2.a1 예
a2.a3 ex FX
a3.a1 FX
a3.a2 FX 예
a3.a3 FX FX
;
매개변수 allfix(s) / f ex, x fx, y fx, z fx /;
pat('i4',j,k,s) = allfix(들);
fijk(i,j,k) = [ex = pat(i,j,k,'f')];
hxijk(i,j,k) = [ex = pat(i,j,k,'x')] 이고 fijk(i,j,k)는 아닙니다.
xijk(i,j,k) = [ex = pat(i,j,k,'x')] 또는 [fx = pat(i,j,k,'x')];
hyijk(i,j,k) = [ex = pat(i,j,k,'y')] 이고 fijk(i,j,k)는 아닙니다.
yijk(i,j,k) = [ex = pat(i,j,k,'y')] 또는 [fx = pat(i,j,k,'y')];
hzijk(i,j,k) = [ex = pat(i,j,k,'z')] 이고 fijk(i,j,k)는 아닙니다.
zijk(i,j,k) = [ex = pat(i,j,k,'z')] 또는 [fx = pat(i,j,k,'z')];
디스플레이 팻;
디스플레이 fijk;
변수
x(i,j,k)
y(i,j,k)
z(i,j,k)
v
pp1(%ALIST%)
pp2(%ALIST%)
;
방정식
f(i,j,k)
hx(i,j,k)
hy(i,j,k)
hz(i,j,k)
지
ee0(%ALIST%);
;
f(fijk(i,j,k)) ..
(x(i,j,k) - 1)$xijk(i,j,k)
+ (y(i,j,k) - 1)$yijk(i,j,k)
+ (z(i,j,k) - 1)$zijk(i,j,k)
+ (v - 1) =E= 0;
hx(hxijk(i,j,k)) .. x(i,j,k) =E= 1;
hy(hyijk(i,j,k)) .. y(i,j,k) =E= 1;
hz(hzijk(i,j,k)) .. z(i,j,k) =E= 1;
지 ..
합xijk, (x(xijk) - 1)
+ 합yijk, (y(yijk) - 1)
+ 합zijk, (z(zijk) - 1)
+ 2 * v =E= 2;
ee0(a0(%ALIST%)) ..
(pp1(%ALIST%) - 1)$a1(%ALIST%)
+ (pp2(%ALIST%) - 1)$a2(%ALIST%)
=E= 0;
x.fx(i,j,k)$[fx = pat(i,j,k,'x')] = 1;
y.fx(i,j,k)$[fx = pat(i,j,k,'y')] = 1;
z.fx(i,j,k)$[fx = pat(i,j,k,'z')] = 1;
a1('a0','a0',ac,'a0','a0','a0','a0','a0','a0','a0',ak,'a0','a0','a0','a0','a0','a0','a0','a0','a0') =
[ex = pat20(ac,ak,'v1')] 또는 [fx = pat20(ac,ak,'v1')];
tfx('a0','a0',ac,'a0','a0','a0','a0','a0','a0','a0',ak,'a0','a0','a0','a0','a0','a0','a0','a0','a0') =
[fx = pat20(ac,ak,'v1')];
pp1.fx(tfx) = 1;
a2('a0','a0',ac,'a0','a0','a0','a0','a0','a0','a0',ak,'a0','a0','a0','a0','a0','a0','a0','a0','a0') =
[ex = pat20(ac,ak,'v2')] 또는 [fx = pat20(ac,ak,'v2')];
tfx('a0','a0',ac,'a0','a0','a0','a0','a0','a0','a0',ak,'a0','a0','a0','a0','a0','a0','a0','a0','a0') =
[fx = pat20(ac,ak,'v2')];
pp2.fx(tfx) = 1;
a0(a1(%ALIST%)) = 예;
a0(a2(%ALIST%)) = 예;
모델 varList1 / f : ( x | y | z ) /
varList2 / ee0 : ( pp1 | pp2 ) /
m / varList1
g, hx, hy, hz
varList2 /;
매개변수
chk(i,j,k)
c20(%ALIST%)
;
$macro CHECK_MOD(m) abort$[m.solvestat <> 1] '잘못된solvestat', m.solvestat
$macro XYZTEST chk(i,j,k) = 0; chk(xijk) = round(1 - x.l(xijk),5); 중단$카드(chk) chk, x.l; \
chk(i,j,k) = 0; chk(yijk) = round(1 - y.l(yijk),5); 중단$카드(chk) chk, y.l; \
chk(i,j,k) = 0; chk(zijk) = round(1 - z.l(zijk),5); 중단$카드(chk) chk, z.l;
$macro PPTEST c20(%ALIST%) = 0; c20(a1) = round(1 - pp1.l(a1),5); 중단$카드(c20) c20, pp1.l; \
c20(%ALIST%) = 0; c20(a2) = round(1 - pp2.l(a2),5); 중단$카드(c20) c20, pp2.l;
옵션 limrow=99, limcol=99;
슬롯 머신를 사용하여 m을 해결합니다.
CHECK_MOD(m); XYZ 테스트; PPT테스트;
m.holdfixed = 1;
슬롯 머신를 사용하여 m을 해결합니다.
CHECK_MOD(m); XYZ 테스트; PPTEST;