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