설명
슬롯 25.2에서는 "암시적 집합 정의"라는 새로운 기능을 도입했습니다. (또는: 도메인 정의 기호 선언)". 여기서는 예상되는 동작을 테스트합니다. 기고자: Lutz Westermann, 2018년 10월
소형 모델 유형 :슬롯
카테고리 : 슬롯 테스트 라이브러리
메인 파일 : implset1.gms
$title '암시적 집합 정의 테스트' (IMPLSET1,SEQ=788)
$onText
슬롯 25.2에서는 '암시적 집합 정의'라는 새로운 기능을 도입했습니다.
(또는: 도메인 정의 기호 선언)".
여기서는 예상되는 동작을 테스트합니다.
기고자: Lutz Westermann, 2018년 10월
$offText
* 문서의 간단한 예부터 시작하세요.
$onEcho > test.gms
세트
i(*) '통조림 공장'
j(*) '시장';
테이블 d(i<,j<) '거리(천 마일)'
뉴욕 시카고 토피카
시애틀 2.5 1.7 1.8
샌디에고 2.5 1.8 1.4;
별칭(u,*);
세트 iWant / 시애틀, 샌디에고 /
jWant / 뉴욕, 시카고, 토피카 /
아이테스트(u)
jTest(u);
iTest(u) = iWant(u) xor i(u);
중단$card(iTest) iTest;
jTest(u) = jWant(u) xor j(u);
중단$카드(jTest) jTest;
$offEcho
$call 슬롯 test.gms lo=%슬롯lo% gdx d
$ifE errorLevel<>0 $abort %system.line% 라인의 문제
* 하나의 세트를 정의하는 여러 기호를 사용하는 문서의 또 다른 예
$onEcho > test.gms
세트
음식(*)
과일(음식<) / 사과, 오렌지 /
$onMulti
야채(음식<) / 당근, 콜리플라워 /
고기(음식<) / 쇠고기, 돼지고기 /;
별칭(u,*);
세트음식원함 / 사과, 오렌지, 당근, 콜리플라워, 쇠고기, 돼지고기 /
foodTest(u);
foodTest(u) = foodWant(u) xor food(u);
중단$카드(foodTest) foodTest;
$offEcho
$call 슬롯 test.gms lo=%슬롯lo%
$ifE errorLevel<>0 $abort %system.line% 라인의 문제
* 이전 예와 유사하지만 $onMultiR을 사용하면 마지막 정의만 유지합니다.
$onEcho > test.gms
세트
음식(*)
과일(음식<) / 사과, 오렌지 /
$onMultiR
야채(음식<) / 당근, 콜리플라워 /
고기(음식<) / 쇠고기, 돼지고기 /;
별칭(u,*);
세트음식원함 / 쇠고기, 돼지고기 /
foodTest(u);
foodTest(u) = foodWant(u) xor food(u);
중단$카드(foodTest) foodTest;
$offEcho
$call 슬롯 test.gms lo=%슬롯lo%
$ifE errorLevel<>0 $abort %system.line% 라인의 문제
* onMulti를 사용하면 암시적으로 정의된 세트를 미리 채울 수도 있습니다.
$onEcho > test.gms
세트
음식(*) / 사과, 오렌지 /
$onMulti
야채(음식<) / 당근, 콜리플라워 /
고기(음식<) / 쇠고기, 돼지고기 /;
별칭(u,*);
세트음식원함 / 사과, 오렌지, 당근, 콜리플라워, 쇠고기, 돼지고기 /
foodTest(u);
foodTest(u) = foodWant(u) xor food(u);
중단$카드(foodTest) foodTest;
$offEcho
$call 슬롯 test.gms lo=%슬롯lo%
$ifE errorLevel<>0 $abort %system.line% 라인의 문제
* 집합은 암시적으로 정의된 후에도 비어 있을 수 있지만 이 경우에도 할당되어야 합니다.
$onEcho > test.gms
세트
나;
매개변수
p(i<) / i1 0 /;
디스플레이 i;
$offEcho
$call 슬롯 test.gms lo=%슬롯lo%
$ifE errorLevel<>0 $abort %system.line% 라인의 문제
* $load를 사용한 간단한 예
$onEcho > test.gms
세트
i(*) '통조림 공장'
j(*) '시장';
매개변수 d(i<,j<) '거리(천 마일)';
$gdxIn d.gdx
$로드 d
별칭(u,*);
세트 iWant / 시애틀, 샌디에고 /
jWant / 뉴욕, 시카고, 토피카 /
아이테스트(u)
jTest(u);
iTest(u) = iWant(u) xor i(u);
중단$card(iTest) iTest;
jTest(u) = jWant(u) xor j(u);
중단$카드(jTest) jTest;
$offEcho
$call 슬롯 test.gms lo=%슬롯lo%
$ifE errorLevel<>0 $abort %system.line% 라인의 문제
* 필터링된 로딩을 실행하는 $load의 예
$onEcho > test.gms
ab / a1.b1 설정
a2.b1
a3.b2 /;
$gdxOut ab.gdx
$unLoad ab
$gdx아웃
/a1,a2/, b(*), c(*)를 설정합니다.
xx(a,b<);
$gdxIn ab.gdx
$로드xx=abc<ab.dim2
별칭(u,*);
bWant / b1 / 설정
c원하다 / b1, b2 /
b테스트(u)
c테스트(u);
bTest(u) = bWant(u) xor b(u);
중단$카드(bTest) bTest;
cTest(u) = cWant(u) xor c(u);
중단$카드(cTest) cTest;
$offEcho
$call 슬롯 test.gms lo=%슬롯lo%
$ifE errorLevel<>0 $abort %system.line% 라인의 문제
* 변수에서도 작동
$onEcho > test.gms
세트
i(*) '통조림 공장'
j(*) '시장';
변수 테이블 d(i<,j<)
내가
Seattle.new-york 300
시애틀.시카고 400
시애틀.토피카 500
샌디에고.시카고 600 ;
별칭(u,*);
세트 iWant / 시애틀, 샌디에고 /
jWant / 뉴욕, 시카고, 토피카 /
아이테스트(u)
jTest(u);
iTest(u) = iWant(u) xor i(u);
중단$card(iTest) iTest;
jTest(u) = jWant(u) xor j(u);
중단$카드(jTest) jTest;
$offEcho
$call 슬롯 test.gms lo=%슬롯lo%
$ifE errorLevel<>0 $abort %system.line% 라인의 문제
$log --- Python 라이브러리 %sysEnv.GMSPYTHONLIB% 사용
* EmbeddedCode를 사용한 간단한 예
$onEcho > test.gms
세트
i(*) '통조림 공장'
j(*) '시장';
매개변수 d(i<,j<) '거리(천 마일)';
$onEmbeddedCode 파이썬:
슬롯set('d',[('시애틀', '뉴욕',2.5),('시애틀', '시카고',1.7),('시애틀', '토피카',1.8),
('샌디에고','뉴욕',2.5),('샌디에고','시카고',1.8),('샌디에고','토피카',1.4)])
$offEmbeddedCoded
별칭(u,*);
세트 iWant / 시애틀, 샌디에고 /
jWant / 뉴욕, 시카고, 토피카 /
아이테스트(u)
jTest(u);
iTest(u) = iWant(u) xor i(u);
중단$card(iTest) iTest;
jTest(u) = jWant(u) xor j(u);
중단$카드(jTest) jTest;
$offEcho
$call 슬롯 test.gms lo=%슬롯lo%
$ifE errorLevel<>0 $abort %system.line% 라인의 문제
* 필터링된 로딩을 실행하는 임베디드 코드의 예
$onEcho > test.gms
a /a1,a2/, b(*), c(*)를 설정합니다.
xx(a,b<)를 설정합니다.
$onEmbeddedCode 파이썬:
슬롯set('xx',[('a1','b1'),('a2','b1'),('a3','b2')])
$offEmbeddedCode xx c<xx.dim2
별칭(u,*);
bWant / b1 / 설정
c원하다 / b1, b2 /
b테스트(u)
c테스트(u);
bTest(u) = bWant(u) xor b(u);
중단$카드(bTest) bTest;
cTest(u) = cWant(u) xor c(u);
중단$카드(cTest) cTest;
$offEcho
$call 슬롯 test.gms lo=%슬롯lo%
$ifE errorLevel<>0 $abort %system.line% 라인의 문제
* EmbeddedCode를 사용한 간단한 예 - 실행 시에는 실패할 것으로 예상됩니다.
$onEcho > test.gms
세트
i(*) '통조림 공장'
j(*) '시장';
매개변수 d(i<,j<) '거리(천 마일)';
임베디드 코드 파이썬:
슬롯set('d',[('시애틀', '뉴욕',2.5),('시애틀', '시카고',1.7),('시애틀', '토피카',1.8),
('샌디에고','뉴욕',2.5),('샌디에고','시카고',1.8),('샌디에고','토피카',1.4)])
endEmbeddedcode d
별칭(u,*);
세트 iWant / 시애틀, 샌디에고 /
jWant / 뉴욕, 시카고, 토피카 /
아이테스트(u)
jTest(u);
iTest(u) = iWant(u) xor i(u);
중단$card(iTest) iTest;
jTest(u) = jWant(u) xor j(u);
중단$카드(jTest) jTest;
$offEcho
$call 슬롯 test.gms lo=%슬롯lo%
$ifE errorLevel=0 $abort %system.line% 라인의 문제
$label noEmbeddedPython
* Michael이 보고한 일시적인 문제
$onEcho > test.gms
p, xs, ys를 설정합니다.
테이블 탭(p<,xs<,ys<)
y1 y2 y3 y4 y5
p1.x1 1 1 1 1 1
;
매개변수 pend(p) /p1 2/;
$offEcho
$call 슬롯 test.gms lo=%슬롯lo%
$ifE errorLevel<>0 $abort %system.line% 라인의 문제
* 기존 데이터의 시작 부분에 병합하면 데이터 순서가 잘못되어서는 안 됩니다(GDX로 언로드할 때 오류가 발생함). #4340을 참조하세요.
$onEcho > test.gms
별칭(u,*);
t1 / 2021*2024/ 설정;
t2 / 2022 / 설정;
$onMulti
t(t2<) / 2021 / 설정
티투원트 / 2021, 2022 /
t2테스트(u);
t2Test(u) = t2Want(u) xor t2(u);
중단$카드(t2Test) t2Test;
Execute_unload 'all.gdx';
$offEcho
$call 슬롯 test.gms lo=%슬롯lo%
$ifE errorLevel<>0 $abort %system.line% 라인의 문제
* 첫 번째 UEL을 사용하여 기존 데이터를 시작하기 위해 첫 번째 UEL을 병합하면 UEL이 중복되어서는 안 됩니다(GDX로 언로드할 때 오류가 발생함). #3657 참조
$onEcho > test.gms
세트
나는 '통조림 식물' / 시애틀, kk /;
$onMulti
별칭(u,*);
매개변수
a(i<) '경우에 따라 식물 i의 용량'
/ 시애틀 350/;
iWant 세트 / 시애틀, kk /
iTest(u);
iTest(u) = iWant(u) xor i(u);
중단$card(iTest) iTest;
Execute_unload 'all.gdx';
$offEcho
$call 슬롯 test.gms lo=%슬롯lo%
$ifE errorLevel<>0 $abort %system.line% 라인의 문제
* 도메인으로 여러 용도로 사용되는 다중 암시적 세트 정의는 해당 도메인 목록이 중간에 업데이트되는지 확인해야 합니다. #5014를 참조하세요.
$onEcho > test.gms
sSuper를 설정하십시오.
x_set(sSuper<) /1*2/ 설정;
매개변수 x(sSuper) /1 1
2 2/;
$onMulti
y_set(sSuper<) /1*3/ 설정;
매개변수 y(sSuper) /1 1
2 2
3 3/;
$offEcho
$call 슬롯 test.gms lo=%슬롯lo%
$ifE errorLevel<>0 $abort %system.line% 라인의 문제
* 소스가 1차원 세트인 경우 요소 텍스트도 복사해야 합니다. 마지막 텍스트가 중복됩니다.
$onEcho > test.gms
세트
에프
과일(f<) / 사과 레드
오렌지 오렌지 /
$onMulti
과일(f<) / 당근 오렌지
애플 그린 /;
파일 FX / 'fruit.txt' /
fy / 'f.txt' /;
루프(f,
fx f.te(f)를 넣어 /;
fyfruit.te(f)를 넣으세요 /;
)
$offEcho
$call.checkErrorLevel 슬롯 test.gms lo=%슬롯lo%
$call.checkErrorLevel diff f.txt 과일.txt
* 다음 테스트에서는 오류가 예상됩니다.
* 재정의는 기본적으로 잘못되어야 함
$onEcho > test.gms
세트
음식(*) / 사과, 오렌지 /
야채(음식<) / 당근, 콜리플라워 /
고기(음식<) / 쇠고기, 돼지고기 /;
$offEcho
$call 슬롯 test.gms lo=%슬롯lo%
$ifE errorLevel=0 $abort %system.line% 라인에 예상된 문제가 있습니다.
* 도메인 집합의 암시적 정의는 유니버스에 적용할 수 없습니다.
$onEcho > test.gms
별칭(음식,*);
세트
고기(음식<) / 쇠고기, 돼지고기 /;
$offEcho
$call 슬롯 test.gms lo=%슬롯lo%
$ifE errorLevel=0 $abort %system.line% 라인에 예상된 문제가 있습니다.
* 도메인이 기호와 동일한 경우 도메인 집합의 암시적 정의를 적용할 수 없습니다.
$onEcho > test.gms
세트
고기(고기<) / 쇠고기, 돼지고기 /;
$offEcho
$call 슬롯 test.gms lo=%슬롯lo%
$ifE errorLevel=0 $abort %system.line% 라인에 예상된 문제가 있습니다.
* 도메인이 하위 집합인 경우 도메인 집합의 암시적 정의를 적용할 수 없습니다.
$onEcho > test.gms
세트
너
음식(유)
고기(음식<) / 쇠고기, 돼지고기 /;
$offEcho
$call 슬롯 test.gms lo=%슬롯lo%
$ifE errorLevel=0 $abort %system.line% 라인에 예상된 문제가 있습니다.
* 두 개의 불일치 선언을 허용하지 마십시오
$onEcho > test.gms
세트
음식
고기(음식)
고기(음식<);
$offEcho
$call 슬롯 test.gms lo=%슬롯lo%
$ifE errorLevel=0 $abort %system.line% 라인에서 예상되는 문제