슬롯 설명

소개

슬롯문은 무엇보다도 출력 세부 사항, 솔루션 프로세스 및 디스플레이 레이아웃을 제어하기 위해 다양한 전역 시스템 매개변수를 설정하는 데 사용됩니다. GAMS는 대부분의 목적에 적합한 전역 시스템 매개변수에 대한 기본값을 제공합니다. 그러나 사용자가 실행의 일부 측면에 대한 제어를 유지하고 싶은 경우가 항상 있습니다. 또한 슬롯 문은 식별자에 대한 강력한 작업을 수행하기 위한 효율적이고 간결한 구문을 제공합니다. 슬롯 문은 달리 실행 시간에 처리된다는 점을 관찰하세요.달러 통제 슬롯컴파일 시 처리됩니다.

이 장은 다음과 같이 구성되어 있습니다. 먼저 소개하겠습니다.슬롯 문의 일반 구문, 그런 다음 슬롯 설명과 함께 사용할 수 있는 모든 사용 가능한 슬롯 목록을 계속 설명하고 해당 세부 설명에 대한 링크를 제공합니다.GAMS 호출장. 마지막으로 우리는식별자와 관련된 특수 슬롯.

슬롯 문의 구문

슬롯 문의 일반적인 형식은 다음과 같습니다:

슬롯 키1 [= 값1]  ,|EOL 키2 [= 값2]  ;

키워드슬롯또는슬롯이것은 슬롯 문임을 나타냅니다. 그 다음에는키1은 이 장에 나열된 슬롯 중 하나입니다. 다음의 간단한 예를 고려해 보세요.

슬롯 reslim=800;

여기에 키워드가 있습니다슬롯다음에는 레스림. 슬롯레스림솔버가 종료되기 전에 실행할 수 있는 최대 시간(초)을 지정합니다. 따라서 이 예에서는 솔버에게 솔루션을 찾는 데 800초의 시간을 줍니다.

참고
  • 슬롯 이름은 아님예약어따라서 다른 이름 사용과 충돌하지 않습니다.
  • 슬롯 명령문은 표현식을 허용하지 않습니다. 따라서 슬롯에 매개변수 값을 할당하는 것은 불가능합니다.
    다음은 작동하지 않습니다:
    스칼라 p /3/;
    슬롯 reslim=p;
    그러나 원하는 슬롯을 다음과 같이 사용할 수 있는 경우모델 속성, 여기에 매개변수 값을 할당할 수 있습니다.
    스칼라 p /3/;
    Transport.reslim = p;

값이 예상되는지 여부와 예상되는 경우 값 유형은 해당 슬롯에 따라 달라지는 것을 관찰하십시오. 여섯 가지 경우가 있습니다. 개요는 다음에서 제공됩니다.표 1.

열쇠 값 유형
아니요- dmpOpt, 추출, memoryStat
정수소수점, 림콜, 씨앗
실수FD델타, optCR, resLim
텍스트 문자열LP, solPrint, sysout
식별자참조식별자 슬롯.
아니요아니요- 참조식별자 작업.

표 1:슬롯 유형

마지막 유형은 특별하다는 점에 유의하십시오: 명명된 슬롯을 포함하지 않습니다., 하지만 키워드슬롯다음에는 식별자와 식별자 연산자가 옵니다. 이러한 특수 슬롯 설명은 섹션에서 자세히 설명합니다.특수 슬롯: 식별자 작업.

슬롯의 값이 필요한 만큼 자주 재설정될 수 있다는 점을 관찰하십시오. 새로운 값은 매번 이전 값을 대체합니다. 또한 하나의 슬롯 문으로 두 개 이상의 슬롯을 지정할 수 있으며 쉼표나 줄 끝 문자는 모두 슬롯 간의 법적 구분 기호입니다.

다음 예를 통해 여러 슬롯이 어떻게 사용될 수 있는지 보여드리겠습니다. 코드 조각이 모델에 추가될 수 있습니다.[주사위].

슬롯 측정, limcol = 100
       optcr = 0.00, mip = xpress ;
mip max wnx를 사용하여 xdice를 해결합니다.
슬롯 클리어 = comp;

첫 번째 슬롯 설명에는 네 가지 슬롯이 지정되어 있습니다: 슬롯측정관련 값이 없습니다, 슬롯림콜정수 값이 필요합니다, 슬롯optCR실제 가치와 슬롯을 기대합니다MIP값으로 텍스트 문자열이 필요합니다. 두 번째 슬롯 문은 하나의 식별자 슬롯만 지정합니다.지우기, 변수가 있음컴포지션값으로.

주의
슬롯 명령문은 다른 명령과 함께 순서대로 실행됩니다. 따라서 슬롯 문이 두 개의 풀이 문 사이에 있으면 새 값이 풀이 사이에 할당되므로 두 번째 풀이 문에만 적용됩니다.

슬롯 목록

슬롯 문을 통해 사용할 수 있는 슬롯은 다음 기능 범주로 그룹화됩니다:

다음 하위 섹션에서 우리는 처음 5개 카테고리의 슬롯에 대한 간략한 설명을 제공할 것입니다. 각 항목은 해당 슬롯에 대한 자세한 설명과 연결되어 있습니다. 모든 GAMS 명령줄 매개변수, 슬롯 및 모델 속성에 대한 자세한 설명은 섹션에 나와 있습니다.모든 슬롯에 대한 자세한 설명. 마지막 카테고리에 속하는 슬롯은 특별하며 섹션에서 소개되고 논의됩니다.식별자와 관련된 특수 슬롯아래.

출력 세부정보를 제어하는 슬롯

슬롯설명
asyncSolLst 비동기 해결(그리드 또는 스레드)이 사용될 때 솔루션 목록 인쇄
소수점 표시문의 소수점 자리
disp폭 모든 후속 표시문의 열 라벨에 인쇄될 문자 수
추출 LST 파일에 페이지 나누기 삽입
epsToZero GDX로 언로드할 때 EPS를 0으로 처리
림콜 하나의 변수 블록에 나열되는 최대 열 수
limRow 하나의 방정식 블록에 나열되는 최대 행 수
maxGenericFiles 실행 시간 파일 생성 시 시도된 일반 파일 이름의 최대 수
MCPRHoldFx holdfixed 설정으로 인해 제거된 변수에 수직인 행 목록 인쇄
프로필 실행 프로파일링
profileTol 문이 프로필 생성 출력에 나타나기 위해 사용해야 하는 최소 시간
solPrint 솔루션 보고서 인쇄 슬롯
solSlack 목록 파일의 방정식 출력에 레벨 값 대신 여유 변수 값이 포함됩니다.
sysout 솔버 상태 파일 보고 슬롯

솔버별 매개변수를 제어하는 슬롯

슬롯설명
b비율 기본 감지 임계값
domLim 도메인 위반 제한 해결사 기본값
holdFixedAsync 비동기적으로 해결된 모델에도 HoldFixed를 허용
intVarUp 정수 변수의 기본 상한에 대한 모드 설정
iterLim 솔버의 반복 제한
optCA 절대 최적성 기준 해결자 기본값
optCR 상대적 최적성 기준 해결자 기본값
개혁 재공식화 수준
resLim 솔버의 벽시계 시간 제한
savePoint GDX 파일에 솔버 포인트 저장
solveLink 솔버 링크 슬롯
sys12 생성 오류가 있는 모델을 솔버에 전달
스레드 솔버가 사용할 프로세서 수

솔버 선택을 제어하는 슬롯

슬롯설명
CNS 제약된 비선형 시스템 - 기본 솔버
DNLP 불연속 도함수를 사용한 비선형 프로그래밍 - 기본 솔버
EMP 확장 수학 프로그램 - 기본 솔버
LP 선형 프로그래밍 - 기본 솔버
MCP 혼합 상보성 문제 - 기본 솔버
MINLP 혼합 정수 비선형 계획법 - 기본 솔버
MIP 혼합 정수 프로그래밍 - 기본 솔버
MIQCP 혼합 정수 2차 제약 프로그램 - 기본 솔버
MPEC 평형 제약 조건이 있는 수학 프로그램 - 기본 솔버
NLP 비선형 프로그래밍 - 기본 솔버
QCP 2차적으로 제한된 프로그램 - 기본 솔버
RMINLP 완화된 혼합 정수 비선형 계획법 - 기본 솔버
RMIP 완벽한 혼합 정수 프로그래밍 - 기본 솔버
RMIQCP 완화된 혼합 정수 2차 제약 프로그램 - 기본 솔버
RMPEC 평형 제약 조건을 갖춘 편안한 수학 프로그램 - 기본 솔버
해결사 솔버가 처리할 수 있는 모든 모델 유형에 대한 기본 솔버

입력 프로그램 제어에 영향을 미치는 슬롯

슬롯설명
ECImplicitLoad 임베디드 코드에서 암시적 기호 로드 허용 여부
fdDelta 유한차의 단계 크기
fdOpt 유한차에 대한 슬롯
gdxUels 라벨 또는 UEL을 압착 또는 전체 GDX로 언로드
씨앗 난수 시드
solveOpt 다중 해결 관리
strictSingleton 싱글톤 세트에 할당된 요소가 여러 개인 경우 오류
sys18 부동 소수점 숫자 읽기에 이전 버전과 호환되는(예: GAMS 31 이전) 체계 사용
zeroToEps 0을 EPS로 처리

기타 슬롯

슬롯설명
checkErrorLevel 외부 프로그램 실행 후 자동으로 errorLevel 확인
dmpOpt 디버깅 슬롯: GAMS가 런타임 슬롯 설정을 에코하게 합니다.
dmpSym 디버깅 슬롯: GAMS가 기호 테이블을 목록 파일에 에코하도록 합니다.
dmpUserSym 디버깅 슬롯: GAMS가 사용자 정의 기호에 대해서만 기호 테이블을 목록 파일에 에코하도록 합니다.
dualCheck 비용 절감 조건에 따른 출력
forLim GAMS 루핑 제한
정수1..5 정수 통신 셀
측정 마지막 측정 명령문 또는 프로그램 시작 이후 시간 및 메모리 사용량 출력
memoryStat LST 파일에 메모리 통계 표시
실제1..5 실제 통신 셀
하위 시스템 사용 가능한 모든 솔버와 LST 파일의 현재 기본 및 활성 솔버를 나열
sys10 지수가 상수이고 정수의 1e-12 이내일 때 rpower를 ipower로 변경합니다.
sys11 할당/데이터 문의 색인이 자연 순서가 아닌 경우 동적 재순환
sys15 검색 기록에 사용되는 데이터 구조 자동 전환
sys16 검색 기록 메모리 비활성화(일명 GAMS 24.5 이전 버전으로 실행)
sys17 순열로 성장하는 희소 트리 비활성화(일명 GAMS 24.5 이전 버전으로 실행)
sys19 열 생성 시 순열 비활성화(일명 GAMS 36 이전으로 실행)
threadsAsync 비동기 해결에 사용할 스레드 수 제한(solveLink=6)

식별자와 관련된 특수 슬롯

몇 가지 슬롯에는 식별자가 포함됩니다. 식별자를 값으로 사용하거나 키와 값이 없지만 다음을 수행합니다.작동식별자에 대해. 다음 두 하위 섹션에서는 이러한 특수 슬롯을 소개하고 논의합니다.

특수 슬롯: 식별자 슬롯

식별자 슬롯의 값은 문자열이나 숫자가 아니지만식별자. 이 하위 섹션에서는 이러한 슬롯을 자세히 설명합니다.

지우기

이 슬롯은 다음을 재설정합니다.식별자기본값으로 설정하여 메모리를 확보합니다. 구문은 다음과 같습니다.

슬롯 지우기 = 식별자;

다음 식별자 유형은 재설정될 수 있습니다: 집합, 매개변수, 방정식 및 변수. 이 슬롯은 GAMS 힙 관리자에 메모리를 확보하므로 해당 메모리는 GAMS에서는 사용할 수 있지만 운영 체제에서는 사용할 수 없습니다. 운영체제에 메모리를 강제로 비우려면 GAMS 프로세스를 종료해야 합니다. 이를 수행하는 한 가지 방법은 슬롯을 사용하여 더미 모델을 해결하여 실행 시스템을 다시 시작하는 것입니다.solveLink0으로 설정합니다.

죽이다

이 슬롯은 슬롯과 동의어입니다.지우기. 달러 통제 슬롯을 관찰하세요.$killis아님동의어$클리어.

셔플

이 슬롯은 매개변수 값을 무작위 순서로 재배열합니다. 구문은 다음과 같습니다.

슬롯 셔플 = 항목 이름;

여기항목 이름은 1차원 매개변수입니다. 1차원 매개변수는 도메인과 데이터에 따라 네 가지 다른 방식으로 선언(및 정의)될 수 있습니다. 다음 표는 슬롯의 효과에 대한 개요를 제공합니다.셔플네 가지 경우에.

데이터 없음데이터 있음
유니버셜을 도메인으로 설정범용 세트를 사용하여 데이터를 초기화합니다(아래 예의 경우 1).데이터를 섞기 전에 범용 집합을 사용하여 0 값을 추가합니다(아래 예의 경우 3).
도메인으로 특정 설정도메인을 사용하여 데이터를 초기화합니다(아래 예의 경우 2).데이터를 섞기 전에 도메인을 사용하여 0 값을 추가하십시오(아래 예의 경우 4).

매개변수가 데이터 없이 선언된 경우(위 표의 두 번째 열), 도메인 또는유니버설 세트숫자 1을 할당하는 데 사용됩니다.N, 여기서N은 도메인 또는 범용 집합의 요소 수입니다. 매개변수가 데이터(위 표의 세 번째 열)와 함께 선언된 경우 도메인 또는 범용 세트를 사용하여 누락된 항목에 대해 0을 추가합니다. 이러한 0 값은 무작위 셔플에 참여하지만 매개변수에 저장되지는 ​​않습니다. 다음 예는 예시로 사용됩니다.

i / i1*i5 / 설정
    j / j1*j5 /;
슬롯 소수 = 0;

*사례 1: 범용 도메인으로 설정되어 있고 데이터가 없음
Parameter A(*) "유니버스는 매개 변수를 채우는 데 사용됩니다.";
슬롯 셔플 = A;
디스플레이 A;

*사례 2: j를 도메인으로 설정하고 데이터는 설정하지 않음
매개변수 B(j) "집합 j는 매개변수를 채우는 데 사용됩니다.";
슬롯 셔플 = B;
디스플레이 B;

*사례 3: 유니버설이 도메인으로 설정되어 있고 데이터가 있는 경우
매개변수 C(*) "우주는 0을 추가하는 데 사용됩니다." / j2 2, j4 4 /;
슬롯 셔플 = C;
디스플레이 C;

*사례 4: i를 도메인으로 설정하고 데이터가 있음
매개변수 D(i) "집합 i는 0을 추가하는 데 사용됩니다." / i1 10, i3 30, i5 50 /;
슬롯 셔플 = D;
디스플레이 D;

위 코드는 다음과 같은 출력을 생성합니다. 이 예에서 보편 집합은 집합의 합집합입니다.i그리고j, 이는 집합의 모든 요소를 의미합니다.i그리고j는 범용 집합의 구성원입니다. 우리는 임의의 숫자를 사용하므로 다른 실행의 결과는 다를 수 있습니다.

-- 9 PARAMETER A 유니버스는 매개변수를 채우는 데 사용됩니다.

i1 4, i2 1, i3 7, i4 9, i5 6, j1 10, j2 3, j3 5
j4 8, j5 2

---- 14 PARAMETER B 세트 j는 매개변수를 채우는 데 사용됩니다.

j1 1, j2 5, j3 2, j4 4, j5 3

---- 19 PARAMETER C 유니버스는 0을 추가하는 데 사용됩니다.

j1 2, j2 4

---- 24 PARAMETER D 세트 i는 0을 추가하는 데 사용됩니다.

i2 30, i4 50, i5 10

다음 예에서는 세트의 무작위 매핑을 생성하는 방법을 보여줍니다.

i / i1*i6 / 설정,
    rmi(i,i) "무작위 매핑";
매개변수 A(i);
슬롯 셔플 = A;

rmi(i, i + (- Ord(i) + A(i))) = 예;
rmi를 표시;

세트의 디스플레이rmi다음과 같습니다. 각 행과 각 열에는 정확히 하나의 요소가 있습니다.

---- 7 SET rmi 무작위 매핑

            i1 i2 i3 i4 i5 i6

i1 예
i2 예
i3 예
i4 예
i5 예
i6 예

슬롯을 사용할 때마다 관찰하십시오.셔플새로운 무작위 데이터 재배열을 생성합니다.

특수 슬롯: 식별자 작업

어떤 경우에는 키워드슬롯슬롯 문 뒤에는식별자그리고 다음과 같은 식별자 작업을 수행하는 하나 이상의 연산자디스플레이 제어, 색인 일치, 세트와 매개변수의 투영 및 집계그리고세트 및 매개변수의 순열.

디스플레이 제어

표시 명령문은 장에서 소개되고 논의됩니다.표시문. GAMS는 표시된 식별자에 대해 대부분의 경우 충분한 기본값을 제공하지만 인쇄 형식은 다음 슬롯 설명을 사용하여 맞춤설정할 수 있습니다.

슬롯 ident:d;
슬롯 ident:d:r:c;

키워드슬롯다음에 식별자 이름이 옵니다ident, 콜론 및 정수 값d. 참고하세요d은 0에서 8 사이일 수 있으며 해당 식별자에 대해 표시될 소수 자릿수를 지정합니다. 사양r그리고c선택사항입니다. 이는 각각 행 레이블로 인쇄되는 인덱스 위치 수와 열 레이블로 인쇄되는 인덱스 위치 수를 나타냅니다. 만약에 참고하세요r이 0이면 목록 형식이 사용됩니다. 자세한 내용과 예시는 섹션을 참조하세요.로컬 디스플레이 제어그리고목록 형식으로 데이터를 생성하는 표시 문.

색인 일치

색인 일치는 정의하는 매우 간단한 방법입니다.다차원 세트. 일반적인 구문은 다음과 같습니다.

슬롯 set_name(index1:index2[:index3:...]);

키워드슬롯다음에는 세트 이름이 옵니다.세트_이름및 일치 연산자와 연결된 괄호 안의 두 개 이상의 인덱스':'. 세트는 프로그램 초기에 선언되어야 합니다. 해당 집합이 프로그램 초기에 정의된 경우 먼저 해당 집합이 지워진 다음 일치 작업이 처리됩니다. 또한 식별자 목록은 일치 연산자 외에 2개 이상으로 확장될 수 있습니다.':'또한','다음과 같이 사용될 수 있으며 해석됩니다.제품 운영자. 다음 예제를 고려하여 또한 다음을 사용합니다.디스플레이 제어:

i / i1,i2/ 설정
    j / j1,j2,j3 /
    k / k1*k5 /
    ij(i,j), ijk(i,j,k), kij(k,i,j);
* 인덱스 매칭
슬롯 ij(i:j), ijk(i,j:k), kij(k:i,j);
* 디스플레이 제어
슬롯 ij:0:0:1, ijk:0:0:1, kij:0:0:1;
ij, ijk, kij를 표시합니다.

가장 간단한 형태로 일치 연산자는 2차원 집합을 생성하는 데 사용됩니다.ij.

---- 9 세트 ij

i1.j1
i2.j2

색인의 각 구성원에 유의하세요.i색인의 구성원과 일치했습니다j색인 중 하나에 멤버가 부족할 때까지.

3차원 세트를 정의하기 위한 인덱스 일치 작업ijk그리고키지인덱스 연산자의 보다 정교한 사용법을 보여줍니다. 세트ijk그리고키지다음과 같은 경우 곱 연산자를 사용하여 왼쪽에서 오른쪽으로 인덱스로 구성됩니다.','이 발생하거나 a일 때 일치하는 연산자가 발생합니다.':'발견되었습니다.

ijk첫 번째 연산자는','집합의 곱 연산자로 해석됨i그리고j따라서 6개의 2-튜플을 요소로 갖는 두 세트의 데카르트 곱을 구축합니다(i1.j1, i1.j2, i1.j3, i2.j1, i2.j2, i2.j3). 일치 연산자':'63045_63118k. 결과 세트는 다음과 같습니다.

---- 9개 세트 ijk

i1.j1.k1
i1.j2.k2
i1.j3.k3
i2.j1.k4
i2.j2.k5

---- 9개 세트

k1.i1.j1
k1.i1.j2
k1.i1.j3
k2.i2.j1
k2.i2.j2
k2.i2.j3

이전 예는 다음과 같은 방법으로 더 높은 차원의 집합을 정의하도록 확장될 수 있습니다:

h / h1*h4 / 설정
    hijk_1(h,i,j,k)
    hijk_2(h,i,j,k);
* 인덱스 매칭
슬롯 hijk_1(h:ijk);
슬롯 hijk_2(h:i,j:k);
* 디스플레이 제어
슬롯 hijk_1:0:0:1, hijk_2:0:0:1;
hijk_1, hijk_2 표시;

설정에 유의하세요hijk_1그리고hijk_2그래도 다를 것입니다hijk_1사용 세트ijk그리고hijk_2정의에 사용된 것과 동일한 일치 및 곱 연산을 사용합니다.ijk그러나 철자가 적혀 있습니다. 위에서 이미 언급했듯이 일치 연산자는 왼쪽에서 오른쪽으로 인덱스를 사용하여 집합을 구성합니다. 따라서 설정된 대로ijk이 먼저 빌드된 다음 일치 연산자 오른쪽에 사용되며 두 세트는 다르게 구성됩니다.

---- 19개 세트 hijk_1

h1.i1.j1.k1
h2.i1.j2.k2
h3.i1.j3.k3
h4.i2.j1.k4

---- 19개 세트 hijk_2

h1.i1.j1.k1
h1.i1.j2.k2
h1.i1.j3.k3
h2.i2.j1.k4
h2.i2.j2.k5

세트와 매개변수의 투영 및 집계

GAMS에서 세트에 대한 투영 및 집계 작업은 두 가지 방법으로 수행될 수 있습니다: 할당 및합계연산자와 슬롯 문을 사용합니다.

과제 및 사용하기합계연산자는 느리지만 더 직관적인 방법입니다. 과제 및합계연산자는 장에서 소개되고 자세히 논의됩니다.매개변수를 사용한 데이터 조작및 섹션색인된 작업각각. 여기서는 예측과 집계를 수행하기 위해 집합의 맥락에서 이들이 어떻게 사용될 수 있는지만 보여줍니다. 다음 예는 예시로 사용됩니다.

i / i1*i3 / 설정
     j / j1*j2 /
     k / k1*k4 /
     ijk(i,j,k) / #i.#j.#k /
     ij1a(i,j)
     ij1b(i,j);

스칼라 Count_1a, Count_1b, Count_2a, Count_2b;

* 방법 1: 투영에 할당 및 합계 연산자 사용
ij1a(i,j) = sum(k,ijk(i,j,k));

* 방법 1: 집계에 할당 및 합계 연산자 사용
Count_2a = sum(ijk(i,j,k),1);
Count_1a = sum(ij1a(i,j),1);

세트에 주의하세요ijk은 3차원 집합이며 해당 요소는 3-튜플이며 세 집합 요소의 모든 순열입니다.i, j그리고k해당 도메인에 있습니다. 따라서 집합의 요소 수ijk3 x 2 x 4 = 24입니다. 세트ij1a그리고ij1b은에 선언된 2차원 집합입니다.설정문, 정의되지 않았습니다. 첫 번째 할당문은 집합의 구성원을 정의합니다.ij1a. 이것은 세트의 투영입니다ijk세트로ij1a여기서 첫 번째 세트의 세 튜플은 두 번째 세트의 쌍에 매핑되어 차원k제거되었습니다. 이는 네 가지 요소를 의미합니다."i1.j1.k1", "i1.j1.k2", "i1.j1.k3"그리고"i1.j1.k4"세트의ijk모두 요소에 매핑됩니다."i1.j1"세트의ij1a. 이 맥락에서 다음의 결과는합계작업은아님숫자는 집합이지만. 두 번째와 세 번째 할당은 두 세트의 요소 수가 계산되는 집계입니다. 이미 언급했듯이 첫 번째 집계의 결과는 24이고 두 번째 집계의 결과는 6 = 24 / 4입니다.

투영 및 집계를 수행하는 두 번째 방법은 더 빠르고 더 간단하며 슬롯 문을 사용하는 것입니다. 이 슬롯 문의 일반적인 구문은 다음과 같습니다.

슬롯 ident1 < ident2;
슬롯 ident1 <= ident2 ;

키워드슬롯다음에는식별자 ident1그리고ident2기호로 연결됨'<'또는'<='. 대부분의 경우 두 기호는 동일한 효과를 나타냅니다. 하나 이상의 공유 인덱스 세트를 두 번 이상 사용하는 도메인에 대해 두 식별자가 모두 정의된 특별한 경우는 예외입니다. 예를 참조하세요.아래. 일반적으로 왼쪽 항목의 크기는 오른쪽 항목의 크기와 같거나 작아야 합니다. 또한 두 식별자의 인덱스 공간이 일치해야 합니다. 두 식별자의 차원이 동일한 경우 순서는 다를 수 있지만 두 식별자 모두에 동일한 인덱스가 표시되어야 합니다. 왼쪽 항목의 크기가 오른쪽 항목의 크기보다 작으면 왼쪽의 인덱스가 오른쪽에도 나타나야 합니다.

두 식별자가 모두 설정되면 작업은 다음과 같이 됩니다.투영. 그러나 왼쪽의 식별자가 a스칼라또는 a매개변수그리고 오른쪽에 있는 식별자는 집합입니다.집계. 다음 예에서는 슬롯 문을 사용하여 위의 예측과 두 집계를 수행하는 방법을 보여줍니다.

* 방법 2: 슬롯 문이 프로젝션을 수행합니다.
슬롯 ij1b < ijk;

* 방법 2: 슬롯 문은 집계(요소 계산)를 수행합니다.
슬롯수_2b < ijk;
슬롯 개수_1b < ij1b;

ijk, ij1a, ij1b, Count_1a, Count_1b, Count_2a, Count_2b를 표시합니다.

위의 예에서 왼쪽에 있는 세트ij1b, 오른쪽 세트보다 인덱스 수가 적습니다.ijk. 두 집합이 다음에서만 다른 경우를 관찰하세요.주문인덱스의 투영은 다음과 같은 효과를 갖게 됩니다.순열튜플의.

참고
투영 및 집계 작업에 대한 슬롯 설명은 매개변수에도 적용될 수 있습니다.

지금까지 집합 도메인의 인덱스는 고유했습니다. 집합이 동일한 인덱스를 가진 도메인에 대해 정의될 때 특별한 경우가 발생합니다(예: 집합)s(i,i,i). 이 경우 투영은 항상 순열의 효과를 갖습니다. 사용자는 왼쪽에서 오른쪽으로 또는 오른쪽에서 왼쪽으로 순열을 수행할지 여부를 선택할 수 있습니다. 슬롯 설명

슬롯 항목1 < 항목2 ;

오른쪽에서 왼쪽 순열을 의미하고 슬롯 문은

슬롯 항목1 <= 항목2 ;

왼쪽에서 오른쪽 순열을 수반합니다. 다음 예에서는 차이점을 명확히 보여줍니다.

i / i1*i3 / 설정
      s(i,i,i) "멤버 설정" / i1.i2.i3, i3.i3.i1/
      pR1(i,i) "할당을 통해 오른쪽에서 왼쪽으로 투영"
      pR2(i,i) "슬롯 문을 사용하여 오른쪽에서 왼쪽으로 투영"
      pL1(i,i) "할당을 사용하여 왼쪽에서 오른쪽으로 투영"
      pL2(i,i) "슬롯 명령문을 사용하여 왼쪽에서 오른쪽으로 투영" ;
별칭(i,ii,iii);

* 오른쪽에서 왼쪽 순열, 두 가지 방법
pR1(i,ii) = 합(s(iii,ii,i),1);
슬롯 pR2 < s;

* 왼쪽에서 오른쪽 순열, 두 가지 방법
pL1(i,ii) = 합(s(i,ii,iii),1);
슬롯 pL2 <= s;

슬롯 s:0:0:1, pR1:0:0:1, pR2:0:0:1, pL1:0:0:1, pL2:0:0:1;
s, pR1, pR2, pL1, pL2를 표시합니다. ;

오른쪽에서 왼쪽 순열의 경우 요소는"i1.i2.i3"다음으로 예상됨"i3.i2"및 요소"i3.i3.i1"다음으로 예상됨"i1.i3". 그러나 왼쪽에서 오른쪽 순열에서는 요소"i1.i2.i3"다음으로 예상됨"i1.i2"및 요소"i3.i3.i1"다음으로 예상됨"i3.i3". 따라서 왼쪽에서 오른쪽 순열(<=)가 더 직관적일 수 있습니다.

지금까지 우리의 예는 집합에만 관련되었습니다. 위에서 언급한 것처럼 예측 및 집계는 매개변수를 사용하여 수행될 수도 있습니다. 그러나 몇 가지 미묘한 차이점이 있습니다. 첫 번째 차이점은 용어를 나타냅니다. 우리는집계설정하지만 우리는개수매개변수. 두 번째 차이점은 왼쪽 기호의 도메인이 오른쪽 기호 도메인의 순열 버전인 경우의 연산 결과입니다. 다음 예를 고려해보세요.

i / i1*i3 / 설정
    j / j1*j2 /;

테이블 p(i,j)
    j1 j2
나는1 1 2
나는2 3 4
i3 5 6;

매개변수 pperm(j,i);
슬롯 pperm < p;
슬롯 소수 = 0;
p, pperm 표시;

display 문에 의해 생성된 출력은 다음과 같습니다:

---- 13 매개변수 p

            j1 j2

나는1 1 2
나는2 3 4
i3 5 6

---- 13 매개변수 pperm

            i1 i2 i3

j1 1 3 5
j2 2 4 6

세트 및 매개변수의 순열

GAMS에서는>기호는 1차원 및 다차원 세트와 매개변수의 완전한 순열을 생성하는 데 사용할 수 있습니다. 테스트 라이브러리 모델을 기반으로 다음 예를 고려하십시오.[PERM1]:

먼저, 세트i73898_74011i다음과 같은 2차원 집합으로 표현될 수 있습니다.파름(i,i)여기서i색인이 중복되었습니다. 예시에서는 다음과 같이 설정합니다.펌(i,i)순열을 나타냄(1 2)(3)주기 표기법. 세 가지 요소로 구성된 세트의 경우 다음이 있습니다.3*2*1=6순열. 진술슬롯 폴 > i;다음의 모든 순열이 발생합니다.i계산되어 3차원 집합에 저장됨폴(p,i,i)여기서 첫 번째 색인p모든 순열을 열거하는 카운터 역할을 합니다.

set i '순열로 설정' / i1*i3 /
    perm(i,i) '예시적인 순열' / i1.i2, i2.i1, i3.i3 /
$eval pmax 사실(카드(i))
    p '순열 지수' / p1*p%pmax% /
    pall(p,i,i) '순열 집합';
슬롯 폴 > i;
슬롯 폴:0:0:1;
디스플레이 폴;

우리가 사용한다는 점에 유의하세요디스플레이 제어display 문의 결과는 다음과 같습니다.

---- 8 SET 폴 순열 세트

p1.i1.i1
p1.i2.i2
p1.i3.i3
p2.i1.i1
p2.i2.i3
p2.i3.i2
p3.i1.i2
p3.i2.i1
p3.i3.i3
p4.i1.i2
p4.i2.i3
p4.i3.i1
p5.i1.i3
p5.i2.i1
p5.i3.i2
p6.i1.i3
p6.i2.i2
p6.i3.i1

다차원 집합의 경우 순열 연산자는 동일한 논리를 따릅니다. 다음 예를 고려해보세요.

세트j, k그리고 2차원 집합jk(j,k)정의되어 있습니다. 모든 순열을 찾으려면jk(j,k), 인덱스가 다시 복제되고 순열 인덱스가 도입됩니다.

세트 j / j1*j2 /, k / k1*k5 /
    jk(j,k) / j1.k3, j1.k5, j2.k1 /
$eval pmax 사실(카드(jk))
    p / p1*p%pmax% /
    폴(p,j,k,j,k);
슬롯 폴 > jk;
슬롯 폴:0:0:1;
디스플레이 폴;

표시 명령문의 결과는 다음과 같습니다:

---- 8 세트 폴  

p1.j1.k3.j1.k3
p1.j1.k5.j1.k5
p1.j2.k1.j2.k1
p2.j1.k3.j1.k3
p2.j1.k5.j2.k1
p2.j2.k1.j1.k5
p3.j1.k3.j1.k5
p3.j1.k5.j1.k3
p3.j2.k1.j2.k1
p4.j1.k3.j1.k5
p4.j1.k5.j2.k1
p4.j2.k1.j1.k3
p5.j1.k3.j2.k1
p5.j1.k5.j1.k3
p5.j2.k1.j1.k5
p6.j1.k3.j2.k1
p6.j1.k5.j1.k5
p6.j2.k1.j1.k3

요소 설정 외에도 GAMS 매개변수의 숫자 데이터를 치환하는 것도 가능합니다. 1차원 매개변수에 저장된 숫자 값의 모든 순열이 있는 다음 예를 고려하십시오.a(i)계산됩니다:

i / i1*i3 / 설정
$eval pmax 사실(카드(i))
    p / p1*p%pmax% /;
매개변수 a(i) /i1 1, i2 2, i3 3/
          pall_a(p,i);
슬롯 pall_a > a;
슬롯 pall_a:0:1:1;
pall_a 표시;

표시 명령문의 결과는 다음과 같습니다:

-- 8 매개변수 pall_a  

            i1 i2 i3

p1 1 2 3
p2 1 3 2
p3 2 1 3
p4 2 3 1
p5 3 1 2
6페이지 3 2 1

순열은 다차원 매개변수로 확장될 수도 있습니다. 2차원 매개변수에 저장된 숫자 값의 모든 순열이 있는 다음 예를 고려하십시오.b(j,k)계산됩니다:

set j / j1*j2 /, k / k1*k5 /;
매개변수 b(j,k) /j1.k3 1, j1.k5 2, j2.k1 3/;
$eval pmax 사실(카드(b))
p / p1*p%pmax% / 설정;
매개변수 pall_b(p,j,k);
슬롯 pall_b > b;
슬롯 pall_b:0:1:2;
pall_b 표시;

표시 명령문의 결과는 다음과 같습니다:

-- 8 매개변수 pall_b  

         j1.k3 j1.k5 j2.k1

p1 1 2 3
p2 1 3 2
p3 2 1 3
p4 2 3 1
p5 3 1 2
6페이지 3 2 1