mcp19.gms : Test evList matching in model statement with multiple matchings

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;