single04.gms : 루프에서 할당되고 참조되는 싱글톤 세트의 처리를 확인하세요.

설명

이 테스트는 특히 다음과 같은 경우 싱글톤 세트가 예상대로 사용될 수 있는지 확인합니다.
둘 다 루프 내에서 참조되고 할당됩니다. 이상이 있다는 점에 유의하세요.
나중에 수행할 할당문: 지우기, 종료, 투영, 일치,
실행_로드, ...

기고자: Lutz Westermann, 2015년 2월

소형 모델 유형 :GAMS


카테고리 : GAMS 테스트 라이브러리


메인 파일 : single04.gms

$title '루프에서 할당 및 참조된 싱글톤 세트 처리 확인' (SINGLE04,SEQ=677)

$onText
이 테스트는 특히 다음과 같은 경우 싱글톤 세트가 예상대로 사용될 수 있는지 확인합니다.
둘 다 루프 내에서 참조되고 할당됩니다. 이상이 있다는 점에 유의하세요.
나중에 수행할 할당문: 지우기, 종료, 투영, 일치,
실행_로드, ...

기고자: Lutz Westermann, 2015년 2월
$offText

내가 /i1*i3/으로 설정
    j /j1*j3/
    k /k1*k3/
    내가 /l1*l3/;

싱글턴 세트 무료 슬롯(i) /i2/
              sj(j) /j3/
              sk(k) /k2/
              sl(l) /l2/
              sij(i,j) /i2.j2/
              sjk(j,k) /j2.k2/
              skl(k,l) /k2.l2/ ;

매개변수 파이(i)
          피(i,i)
          피지(i,j)
          파이크(i,j,k)
          pijkl(i,j,k,l);

별칭(i,a);
파이(i) = ord(i);
pij(i,j) = 10 *ord(i)+ ord(j);
pii(i,a) = 10 *ord(i)+ ord(a);
pijk(i,j,k) = 100 *ord(i)+10 *ord(j)+ ord(k);
pijkl(i,j,k,l) ​​= 1000*ord(i)+100*ord(j)+10*ord(k)+ord(l);

스칼라 x,y,z;

루프(나,
  x = 합(j,pij(무료 슬롯j));
  y = sum(j,sum(무료 슬롯pij(무료 슬롯j)));
);
abort$(x<>y) '예상치 못한 차이',x,y;

루프(나,
  x = 합(j,pij(무료 슬롯j));
  y = sum(j,sum(무료 슬롯pij(무료 슬롯j)));
  시(i)=예;
);
abort$(x<>y) '예상치 못한 차이',x,y;

루프(나,
  x = 합(j,pij(무료 슬롯j));
  y = sum(j,sum(무료 슬롯pij(무료 슬롯j)));
  옵션 클리어=무료 슬롯;
);
abort$(x<>y) '예상치 못한 차이',x,y;

무료 슬롯('i3') = 예;

루프(나,
  x = 합(j,pij(무료 슬롯j));
  y = sum(j,sum(무료 슬롯pij(무료 슬롯j)));
  옵션 kill=무료 슬롯;
);
abort$(x<>y) '예상치 못한 차이',x,y;

옵션 StrictSingleton=0;
루프(나,
  옵션 무료 슬롯<pii;
  x = 합(j,pij(무료 슬롯j));
  y = sum(j,sum(무료 슬롯pij(무료 슬롯j)));
);
abort$(x<>y) '예상치 못한 차이',x,y;

루프(나,
  옵션 무료 슬롯<=pii;
  x = 합(j,pij(무료 슬롯j));
  y = sum(j,sum(무료 슬롯pij(무료 슬롯j)));
);
abort$(x<>y) '예상치 못한 차이',x,y;

루프(나,
  옵션 sij(i:j);
  x = pij(sij);
  y = 합계(sij,pij(sij));
);
abort$(x<>y) '예상치 못한 차이',x,y;

$onEcho > x.gms
j / j1*j3/ 설정
싱글톤 세트 sj / j2 /;
$offEcho

$call gams x.gms lo=%GAMS.lo% gdx x
$if errorlevel 1 $abort x.gms 실행 중 오류 발생

루프(나,
  x = pij(무료 슬롯sj);
  y = sum((무료 슬롯sj),pij(무료 슬롯sj));
  Execute_load 'x.gdx', sj;
);
abort$(x<>y) '예상치 못한 차이',x,y;

싱글톤 세트 ii(i) / /;
x = 0;
루프(나,
  x$sameas(i,ii)=x+1;
  ii('i2') = 예;
);
y = sum(i$sameas(i,'i2'),1);
abort$(x<>y) '예상치 못한 차이',x,y;

x = 0;
와이 = 0;
루프((i,j),
    if(sameas(i,'i2'), sj('j1') = yes; );
    if(sameas(j,'j2'), sj(j) = yes; );

    x$sameas(j, sj) = x+1;
    루프(sj,
        if(sameas(j, sj), y = y+1);
    );
);
abort$(x<>y) '예기치 않은 차이',x,y;