Description
Test evList matching in model statement with multiple evList matchings. Contributor: Steven Dirkse, April 2025
Small Model of Type : GAMS
Category : GAMS Test library
Main file : mcp19.gms
$title Test evList matching in model statement with multiple matchings (MCP19, SEQ=983)
$ontext
Test evList matching in model statement with multiple evList matchings.
Contributor: Steven Dirkse, April 2025
$offtext
Set
i / i1 * i2 /
j / j1 * j2 /
k / k1 * k2 /
l / l1 * l2 /
;
Parameter
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) = uniform(1,2);
r_(k,l) = ord(l) + card(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;
Variable
x2(j,k)
x3(i,j,k)
x4(i,j,k,l)
u(i,j)
v(j,k)
r(k,l)
s(i)
t(j)
;
Equation
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;
Model m /
f2.x2
( g ) : ( u, v )
f3.x3
(h1,h2):(r,s,t)
f4.x4
/;
parameter
chki(i)
chkj(j)
chkij(i,j)
chkjk(j,k)
chkkl(k,l)
chkijk(i,j,k)
chkijkl(i,j,k,l)
;
$macro CHECK_MOD(m) abort$[m.solvestat <> 1] 'bad solvestat', m.solvestat
$macro X2TEST chkjk(j,k) = 0; chkjk(j,k) = round(x2.l(j,k)-x2_(j,k),5); abort$card(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); \
abort$card(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); \
abort$card(chkijkl) chkijkl, x4.l, x4_
$macro UTEST chkij(i,j) = 0; chkij(i,j) = round(u.l(i,j)-1,5); abort$card(chkij) chkij, u.l
$macro VTEST chkjk(j,k) = 0; chkjk(j,k) = round(v.l(j,k)-1,5); abort$card(chkjk) chkjk, v.l
$macro RTEST chkkl(k,l) = 0; chkkl(k,l) = round(r.l(k,l)-r_(k,l),5); abort$card(chkkl) chkkl, r.l, r_
$macro STEST chki(i) = 0; chki(i) = round(s.l(i)-s_(i),5); abort$card(chki) chki, s.l, s_
$macro TTEST chkj(j) = 0; chkj(j) = round(t.l(j)-t_(j),5); abort$card(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);
option limrow = 999, limcol=999;
solve m using mcp;
CHECK_MOD(m); X2TEST; X3TEST; X4TEST; UTEST; VTEST; RTEST; STEST; TTEST;