수집-업데이트-해결-분산(GUSS)

소개

이 장의 목적은 모델 컬렉션(샘플 또는 인덱스 세트에 의해 외생적으로 매개무료 슬롯 사이트화됨)을 설명하고, 인스턴스화하고, 효율적으로 해결할 수 있는 GAMS 모델링 시스템의 확장을 자세히 설명하는 것입니다.

구체적인 예로 다음과 같이 정의된 매개무료 슬롯 사이트 최적화 문제 \(\mathcalP(s)\)를 고려합니다.

\begin방정식 \labeleq:P(s) \min_x \in X(s) f(x; s) \text s.t. g(x; 초) \leq 0 \end방정식

여기서 \(s \in S = \ 1,\ldots,K \\). 각 시나리오 \(s\)는 최적화 무료 슬롯 사이트가 \(x\)인 다른 문제를 나타냅니다. 위에 주어진 제약 세트의 형식은 단순히 구체성을 위한 것입니다. 동등 제약 조건과 범위 및 경계 제약 조건은 위 프레임워크의 사소한 확장입니다. 분명히 문제 \(\mathcalP(s)\)는 서로 연결되어 있습니다. 우리는 이러한 문제가 GAMS 내에서 어떻게 쉽게 지정될 수 있는지 보여주고 연결의 특성을 활용할 수 있는 한 가지 유형의 알고리즘 확장을 자세히 설명할 예정입니다. GAMS의 다른 확장을 사용하면 병렬로 또는 그리드 컴퓨팅 리소스를 사용하여 해결을 실행할 수 있습니다. 설명에서는 색인화, 매개무료 슬롯 사이트화 및 시나리오라는 용어를 어느 정도 같은 의미로 사용합니다. 여러 예제가 포함된 이 장의 확장 버전은 다음에서 논문으로 제공됩니다./modlib/adddocs/gusspaper.pdf.

설계 방법론

GAMS의 가장 중요한 기능 중 하나는 방정식 모음에서 모델 인스턴스를 구축하는 것입니다(즉, GAMS 키워드로 정의된 최적화 모델모델) 및 해당 데이터(GAMS (하위)세트 및 매개무료 슬롯 사이트의 내용으로 구성됨). 이러한 모델 인스턴스는 GAMS 실행 시스템이 다음을 실행할 때 구성되거나 생성됩니다.해결문장. 생성된 모델 인스턴스는 해당 모델 인스턴스의 솔루션을 검색하고 모델 인스턴스의 상태 정보, 통계 및 (원초 및 이중) 솔루션을 반환하는 솔버로 전달됩니다. 솔버가 종료된 후 GAMS는 솔루션을 다시 GAMS 데이터베이스로 가져옵니다. 즉, 레벨을 업데이트합니다(.L) 및 한계 (.M) 모델 인스턴스에 사용되는 무료 슬롯 사이트 및 방정식 기호 필드입니다. 따라서,해결문은 GAMS 데이터베이스에 대한 복잡한 연산자로 해석될 수 있습니다. a에 의해 생성된 모델 인스턴스해결문은 이 문이 실행되는 동안에만 존재하므로 GAMS 언어 내에서는 표현되지 않습니다. 게다가 그 구조는 GAMS의 관계형 데이터 모델에 적합합니다. 모델 인스턴스는 경계와 우변의 벡터, 야코비안의 희소 행렬 표현, 경사 벡터와 헤세 행렬의 효율적인 계산을 가능하게 하는 비선형 표현의 표현 등으로 구성됩니다.

이 장은 유사한 구조를 가지고 있지만 데이터가 수정된 모델 모음을 해결하는 것과 관련되어 있습니다. 예를 들어, 다음 형식의 선형 계획을 고려하십시오.

\[ \min c^T x \text s.t. 액스 \geq 비,\; \ell \leq x \leq u. \]

이 문제의 데이터는 \((A,b,c,\ell,u)\)입니다. 일부 세부 사항을 생략하면 다음 코드를 GAMS 내에서 사용하여 컬렉션의 각 구성원이 서로 다른 \(A\) 행렬과 하한 \(\ell\)을 갖는 선형 프로그램 컬렉션을 풀 수 있습니다.

i / ... /, j / ... / 설정;
매개무료 슬롯 사이트 A(i,j), b(i);
무료 슬롯 사이트 x(j), z, ...;
방정식 e(i), ...;
e(i).. sum(j, A(i,j)*x(j)) =g= b(i);
...
모델 mymodel /all/;

s / s1*s10 / 설정
매개무료 슬롯 사이트
    A_s(s,i,j) '시나리오 데이터'
    xlo_s(s,j) '무료 슬롯 사이트 x에 대한 시나리오 하한'
    xl_s(s,j) 'x.l에 대한 시나리오 솔루션'
    em_s(s,i) 'e.m을 위한 시나리오 솔루션';
루프(들,
  A(i,j) = A_s(s,i,j);
  x.lo(j)= xlo_s(s,j);
  lp를 사용하여 mymodel min z를 해결합니다.
  xl_s(s,j) = x.l(j);
  em_s(s,i) = e.m(i);
);

요약하면, 우리는 하나의 특정 모델을 해결합니다 (내모델) 루프 오버s변경되지 않은 모델 테두리(즉, 동일한 개별 무료 슬롯 사이트 및 방정식)가 있지만 모델 데이터가 다르고 무료 슬롯 사이트에 대한 경계가 다릅니다. 후속 풀이 문에 대한 모델 데이터의 변경은 루프의 이전 모델 솔루션에 의존하지 않습니다.

이 새로운 GUSS(Gather-Update-Solve-Scatter) 관리자의 목적은 해당 인스턴스를 객체로 처리하기 위해 제한된 액세스를 제공하는 문제의 인스턴스를 만들고 모델러가 그 부분을 반복적으로 업데이트할 수 있도록 하는 GAMS 모델링 수준에서 구문을 제공하는 것입니다. 특히, 우리는 인스턴스에 대한 데이터 변경 사항 목록을 제공하고 이러한 변경 사항이 인스턴스에 순차적으로 적용될 수 있도록 하는 구문을 제공합니다(그런 다음 GAMS로 돌아가지 않고 해결됩니다). 따라서 모델 인스턴스 개체에 적용할 제한된 작업 집합을 시뮬레이션하고 이러한 변경된 인스턴스 솔루션의 일부를 모델링 환경에서 다시 검색할 수 있습니다. 이러한 변경은 비선형 문제 및 혼합 정수 모델을 포함하여 GAMS의 모든 모델 유형에 수행될 수 있습니다. 그러나 우리가 허용하는 유일한 변경 사항은 방정식에 나타나는 명명된 매개무료 슬롯 사이트와 모델 정의에 사용되는 하한 및 상한입니다.

따라서 위의 예에서 GUSS를 사용하면 15-21행을 다음과 같이 바꿀 수 있습니다.

dict/s를 설정합니다.   시나리오. ''
           A. 매개무료 슬롯 사이트    A_s
           x.   더 낮게.    xlo_s
           x.   수준.    xl_s
           이자형.   한계. em_s /;
lp 시나리오 dict를 사용하여 mymodel min z를 해결합니다.

3차원딕셔너리 설정(이 기호의 이름은 자유롭게 선택할 수 있음)에는 모델의 기호(첫 번째 위치)와 필요한 업데이트 데이터를 제공하거나 솔루션 정보를 저장하는 기호(세 번째 위치) 및 업데이트/저장 유형(두 번째 위치) 간의 매핑 정보가 포함되어 있습니다. 이 규칙의 예외는 레이블이 있는 튜플입니다.시나리오두 번째 위치에 있습니다. 이 튜플은 시나리오 인덱스로 사용되는 기호(첫 번째 위치)를 결정합니다. 이 시나리오 기호는 다차원 세트일 수 있습니다. 이 집합의 튜플은 단일 시나리오를 나타냅니다. 의 나머지 튜플딕셔너리 설정입력 및 출력 튜플로 그룹화할 수 있습니다. 입력 튜플은 해결하기 전에 모델 인스턴스의 수정 사항을 결정하는 반면, 출력 튜플은 솔루션의 어느 부분이 저장되는지 결정합니다. 다음 키워드는 세트의 두 번째 위치에 사용될 수 있습니다.dict:

유형키워드설명
입력:매개무료 슬롯 사이트 모델에 사용된 매개무료 슬롯 사이트에 대한 시나리오 데이터 제공
하위 무료 슬롯 사이트의 시나리오 하한값 제공
상위 무료 슬롯 사이트의 시나리오 상한값 제공
수정됨 무료 슬롯 사이트에 대한 시나리오 고정 경계 제공
출력:레벨 무료 슬롯 사이트 또는 방정식의 시나리오 솔루션 수준을 저장합니다.
한계 무료 슬롯 사이트 또는 방정식의 시나리오 솔루션의 주변값을 저장합니다.

모델의 세트는 업데이트될 수 없습니다. GUSS는 다음과 같이 작동합니다. GAMS는 원본 데이터에 대한 모델 인스턴스를 생성합니다. 일반과 마찬가지로해결문, 모든 모델 데이터(예: 매개무료 슬롯 사이트A33558_33657기본 사례. 기본 사례의 솔루션은 일반적인 방식으로 GAMS에 다시 보고되며 일반을 통해 액세스할 수 있습니다..L그리고.M다음 필드해결성명. 기본 사례를 해결한 후 첫 번째 시나리오에 대한 업데이트 데이터가 모델에 적용됩니다. 튜플은하위, 상위, 수정됨무료 슬롯 사이트의 경계를 업데이트하는 반면, 튜플은매개무료 슬롯 사이트모델의 매개무료 슬롯 사이트를 업데이트하세요.

시나리오 색인s에 매핑된 매개무료 슬롯 사이트의 첫 번째 색인이어야 합니다.딕셔너리 설정. 모델 매개무료 슬롯 사이트의 업데이트는 다른 시스템에서 할 수 있는 것처럼 제약 행렬/목적 함수 또는 방정식의 우변의 계수를 업데이트하는 것 이상입니다. GAMS는 제약 조건에 필요한 모든 표현식을 모델 인스턴스와 함께 저장하므로 제약 조건 행렬 계수의 변경은 표현식 평가의 결과입니다. 예를 들어, 다양한 양의 상품을 배송하는 데 드는 비용을 계산하는 용어를 고려해보세요.x(i,j)도시 간i그리고j. 배송비 표현은 다음과 같습니다.d(i,j)*f*x(i,j), 즉 도시 간 거리에 운임을 곱한 값f상품의 가변 수량을 곱합니다. 운임에 대한 솔루션의 민감도를 알아보기 위해f, 동일한 모델을 다른 값으로 풀 수 있습니다.f. 모델의 행렬 표현에서 다음의 계수를 계산해야 합니다.x(i,j)이것은d(i,j)*f, 그러나 GUSS를 사용하면 다른 값을 제공하는 것으로 충분합니다.f행렬 수준에서 많은 수정된 계수가 발생할 가능성이 있습니다. GUSS는 배송 비용 조건을 평가하고 결과 행렬 계수를 뒤에서 솔버에게 안정적으로 전달합니다.

무료 슬롯 사이트 바인딩 및 모델 매개무료 슬롯 사이트 업데이트가 적용되고 모델 인스턴스 데이터 구조(예: 제약 조건 행렬)에 대한 결과 업데이트가 결정된 후 수정된 모델 인스턴스가 솔버에 전달됩니다. 일부 솔버(예: Cplex, Gurobi, SoPlex 및 Xpress)에서는 모델 인스턴스 수정을 허용합니다. 이러한 경우 GUSS는 이전 모델 인스턴스의 변경 사항만 솔버에 전달합니다. 이렇게 하면 솔버에 전달되는 데이터의 양이 줄어들고, LP 모델의 경우 솔버가 고급 기반 및 인수분해에서 다시 시작할 수 있습니다. NLP 모델의 경우 이는 초기 값을 제공합니다. 솔버가 모델 인스턴스의 솔루션을 결정한 후 GUSS는 출력 튜플에서 요청한 솔루션의 일부를 저장합니다.dict일부 GAMS 매개무료 슬롯 사이트에 추가하고 다음 시나리오를 계속합니다. GUSS는 속도를 강조하며 메모리를 통해 모델 인스턴스와 통신할 수 있는 솔버로만 작동합니다. 따라서 다음 솔버는 GUSS의 하위 솔버로 사용할 수 없습니다: ALPHAECP, BARON, CONVERT, DECISC, DECISM, DICOPT, EXAMINER, GAMSCHK, JAMS, KESTREL, LOGMIP, MILES, MPSGE, NLPEC, PATHNLP, SBB.

GUSS 옵션

GUSS 실행은 일부 옵션을 사용하여 매개무료 슬롯 사이트화할 수 있습니다. 옵션은 솔버 옵션 파일을 통해 전달되지 않고의 다른 튜플을 통해 전달됩니다.dict설정. 이 튜플의 두 번째 위치에 있는 키워드는선택. 첫 번째 위치(또는 라벨에 1차원 매개무료 슬롯 사이트가 필요합니다.''). 이 매개무료 슬롯 사이트에는 값과 함께 다음 라벨 중 일부가 포함될 수 있습니다.

옵션설명
OptfileInit:첫 번째 해결을 위한 옵션 파일 번호(GAMS OptFile 설정의 기본값)
옵트파일:후속 해결을 위한 옵션 파일 번호(기본값 0)
로그옵션:로그 출력량을 결정합니다:
0- 보통 로그(기본값)
1- 최소 로그
2- 상세 로그
NoHotStart:핫 스타트를 지원하는 솔버에서 핫 스타트 기능 비활성화(기본값 0)
NoMatchLimit:일치하지 않는 시나리오 기록의 한계(기본값 0)
재시작 유형::시나리오의 재시작 지점을 결정
0- 마지막 솔루션에서 다시 시작(기본값)
1- 기본 사례 솔루션에서 다시 시작
2- 입력 지점에서 다시 시작
SkipBaseCase:기본 사례 해결을 위한 스위치(0은 기본 사례 해결)
마지막 장면 보고:기본 사례의 솔루션이 아닌 마지막 시나리오의 솔루션을 보고하는 스위치(기본값 0)
해결비어있음:해결된 빈 시나리오의 한계, 이후에는 빈 시나리오를 건너뜁니다(기본값 0)
업데이트 유형:시나리오 업데이트 메커니즘:
0- 모든 것을 0으로 설정하고 변경 사항 적용(기본값)
1- 기본 사례 재설정 및 변경 사항 적용
2- 마지막 시나리오를 기반으로 구축하고 변경 사항 적용

위의 예시 모델의 경우업데이트 유형설정의 의미:

업데이트 유형=0: 루프(s, A(i,j) = A_s(s,i,j))
UpdateType=1: loop(s, A(i,j) = A_base(i,j);
                       A(i,j) $= A_s(s,i,j))
UpdateType=2: 루프(s, A(i,j) $= A_s(s,i,j))

옵션SkipBaseCase=1사용자가 기본 사례를 건너뛸 수 있도록 허용합니다. 이는 시나리오만 해결되었으며 기존 방식으로 GAMS에 다시 보고된 솔루션은 없음을 의미합니다. 의 세 번째 위치선택-튜플은 시나리오 솔루션 속성 정보를 저장하기 위한 매개무료 슬롯 사이트를 포함할 수 있습니다. 상태를 모델링하고 해결하거나 라벨이 필요함''. 솔루션 상태 정보를 저장하는 레이블은 GAMS에 알려져야 하므로 해당 레이블이 포함된 세트를 선언해야 합니다. 이러한 속성을 입력하는 편리한 방법은 다음과 같습니다.System.GUSSModelAttributes:

ma 'GUSS 모델 속성' 설정' / System.GUSSModelAttributes /; 디스플레이 엄마;
---- 1 SET ma GUSS 모델 속성

ModelStat, SolveStat, NumInfes, SumInfes, IterUsd
ResUsd, ObjVal, NodUsd, ObjEst, DomUsd
RObj, MaxInfes, MeanInfes

다음 예는 일부 GUSS 옵션을 사용하는 방법과 일부 솔루션 상태 정보를 저장하기 위해 매개무료 슬롯 사이트를 사용하는 방법을 보여줍니다.

h 솔루션 헤더 설정 / System.GUSSModelAttributes /;
매개무료 슬롯 사이트
   o / SkipBaseCase 1, UpdateType 1, Optfile 1 /
   r_s(s,h) 솔루션 상태 보고서;
dict / s를 설정하십시오.   시나리오. ''
           오.   선택하다.      r_s
           가.   매개무료 슬롯 사이트.    a_s
           x.   더 낮게.    xlo_s
           x.   수준.    xl_s
           이자형.   한계. em_s /;
lp 시나리오 dict를 사용하여 mymodel min z를 해결합니다.

솔루션 상태 보고서 속성의 도메인 집합에 유의하십시오(여기h)에는 GUSS에 알려진 모델 속성만 포함되어야 합니다. 이 도메인(*의 도메인 제외)에 GUSS에 알려지지 않은 라벨이 포함되어 있으면 컴파일 오류가 발생합니다.

구현 세부정보

이 섹션에서는 예상치 못한 동작이 발생할 경우 유용한 통찰력을 제공할 수 있는 몇 가지 기술적인 세부 사항을 설명합니다.

GUSS는 언급된 모든 모델 매개무료 슬롯 사이트를 변경하기 때문에dict무료 슬롯 사이트로 설정하면 선형 모델은 일부 비선형 명령을 생성할 수 있습니다(예:d(i,j)*f*x(i,j)이후 비선형 표현식이 됩니다fGUSS에 제공된 모델 인스턴스의 무료 슬롯 사이트가 됩니다). 이는 일부 모델이 아무런 문제 없이 컴파일되는 이유도 설명하지만 해당 모델을 GUSS 컨텍스트에서 사용하는 경우 무료 슬롯 사이트로 변환된 매개무료 슬롯 사이트를 더 이상 그런 방식으로 사용할 수 없기 때문에 모델의 컴파일 시간 확인이 실패하게 됩니다. 예를 들어 모델에 제약 조건이 포함되어 있다고 가정합니다.e(i)..sum(j$A(i,j), ...). 만일A(i,j)는 일반 모델의 매개무료 슬롯 사이트이므로 컴파일러는 불평하지 않지만, 만약Aa의 첫 번째 위치에 나타나는 매개무료 슬롯 사이트가 됩니다.매개무료 슬롯 사이트튜플dict설정하면 GAMS 컴파일러가 회전합니다A무료 슬롯 사이트에 내부 무료 슬롯 사이트를 사용할 수 없다고 불평합니다.$-조건.

모델의 희소성 패턴은 GUSS에 의해 큰 영향을 받을 수 있습니다. 일반 모델 인스턴스에서 GAMS는 제약 조건의 0이 아닌 행렬 요소만 생성하고 전달합니다.e(i).. sum(j, A(i,j)*x(j)) ..., 희소성A생성된 모델 인스턴스의 희소성을 결정합니다. GUSS에서는 이 제약 조건을 다른 값과 함께 사용할 수 있습니다.A따라서 GUSS는 어떤 쌍도 제외할 수 없습니다.(i,j)그리고 조밀한 행렬을 생성합니다. 사용자는 명시적으로 제한하여 희소성을 적용할 수 있습니다.(i,j)쌍:e(i).. sum(ij(i,j), A(i,j)*x(j)) ...

주의
  • GUSS를 사용할 때, ifsolveLink=6또는solveLink=7설정되면 자동으로 다음으로 재설정됩니다.solveLink=3또는solveLink=4입니다. 또한 GUSS는 다음을 시행합니다.holdfixed=0. 명령줄 매개무료 슬롯 사이트에 대해 자세히 알아볼 수 있습니다.solveLink그리고보류 고정해당 섹션에서.
  • GUSS는 다양한 모델 유형에 사용할 수 있지만 2차 모델에는 특별한 주의가 필요합니다. (볼록) 2차 모델을 포함하도록 확장된 선형 솔버입니다. Cplex, Gurobi, Mosek, Xpress는 수정 매개무료 슬롯 사이트가 선형 방정식의 왼쪽 변이나 2차 방정식의 수정에 영향을 미치는 경우 제대로 작동하지 않습니다. 선형 제약 조건의 오른쪽 변경뿐만 아니라 바운드 업데이트도 괜찮습니다(아래 2차 지원 벡터 머신의 예 참조). 불행하게도 주어진 솔버에 대해 2차 모델이 괜찮은지 여부를 감지하는 것은 현재로서는 감지하기 어렵기 때문에 이러한 (선형) 솔버와 함께 2차 모델을 사용할 때는 주의해야 합니다.

GUSS 구현에 필요한 GAMS 언어의 실제 변경은 최소화됩니다. 유일한 진정한 변화는해결용어가 포함된 진술시나리오 사전. 기존 언어 요소는 기호 매핑 정보, 옵션 및 모델 결과 통계를 저장하는 데 사용되었습니다. GUSS 프레젠테이션의 일부 부분은 다소 부자연스러워 보입니다. 이후dict3차원입니다설정사양 시나리오세트키워드 사용시나리오세 번째 더미 라벨이 필요합니다''. 그러나 이 접근 방식은 향후 확장을 위한 최대의 유연성을 제공하고, 컴파일 및 실행 시 안정적인 일관성 검사를 허용하며, 사용자가 GAMS 언어 수준에서 모델 인스턴스를 처리하기 위해 개발 방법의 중요하고 영구적인 구문 변경에 대한 약속을 지연할 수 있게 해줍니다.

애플리케이션

GUSS를 통한 GAMS 교차 검증

교차 검증은 분류자(또는 기타 결정) 프로세스의 일반화 가능성을 평가하는 것을 목표로 하는 통계/기계 학습 기술입니다. 이는 테스트를 위해 데이터의 일부를 따로 보관하고 나머지 데이터 항목을 사용하여 분류자를 생성함으로써 이를 수행합니다. 테스트 데이터는 이후 분류기가 얼마나 잘 작동하는지 평가하는 데 사용됩니다. 교차 검증은 분류기의 실제 성능을 추정하기 위해 이 전체 프로세스를 여러 번 수행합니다.

10겹 교차 검증은 원본 데이터를 10개 조각으로 분할하고 이 10개 조각을 각각 테스트 세트로 사용하여 교차 검증을 수행하는 특별한 경우입니다. 따라서 훈련 과정은 총 10회 수행되며, 각 훈련은 전체 데이터 세트에서 테스트 세트를 삭제한 데이터를 사용합니다. 아래에서는 GAMS의 GUSS(Gather-Update-Solve-Scatter) 기능을 사용하여 이를 수행하는 방법을 보여줍니다.

"GUSS: 데이터 관련 모델의 컬렉션 해결"이라는 제목의 논문 GUSS에 대한 두 가지 추가 응용 사례가 포함된 GAMS 내에서 사용 가능여기.

GAMS의 GUSS 공식

다음 예는 데이터 파일을 사용한 교차 검증 하에서 특징 선택 모델에 대한 두 가지 공식을 비교합니다.a_data.inc그리고b_data.inc. 이 두 가지 GAMS 공식의 실제 소스 코드를 사용할 수 있습니다.여기.

원래 GAMS 공식(GAMS/DEA 인터페이스 없음):

$title 10겹 교차 검증 예
$얼컴!

$setglobal num_folds 10

'카테고리 1에 대한 설정' /1*1505/ 설정
    b '범주 2로 설정' /1*957/
    o '관찰' /1*14/
    p '수행할 폴드' /1*%num_folds%/
    f '선택할 최대 기능' /1*10/

* 데이터 파일에서 데이터 읽기
매개무료 슬롯 사이트 a_data(a, o) /
$offlisting
$include "a_data.inc"
$onlisting
/;

매개무료 슬롯 사이트 b_data(b, o) /
$offlisting
$include "b_data.inc"
$onlisting
/;

set a_test(p,a), b_test(p,b) '테스트 세트'
    a_trai(a), b_trai(b) '훈련 세트';

* 문제 정의
스칼라 w_tol /1/
       기능 /6/;

양수 무료 슬롯 사이트 a_err(a), sla(a)
                   b_err(b), slb(b);

무료 슬롯 사이트 C,
          무게(o),
          감마;

이진무료 슬롯 사이트 y(o);

방정식 w_def1(o),
          w_def2(o),
          y_def,
          c_def,
          a_def(a),
          b_def(b);

w_def1(o)..
        무게(o) =l= w_tol*y(o);

w_def2(o)..
        무게(o) =g= -w_tol*y(o);

y_def..
        합계(o, y(o)) =e= 특징;

c_def..
        c =e= 합(a, a_err(a)) + 합(b, b_err(b));

a_def(a)..
        -sum(o, a_data(a, o)*weight(o)) + 감마 + 1 =l= a_err(a) + sla(a);

b_def(b)..
         sum(o, b_data(b, o)*weight(o)) - 감마 + 1 =l= b_err(b) + slb(b);

모형 기차 /all/;

$batinclude gentestset.inc "p,a" "p,b"

헤더 '보고서' 설정 / modelstat,solvstat, objval /;
매개무료 슬롯 사이트 담당자(p,헤더);
train.optfile = 0;
옵션 limrow=0, limcol=0, solprint=silent, mip=xpress,
       solvelink=%solveLink.loadLibrary%, optcr=0, optca=0;

$echo loadmipsol=1 > xpress.opt

루프(p,
  a_err.up(a) = inf; a_err.up(a)$a_test(p,a) = 0;
  b_err.up(b) = inf; b_err.fx(b)$b_test(p,b) = 0;
  sla.fx(a) = 0; sla.up(a)$a_test(p,a) = inf;
  slb.fx(b) = 0; slb.up(b)$b_test(p,b) = inf;
  c를 최소화하는 mip를 사용하여 열차를 해결합니다.
  train.optfile = 1; ! 두 번째 실행에는 mipstart를 사용하십시오.
  담당자(p,'modelstat') = train.modelstat;
  rep(p,'solvestat') = train.solvestat;
  담당자(p,'objval') = train.objval;
);
디스플레이 담당자;

원본 공식에 대한 옵션 파일: xpress.opt

loadmipsol=1

batinclude 파일gentestset.inc. 테스트 세트 생성에 대한 지침을 제공합니다. 생산한다a_test그리고b_test해석 p에서 어떤 방정식이 제외되는지 자세히 설명합니다.

실제 모델은 방정식의 모든 데이터 포인트를 포함하도록 설정되었습니다.a_def그리고b_def. 테스트 세트에 해당하는 방정식을 삭제하기 위해 모든 방정식에 음이 아닌 여유 무료 슬롯 사이트를 도입합니다. 그런 다음 훈련 세트에 해당하는 방정식에서는 여유 무료 슬롯 사이트의 상한을 0으로 설정하고 테스트 세트에 해당하는 방정식에서는 무한대로 설정합니다. 동시에 오류 조치를 수정합니다.a_err그리고b_err상한을 0으로 설정하여 테스트 세트에 속합니다. 따라서 테스트 세트 방정식은 여유 무료 슬롯 사이트만 선택하여 항상 만족할 수 있습니다. 기본적으로 필요에 따라 모델에서 삭제됩니다. 대체 공식은 각 시나리오에 필요한 데이터 방정식을 "포함"할 수 있지만 정의 데이터에서 한 시나리오에서 다음 시나리오로의 업데이트는 훨씬 더 큽니다.

GUSS를 사용하여 공식화된 교차 검증: 이 모델은 기본적으로 표준 모델의 기능을 모방하지만 이면의 솔버 루프 구현이 훨씬 더 효율적이며 두 모델 실행을 모두 실행하면 결과가 명확해집니다. 변경사항은 GAMS 코드의 마지막 40줄에 있습니다.

$title 10중 교차 검증 예시
$얼컴!

$setglobal num_folds 10

'카테고리 1에 대한 설정' /1*1505/ 설정
    b '범주 2로 설정' /1*957/
    o '관찰' /1*14/
    p '수행할 폴드' /1*%num_folds%/
    f '선택할 최대 기능' /1*10/

* 데이터 파일에서 데이터 읽기
매개무료 슬롯 사이트 a_data(a, o) /
$offlisting
$include "a_data.inc"
$onlisting
/;

매개무료 슬롯 사이트 b_data(b, o) /
$offlisting
$include "b_data.inc"
$onlisting
/;

set a_test(p,a), b_test(p,b) '테스트 세트'
    a_trai(a), b_trai(b) '훈련 세트';

* 문제 정의
스칼라 w_tol /1/
       기능 /6/;

양수 무료 슬롯 사이트 a_err(a), sla(a)
                   b_err(b), slb(b);

무료 슬롯 사이트 C,
          무게(o),
          감마;

이진무료 슬롯 사이트 y(o);

방정식 w_def1(o),
          w_def2(o),
          y_def,
          c_def,
          a_def(a),
          b_def(b);

w_def1(o)..
        무게(o) =l= w_tol*y(o);

w_def2(o)..
        무게(o) =g= -w_tol*y(o);

y_def..
        합계(o, y(o)) =e= 특징;

c_def..
        c =e= 합(a, a_err(a)) + 합(b, b_err(b));

a_def(a)..
        -sum(o, a_data(a, o)*weight(o)) + 감마 + 1 =l= a_err(a) + sla(a);

b_def(b)..
         sum(o, b_data(b, o)*weight(o)) - 감마 + 1 =l= b_err(b) + slb(b);

모형 기차 /all/;
train.optfile = 1;

$batinclude gentestset.inc "p,a" "p,b"

매개무료 슬롯 사이트 wval(p,o), gval(p);

헤더 '보고서' 설정 / modelstat,solvstat, objval /;
매개무료 슬롯 사이트
    screp(p,헤더)
    scopt(*) / SkipBaseCase 1, Optfile 1, LogOption 2 /;

dict / p를 설정하십시오.     시나리오.''
           스코프. 고르다.     시나리오
           a_err. 높은.   만찬
           b_err. 높은.   버퍼
           슬라.   높은.   자유롭게
           slb.   높은.   비프리
           체중.수준.   wval
           감마. 수준.   총 /

$echo loadmipsol=1 > xpress.opt

매개무료 슬롯 사이트 aupper(p,a), bupper(p,b), afree(p,a), bfree(p,b);

aupper(p,a)$(not a_test(p,a)) = inf;
bupper(p,b)$(b_test(p,b) 아님) = inf;

afree(p,a)$a_test(p,a) = inf;
bfree(p,b)$b_test(p,b) = inf;

옵션 mip=xpress, optcr=0, optca=0;
C 시나리오 dict를 최소화하는 mip를 사용하여 열차를 해결합니다.
화면 표시, gval;

첫째, 매개무료 슬롯 사이트어퍼, 버퍼, 무료그리고bfree은 각각 테스트 세트 방정식의 오류 및 여유 무료 슬롯 사이트에 대한 경계를 설정하는 데 사용됩니다. 상한의 설정은 제어 set dict에 표시된 구문에 의해 제어됩니다. 또한 분류기의 출력(w,감마) 교차 검증의 각 접기에 대해 dict 세트를 사용하여 결과를 매개무료 슬롯 사이트에 배치합니다.wval그리고gval각각. 마지막으로, GUSS 옵션은 후속 솔버가 솔버 옵션을 처리하도록 지시하는 것을 보장하는 데 사용됩니다(옵트파일 1) 솔버에게 이전 솔루션을 사용하여 분기 및 절단 프로세스를 시작하도록 지시합니다(loadmipsol=1).

이 예의 전체 데이터 및 모델 파일은 (에서 찾을 수 있습니다.갤럭시 zip 아카이브). 위스콘신 유방암 진단 데이터베이스를 기반으로 한 두 번째 인스턴스에 대한 데이터 및 모델은 (wdbc zip 아카이브).

2차 프로그램

GUSS는 선형 프로그램에만 국한되지 않고 더 일반적으로 사용될 수 있습니다. 간단한(인덱스된) 2차 모델은 GUSS를 사용하여 풀 수 있습니다. 다음 예에서는 2차 프로그램에 GUSS를 사용하는 방법을 보여줍니다. 이 예에서는 데이터를 두 가지 범주로 구분하는 선형 분류기를 결정하기 위해 서포트 벡터 머신이 사용됩니다. 우리는 다음 모델을 사용합니다:

\begin방정식

여기서 \(A\)는 훈련 데이터(특징별 환자)를 포함하는 행렬이고 \(D\)는 값 \(+1\) 또는 \(-1\)(각각 두 클래스 중 하나를 나타냄)을 갖는 대각 행렬입니다. \(C\)는 클래스 간의 마진(\((2/\|w\|_2)\) 최대화와 오분류 오류 \((z)\) 최소화의 중요성에 가중치를 부여하는 매개무료 슬롯 사이트입니다. \(w\) 및 \(g\) 솔루션은 (보이지 않는) 데이터 포인트를 분류하기 위해 분리된 초평면 \(\x | w^T x = g\\)을 정의하는 데 사용됩니다.

주어진 바와 같이, 표준 선형 지원 벡터 머신은 그 자체로 슬라이스 모델이 아닙니다. 이는 교차 검증 훈련 시 슬라이스 모델이 되며, 다양한 데이터 조각에 대해 여러 번 해결됩니다. 이 경우, 데이터 \(A\)와 \(D\)만 해석 간에 달라지며 슬라이스 모델의 정의에 적절하게 맞습니다.

이 예의 데이터는 위스콘신 유방암 진단 데이터베이스에서 왔으며 사용 가능합니다.여기. 데이터가 GAMS 파일로 변환되었습니다.wdbc.gms, \(A\) 및 \(D\)를 정의합니다. 다음 GAMS 공식의 실제 소스 코드를 사용할 수 있습니다.여기.

2차 svm에 대한 GUSS 공식:

$title GUSS를 사용한 10겹 교차 검증 예
$얼컴!

$setglobal num_folds 10

p /1*%num_folds%/ 설정;  ! 수행하기 위해 접기

! 데이터 읽기
$include "wdbc.gms"

테스트 설정(p,i);          ! 테스트 세트

! 문제 정의
매개무료 슬롯 사이트 C /1/;
양의 무료 슬롯 사이트 z(i);
무료 슬롯 사이트 obj, w(k), 감마, slack(i);

방정식 obj_def, sep_def(i);

obj_def.. obj =e= 1/2*sum(k, sqr(w(k))) + C*sum(i, z(i));
sep_def(i)..
           D(i)*(sum(k, A(i,k)*w(k)) - 감마) + z(i) + slack(i) =g= 1;

모형 기차 /all/;

! 테스트 세트 생성(문제별 삭제 예정)
루프(p,
$batinclude gentestset2.inc "p,i"
);

헤더 보고서 설정 / modelstat,solvstat, objval /;
매개무료 슬롯 사이트
    screp(p,헤더)
    scopt / SkipBaseCase 1, LogOption 2 /;

dict / p를 설정하십시오.    시나리오.''
           scopt.opt.     시나리오
           z.    높은.   어퍼
           슬랙.어퍼.   무료 /;

매개무료 슬롯 사이트 iupper(p,i), ifree(p,i);
iupper(p,i)$(test(p,i) 아님) = inf;
ifree(p,i)$test(p,i) = inf;

옵션 qcp=conopt, optcr=0, optca=0;
obj 시나리오 dict를 최소화하는 qcp를 사용하여 열차를 해결합니다.
화면 표시;

문제는 2차 방정식이기 때문에 우리는 2차 프로그램 솔버를 사용해야 합니다. 선형 사례에 대해 위에서 설명한 것과 동일한 방법을 사용하여 나중에 테스트하기 위해 가중치 및 감마에 대한 무료 슬롯 사이트 값을 저장할 수 있습니다.

batinclude 파일gentestset2.inc다음과 매우 유사함gentestset.inc이전 교차 검증 예시에서 따왔습니다. 에서gentestset2.inc그런데 두 세트가 아닌 한 세트만 다루고 있습니다. 이 공식의 전체 소스 GAMS 코드는 다음에서 확인할 수 있습니다.zip 아카이브.

GUSS를 통한 GAMS의 DEA 모델링

DEA(데이터 포괄 분석) 모델은 GUSS(수집-업데이트-해결-분산) 기능을 사용하여 GAMS에서 가장 효율적으로 해결할 수 있습니다. 이는 GAMS 릴리스 23.7부터 선호되는 방법이므로 GAMS/DEA 솔버는 더 이상 사용할 수 없습니다.

"GUSS: 데이터 관련 모델의 컬렉션 해결"이라는 제목의 논문 GUSS에 대한 두 가지 추가 응용 사례가 포함된 GAMS 내에서 사용 가능여기.

소개

기본(CCR) DEA 모델은 \(k\)로 색인화되고 다음으로 정의되는 모델 모음입니다.

\begin방정식

여기서 \(X,Y\)는 데이터 행렬입니다.

GAMS에서 GUSS를 사용하지 않으면 \(k\)에 대한 루프에서 모델이 정의되고 해결되므로 \(k\)의 각 값에 대해 서로 다른 인스턴스를 사용하여 모델을 여러 번 생성해야 합니다. GUSS는 개별 프로그램을 정의하고 이를 기본 GAMS 솔버에 전달하는 대체적이고 효율적인 방법입니다. 이러한 방식으로 개별 프로그램은 다시 생성되지 않고 대신 서로의 데이터 수정으로 정의됩니다. 이렇게 하면 전체 모델 생성 시간이 단축됩니다. 또한 이전 솔루션을 이후 해결의 시작점으로 사용하여 전체 처리 시간을 단축할 수 있습니다.

일부 DEA 사례는 두 가지 공식을 비교합니다. 이 두 가지 공식에 대한 실제 소스 코드를 사용할 수 있습니다.여기.

DEA 예

원래 GAMS 공식(GUSS 제외):이 모든 모델에서 모델 설정과 데이터는 파일 상단에 제공되며 관심 있는 코드는 마지막 10줄 정도에 있습니다. 이 설정에서는 세트 k를 반복하고 각 해결 전에 명시적으로 모델의 첫 번째 제약 조건과 목적 함수의 데이터를 변경합니다. 우리는 솔루션에 대한 최소한의 요약만 출력합니다.

$title 데이터 포괄 분석 - DEA

$ontext
DEA(Data Envelopment Analysis)는 상대적인 데이터를 측정하는 기술입니다.
다양한 입력이 존재하는 조직 단위의 성과
출력이 비교를 어렵게 만듭니다.

            효율성 = 출력의 가중합 / 입력의 가중합

한 유닛의 효율성을 극대화하면서 동시에 효율성을 극대화하는 중량을 찾아보세요.
이 가중치를 사용하는 다른 장치의 효율성은 1 미만입니다. 원시
이중 공식이 제시됩니다.

Dyson, Thanassoulis 및 Boussofiane, DEA 튜토리얼.
워릭 경영대학원

$offtext

i를 '단위'로 설정합니다. / Depot1*Depot20 /
      j '입력 및 출력' / 재고, 임금, 발행물, 영수증, 요청 /
      ji(j) '입력' / 주식, 임금 /
      jo(j) '출력' / 문제, 영수증, 요청 /;
별칭(i,k);

테이블 데이터(i,j)
         재고 임금 발행 영수증 요청
디포1 3 5 40 55 30
디포2 2.5 4.5 45 50 40
디포3 4 6 55 45 30
디포4 6 7 48 20 60
디포5 2.3 3.5 28 50 25
디포6 4 6.5 48 20 65
창고7 7 10 80 65 57
디포8 4.4 6.4 25 48 30
창고9 3 5 45 64 42
디포10 5 7 70 65 48
디포11 5 7 45 65 40
디포12 2 4 45 40 44
디포13 5 7 65 25 35
디포14 4 4 38 18 64
디포15 2 3 20 50 15
디포16 3 6 38 20 60
디포17 7 11 68 64 54
디포18 4 6 25 38 20
디포19 3 4 45 67 32
창고20 3 6 57 60 40
;

매개무료 슬롯 사이트 조각(j) '데이터 조각'
          eff_k(i) '효율성 보고서';

양수 무료 슬롯 사이트 v(ji) '입력 가중치'
                   u(jo) '출력 가중치';

무료 슬롯 사이트 eff '효율성';

방정식은 '효율성 정의 - 가중 출력'을 정의합니다.
          '가중 입력'이라는 명칭
          라임(i) '출력 / 입력 < 1';

defe..eff =e= sum(jo, u(jo)*slice(jo));

denom..sum(ji, v(ji)*slice(ji)) =e= 1;

라임(i).. sum(jo, u(jo)*data(i,jo)) =l= sum(ji, v(ji)*data(i,ji));

모델 dea /defe, denom, 라임 /;

헤더 설정 / modelstat,solvstat, objval /;
매개무료 슬롯 사이트 rep(k,headers) '솔루션 보고서 요약';
옵션 limrow=0, limcol=0, solprint=silent,
       solvelink=%solveLink.loadLibrary%;
루프(k,
  슬라이스(j) = 데이터(k,j);
  lp max eff를 사용하여 dea를 해결합니다.
  담당자(k,'modelstat') = dea.modelstat;
  담당자(k,'solvestat') = dea.solvestat;
  담당자(k,'objval' ) = dea.objval;
);
디스플레이 담당자;

GUSS를 사용하여 공식화된 DEA 문제: 이 설정에서 해결 문에는 다음이라는 새로운 세트를 가리키는 추가 키워드 시나리오가 포함되어 있습니다.dict. 이 세트의 내용은 시나리오 인덱스가 \(k\)이고 매개무료 슬롯 사이트 슬라이스가 매개무료 슬롯 사이트 데이터와 무료 슬롯 사이트 값으로 채워지는 GUSS에 대한 지시어입니다.eff매개무료 슬롯 사이트에 저장됩니다eff_k해결된 각 시나리오에 대해. 자세한 내용은 아래를 참조하세요.

$title 데이터 포괄 분석 - DEA

i를 '단위'로 설정합니다. / Depot1*Depot20 /
      j '입력 및 출력'/ 재고, 임금, 발행물, 영수증, 요구 사항 /
      ji(j) '입력' / 주식, 임금 /
      jo(j) '출력' / 문제, 영수증, 요청 /;
별칭(i,k);

테이블 데이터(i,j)
         재고 임금 발행 영수증 요청
디포1 3 5 40 55 30
디포2 2.5 4.5 45 50 40
디포3 4 6 55 45 30
디포4 6 7 48 20 60
디포5 2.3 3.5 28 50 25
디포6 4 6.5 48 20 65
창고7 7 10 80 65 57
디포8 4.4 6.4 25 48 30
창고9 3 5 45 64 42
디포10 5 7 70 65 48
디포11 5 7 45 65 40
디포12 2 4 45 40 44
디포13 5 7 65 25 35
디포14 4 4 38 18 64
디포15 2 3 20 50 15
디포16 3 6 38 20 60
디포17 7 11 68 64 54
디포18 4 6 25 38 20
디포19 3 4 45 67 32
창고20 3 6 57 60 40
;

매개무료 슬롯 사이트 조각(j) '데이터 조각'
          eff_k(i) '효율성 보고서';

양수 무료 슬롯 사이트 v(ji) '입력 가중치'
                   u(jo) '출력 가중치';

무료 슬롯 사이트 eff '효율성';

방정식은 '효율성 정의 - 가중 출력'을 정의합니다.
          '가중 입력'이라는 명칭
          라임(i) '출력 / 입력 < 1';

defe..eff =e= sum(jo, u(jo)*slice(jo));

denom..sum(ji, v(ji)*slice(ji)) =e= 1;

라임(i).. sum(jo, u(jo)*data(i,jo)) =l= sum(ji, v(ji)*data(i,ji));

모델 dea /defe, denom, 라임 /;

헤더 '보고서' 설정 / modelstat,solvstat, objval /;
매개무료 슬롯 사이트 scenrep(k,headers) '솔루션 보고서 요약'
          scopt / SkipBaseCase 1 /;

dict / k .scenario를 설정하세요.''
           슬라이스 .param.   데이터
           eff.level.   eff_k
           스코프 .opt.     시나리오 /;

슬라이스(j) = 0; 옵션 lp=cplex;
lp max eff 시나리오 dict를 사용하여 dea를 해결합니다.
화면 표시,eff_k;

GUSS 버전에서는 세트를 사용하여 해결해야 할 모델 컬렉션을 나타냅니다.dict. 의 첫 번째 요소dict시나리오(컬렉션) 인덱스에 사용할 세트를 결정합니다(이 경우 \(k\)). 그런 다음 dict의 두 번째 요소는 각 시나리오 \(k\)에서 매개무료 슬롯 사이트 조각이 매개무료 슬롯 사이트 데이터 조각을 사용하여 인스턴스화됨을 자세히 설명합니다. 본질적으로 이는 GAMS 문에 해당합니다.

슬라이스(j) = 데이터(k,j)

시나리오 인덱스 \(k\)는 매개무료 슬롯 사이트 데이터의 첫 번째 인덱스로 나타나야 합니다. 의 세 번째 요소dict모델러는 각 해결에서 정보를 수집하여 GAMS 매개무료 슬롯 사이트에 저장할 수 있습니다. 본질적으로,의 세 번째 요소는dictGAMS 문에 해당:

eff_k(k) = eff.l

시나리오 \(k\) 해결 직후에 실행됩니다.

업데이트되는 여러 방정식을 포함하여 GUSS를 사용하여 더 복잡한 시나리오 모델을 공식화할 수도 있습니다. 이는 기본 DEA 모델의 이중으로 표시됩니다.

\begin방정식

다음 예에서는 이 모델에 대한 두 공식을 비교합니다. 이 두 가지 공식에 대한 실제 소스 코드를 사용할 수 있습니다.여기.

원래 GAMS 공식(GUSS 제외):

$title 데이터 봉투 분석 - DEA(기존)

i를 '단위'로 설정합니다. / Depot1*Depot20 /
      j '입력 및 출력' / 재고, 임금, 발행물, 영수증, 요청 /
      ji(j) '입력' / 주식, 임금 /
      jo(j) '출력' / 문제, 영수증, 요청 /;
별칭(k,i);

테이블 데이터(i,j)
         재고 임금 발행 영수증 요청
디포1 3 5 40 55 30
디포2 2.5 4.5 45 50 40
디포3 4 6 55 45 30
디포4 6 7 48 20 60
디포5 2.3 3.5 28 50 25
디포6 4 6.5 48 20 65
창고7 7 10 80 65 57
디포8 4.4 6.4 25 48 30
창고9 3 5 45 64 42
디포10 5 7 70 65 48
디포11 5 7 45 65 40
디포12 2 4 45 40 44
디포13 5 7 65 25 35
디포14 4 4 38 18 64
디포15 2 3 20 50 15
디포16 3 6 38 20 60
디포17 7 11 68 64 54
디포18 4 6 25 38 20
디포19 3 4 45 67 32
창고20 3 6 57 60 40
;

매개무료 슬롯 사이트 슬라이스(j) '데이터 조각'
          eff_k(i) '효율성 보고서';

무료 슬롯 사이트 z '효율성'
          lam(i) '이중 가중치';

양의 무료 슬롯 사이트 램;

방정식 dii(ji) '입력 쌍대'
          dio(jo) '출력 이중';

* 듀얼 모델

dii(ji).. sum(i, lam(i)*data(i,ji)) =l= z*slice(ji);

dio(jo).. sum(i, lam(i)*data(i,jo)) =g= 슬라이스(jo);

CRS / dii, dio /를 사용한 모델 deadc 듀얼;

매개무료 슬롯 사이트 담당자 '요약 보고서';
옵션 limrow=0, limcol=0, solprint=silent, lp=cplex,
       solvelink=%solveLink.loadLibrary%;

루프(k,
   슬라이스(j) = 데이터(k,j);
   z 를 최소화하는 lp를 사용하여 deadc를 해결합니다.
   담당자(k,'modelstat') = deadc.modelstat;
   담당자(k,'solvestat') = deadc.modelstat;
   담당자(k,'objval') = deadc.objval;
);

디스플레이 담당자;

GUSS를 사용하여 공식화된 이중(CRS) DEA 모델: 핵심 모델링 문은 아래 마지막 10줄에 나타납니다.

$title 데이터 포괄 분석 - DEA(이중,GUSS)

i를 '단위'로 설정합니다. / Depot1*Depot20 /
      j '입력 및 출력' / 재고, 임금, 발행물, 영수증, 요청 /
      ji(j) '입력' / 주식, 임금 /
      jo(j) '출력' / 문제, 영수증, 요청 /;
별칭(k,i);

테이블 데이터(i,j)
         재고 임금 발행 영수증 요청
디포1 3 5 40 55 30
디포2 2.5 4.5 45 50 40
디포3 4 6 55 45 30
디포4 6 7 48 20 60
디포5 2.3 3.5 28 50 25
디포6 4 6.5 48 20 65
창고7 7 10 80 65 57
디포8 4.4 6.4 25 48 30
창고9 3 5 45 64 42
디포10 5 7 70 65 48
디포11 5 7 45 65 40
디포12 2 4 45 40 44
디포13 5 7 65 25 35
디포14 4 4 38 18 64
디포15 2 3 20 50 15
디포16 3 6 38 20 60
디포17 7 11 68 64 54
디포18 4 6 25 38 20
디포19 3 4 45 67 32
창고20 3 6 57 60 40
;

매개무료 슬롯 사이트 슬라이스(j) '데이터 조각'
          eff_k(i) '효율성 보고서';

무료 슬롯 사이트 z '효율성'
          lam(i) '이중 가중치';

양의 무료 슬롯 사이트 램;

방정식 dii(ji) '입력 쌍대'
          dio(jo) '출력 이중';

* 듀얼 모델

dii(ji).. sum(i, lam(i)*data(i,ji)) =l= z*slice(ji);

dio(jo).. sum(i, lam(i)*data(i,jo)) =g= 슬라이스(jo);

CRS / dii, dio /를 사용한 모델 deadc 듀얼;

헤더 '보고서' 설정 / modelstat,solvstat, objval /;
매개무료 슬롯 사이트 scenrep(k,headers) '솔루션 보고서 요약'
          scopt / SkipBaseCase 1 /;

dict / k를 설정하십시오.     시나리오.''
           스코프. 고르다.     시나리오
           슬라이스. 매개무료 슬롯 사이트.   데이터
           z.     수준.   eff_k /;

슬라이스(j) = 0; 옵션 lp=cplex;
lp min z 시나리오 dict를 사용하여 데드크를 해결합니다.
화면 표시,eff_k;

가중 출력 또는 규모에 따른 가변 수익을 포함하는 공식으로 이러한 모델을 확장하면 GAMS 내의 시나리오 솔버를 사용하여 쉽게 공식화할 수 있습니다. 이 확장 모델을 다운로드할 수 있습니다.여기.

DEA 모델모델 라이브러리의 확장 모델과 유사하지만 GUSS를 사용하지 않습니다.