슬롯 게임 사용법

초보 GAMS 사용자의 경우 슬롯 게임 사용법은 매우 간단할 수 있습니다. 모델을 실행하고 목록 파일을 검사하여 솔루션이 무엇인지 확인합니다. 슬롯 게임 옵션이나 슬롯 게임별 반환 코드에 대한 지식이 필요하지 않습니다. 일부 사용자에게는 이것으로 충분하지만 대부분의 사용자는 슬롯 게임를 제어하고 결과를 해석하는 방법에 대한 기본 지식이 필요하다는 것을 금방 깨닫게 될 것입니다. 섹션GAMS 옵션을 통해 슬롯 게임 제어슬롯 게임를 제어하는 GAMS 옵션을 설정하는 방법을 설명합니다. 또한 대부분의 슬롯 게임에서는 사용자가 슬롯 게임별 추가 옵션을 설정할 수 있습니다. 이는 섹션에서 논의될 슬롯 게임별 옵션 파일을 통해 설정할 수 있습니다.슬롯 게임 옵션 파일. 그러나 GAMS 옵션 설정은 모든 슬롯 게임에 적용되고 슬롯 게임에 의해 일관된 방식으로 해석되므로 일반 GAMS 옵션을 사용하는 것이 좋습니다.

다양한 슬롯 게임는 변수 및 방정식 값의 초기화를 활용할 수 있습니다. 이에 대해서는에서 논의됩니다.시작점 및 초기 기준.

고급 사용자에게 더 흥미로운 추가 슬롯 게임 관련 주제는 섹션에서 논의됩니다.추적 해결그리고BCH(분기 및 잘라내기 및 휴리스틱 기능).

슬롯 게임 선택 방법에 대한 힌트는 다음을 참조하세요.적절한 해결사 선택.

GAMS 옵션을 통해 슬롯 게임 제어

GAMS 옵션은 GAMS 명령줄에서 설정할 수 있습니다. 예:

$ gams trnsport iterlim = 100

또한 GAMS 모델 내의 옵션 설명으로 설정할 수 있습니다. 예:

옵션 iterlim = 100;

마지막으로, 모델 속성은 개별 모델에 대한 GAMS 옵션을 설정할 수 있습니다:

mymodel.iterlim = 100;

모델 접미사는 명령줄 매개변수보다 우선하는 옵션 문보다 우선합니다. 옵션을 설정하는 데 이러한 방법을 사용하지 않으면 기본값이 적용됩니다.

또한 모델별 옵션에 값을 할당하여 설정을 해제할 수 있습니다.NA:

mymodel.iterlim = NA;

안타깝게도 모든 옵션이 명령줄 매개변수, 옵션 명령문 및 모델 속성으로 사용될 수 있는 것은 아닙니다. 우리는 참조

슬롯 게임 옵션 파일

슬롯 게임별 옵션을 지정하려면 슬롯 게임 옵션 파일을 사용해야 합니다. 이를 위해서는 두 가지가 필요합니다. 하나는 적절한 이름을 가진 옵션 파일을 생성해야 하고, 다른 하나는 슬롯 게임에게 이 옵션 파일을 읽고 사용하도록 지시해야 합니다.

슬롯 게임에게 옵션 파일을 사용하도록 지시하려면 다음을 설정할 수 있습니다.optfile모델 속성 또는optfile옵션을 양수 값으로 설정합니다. 예를 들어,

모델 mymodel /all/;
mymodel.optfile = 1;
달러를 최대화하는 nlp를 사용하여 mymodel을 해결합니다.

옵션 파일은 사용되는 슬롯 게임에서 이름을 따옵니다:solvername.XYZ, 여기서해결사 이름은 지정된 슬롯 게임의 이름이며 접미사는XYZ값에 따라 다름optfile설정되었습니다. 값이 1이면 접미사는 다음과 같습니다.선택. 예를 들어 CONOPT를 호출할 때 옵션 파일이 호출됩니다.conopt.opt. 문서를 참조하세요.optfile더 많은 정보를 원하시면.

옵션 파일의 형식은 슬롯 게임마다 약간씩 바뀔 수 있습니다. 다음은 옵션 파일 형식의 몇 가지 자주 사용되는 기능을 보여줍니다. 그러나 슬롯 게임는 이 형식과 다를 수 있습니다. 따라서 옵션 파일을 사용하기 전에 슬롯 게임 관련 문서를 확인해야 합니다.

  • 옵션 파일의 빈 줄은 무시됩니다.
  • 댓글 줄은 별표()로 시작할 수 있습니다.*30747_30858
  • 주석이 아닌 각 줄에는 하나의 옵션 사양만 포함되어 있습니다.
  • 많은 슬롯 게임는 옵션 파일의 내용을 로그에 반영합니다. 이 에코는 옵션 라인을 사용하여 억제할 수 있습니다.반향 꺼짐. 에코는 다음 줄로 다시 활성화됩니다.에코 온. 이는 옵션 파일에 많은 수의가 포함된 경우 유용할 수 있습니다.점 옵션또는표시자 제약.
  • 옵션을 지정하는 형식은 다음과 같습니다:
    키워드 [수정자] [값]
    키워드는 하나 이상의 단어로 구성될 수 있으며 대소문자를 구분하지 않습니다. 값은 정수, 실수 또는 문자열일 수 있습니다. 실수는 과학적인 형식(예: 1e-6)으로 표현될 수 있습니다. 모든 옵션에 수정자나 값이 필요한 것은 아닙니다.
  • 키워드 또는 수정자의 철자 오류로 인해 해당 옵션이 오해되어 무시됩니다. 옵션 값에 오류가 있으면 예측할 수 없는 동작이 발생할 수 있습니다. 감지되면 오류가 무시되거나 기본값 또는 제한 값으로 푸시되지만, 모든 오류가 감지될 수 있거나 감지되지는 않습니다.

다음 CPLEX 옵션 파일을 고려하십시오.

* CPLEX 옵션 파일
장벽
크로스오버 2

첫 번째 줄은 별표로 시작하므로 설명이 포함되어 있습니다. 첫 번째 옵션은 선형 계획법 문제를 해결하기 위해 장벽 알고리즘을 사용하도록 지정하고, 두 번째 옵션은 교차 옵션 2를 사용하도록 지정합니다. 이러한 옵션에 대한 자세한 내용은 다음에서 확인할 수 있습니다.CPLEX 옵션 요약.

옵션은 GAMS 소스 코드 내에서 옵션 파일을 생성하여 정의할 수도 있습니다. MINOS 옵션 파일을 사용하려면 다음 코드 조각을 고려하세요.

모델 m /all/;
옵션 NLP = MINOS;
* MINOS 옵션 파일
$onecho > minos.opt
스케일 옵션 2
부분완성
$offecho
m.OptFile = 1;
nlp를 사용하여 z를 최대화하는 m을 해결합니다.

첫 번째 옵션은 스케일 옵션을 값 2로 설정합니다. 이 경우 '스케일 옵션' 키워드는 두 단어로 구성됩니다. 두 번째 줄에서는 '완료' 옵션이 '부분'으로 설정되어 있습니다. 이러한 옵션에 대한 자세한 내용은 다음에서 확인할 수 있습니다.MINOS 옵션 요약.

점 옵션

슬롯 게임 옵션 파일의 도트 옵션을 사용하면 사용자는 변수 및 방정식의 GAMS 이름을 사용하여 값을 변수 및 방정식에 연결할 수 있습니다. 옵션 파일에서 도트 옵션의 일반적인 구문은 다음과 같습니다.

(변수/방정식 이름).옵션 이름(값)

점 옵션을 지정할 수 있습니다.모두, 아차단, a슬라이스그리고단일변수 및 방정식. 특정 점 옵션은 변수나 방정식(예: GAMS/Gurobi 점 옵션)에만 적용될 수 있습니다.이전변수에만 적용됨). 다음 예에서는 도트 옵션의 사용을 명확하게 보여줍니다.

예를 들어, GAMS 선언이 있다고 가정합니다:

i /i1*i5/ 설정;
j /j2*j4/를 설정합니다.
변수 v(i,j);
방정식 e(i,j);

가상의 옵션 이름을 가진 옵션 파일에서 다음 라인을 고려하십시오.도톱트:

옵션 파일의 줄설명
variables.dotopt 1 모든 변수의 값을 다음으로 설정합니다.1
equations.dotopt 2 모든 방정식의 값을 다음으로 설정합니다.2
v.dotopt 3 블록의 변수 값을 설정v3
e.dotopt(*,*) 4 블록의 방정식 값을 설정합니다.e4
v.dotopt(*,'j2') 5 변수 v의 값을 설정합니다.j2두 번째 색인 위치(슬라이스)에서5
e.dotopt('i3',*) 6 다음 방정식 e의 값을 설정합니다.i3첫 번째 색인 위치(슬라이스)에서6
w.dotopt('i2') 7 단일 변수의 값을 설정합니다.v('i2')7
e.dotopt('i3','j3') 8 단일 방정식의 값을 설정합니다.e('i3','i3')8

점 옵션 값은 옵션 파일에 나타나는 순서에 따라 적용됩니다. 현재 예에서는의 값도톱트방정식에 대해e다음과 같습니다:

e.dotopti1i2i3
j24 4 6
j34 4 8
j44 4 6

시작점 및 초기 기준

시작점

NLP의 국소 최적 솔루션을 검색하는 NLP 슬롯 게임는 검색을 시작하기 위한 초기점이 필요합니다. 또한 이 초기점이 국소 최적값에 가까울수록 슬롯 게임에 소요되는 노력이 줄어듭니다. 후자는 대부분의 LP, MIP 슬롯 게임 또는 글로벌 MINLP 슬롯 게임와 같이 전역 최적 솔루션을 검색하는 슬롯 게임에도 해당될 수 있습니다.

시작점의 엄청난 중요성 때문에 GAMS는 항상 시작점을 슬롯 게임에 전달합니다. 기본적으로 GAMS에 의해 전달된 포인트는 의 수준 및 한계 속성에 의해 제공됩니다.변수그리고방정식. 이러한 값이 아직 설정되지 않은 경우 기본값이 사용됩니다. 이 기본값은 경계가 이 값을 금지하는 변수를 제외하고는 0입니다. 이 경우 0에 가장 가까운 경계가 사용됩니다.

GAMS 모델에서 이러한 값을 명시적으로 설정하는 것 외에도 사용자는 다음에서 해당 값을 로드할 수도 있습니다.파일 저장또는 다음을 통한 GDX 포인트 파일execute_loadpoint. 후자는 관련 모델을 실행하고 옵션을 사용하여 생성되었을 수 있습니다.저장점. 또한 여러 개의 해석 문이 있는 모델에서 하나의 해석의 해가 있는 경우 후속 해석의 시작점을 초기화하는 데 사용됩니다. 풀이 문의 해가 변수와 방정식의 수준 및 한계 값에도 저장되므로 이는 자동으로 발생합니다. 마지막으로 모델 속성에 유의하세요.defpoint기본 시작점을 슬롯 게임에 강제로 보내는 데 사용할 수 있습니다.

일부 슬롯 게임, 특히 MIP 또는 MINLP의 경우 시작점을 활용하려면 옵션을 설정해야 할 수도 있습니다. 또한 일부 슬롯 게임는 부분 시작점을 활용하거나 시작점을 검색 가이드로 사용할 수 있는 가능성을 제공합니다. 자세한 내용은 특정 슬롯 게임 매뉴얼을 참조하고 다음과 같은 매개변수를 찾아보세요.밉스타트및 GAMS 매개변수 사용tryint.

초기 기초

일부 슬롯 게임의 경우 시작점 값이 검색을 초기화하는 데 충분하지만 활성 세트 알고리즘은 다른 형태의 시작 정보를 사용합니다. 활성 집합 알고리즘은 실현 가능하거나 최적의 솔루션에서 어떤 제약 조건이 활성화(또는 바인딩)되는지, 즉 어떤 변수가 경계 중 하나에 있고 어떤 방정식에 대해 활동이 우변과 같고 한계가 0이 아닌지 식별하려고 합니다. 예를 들어 선형 계획법의 단순 방법은 활성 집합 알고리즘입니다. 활성 또는 비활성으로 제약 조건을 분류하는 것은 다음과 밀접하게 연결되어 있습니다.기초. 활성 제약조건이 호출됩니다.비기본및 비활성 제약 조건이 호출됩니다.기본. 최적해에서 활성 및 비활성 제약조건을 지정하는 기저를 다음과 같이 부릅니다.최적 기준.

활성 세트 알고리즘은 초기 기초를 추측한 다음 최적의 기초를 찾을 때까지 이 기초를 반복적으로 업데이트하는 것으로 시작할 수 있습니다. 최적의 기준에 대한 좋은 근사치를 식별하여 슬롯 게임에 전달할 수 있으면 솔루션 시간이 크게 단축될 수 있습니다. 이러한 사용자가 제공한 초기 기준을고급 기반. 그러나 선진적인 기반을 제공하는 것이 항상 도움이 되는 것은 아닙니다. 예를 들어, 일부 슬롯 게임에서 사용되는 사전 해결 알고리즘으로 인해 고급 기저가 무시될 수 있습니다. 또한 제공된 고급 기반이 슬롯 게임가 자체 휴리스틱을 사용하여 구성한 것보다 더 나쁠 경우 슬롯 게임의 성능이 저하될 수 있습니다. 마지막으로 모든 알고리즘이 고급 기반 제공으로 이익을 얻는 것은 아닙니다. 인테리어 포인트 알고리즘이 주목할만한 예입니다.

GAMS는 초기점에서 기저를 추출할 수 있는지 또는 추출해야 하는지 제안하기 위해 슬롯 게임에 힌트를 제공합니다. 힌트는 주변값이 0이 아닌 행 수(일명 단일 방정식)와 의 값을 기반으로 합니다.브라티오옵션이며 내부적으로 다음과 같이 계산됩니다.

힌트 := (0 == bRatio) 또는 (rowsWithNonzeroMarg > nRows * bratio)

변수 수준과 한계 값의 설정은 고급 기준을 지정하는 데 중요하지만, 오직행의 한계값기본 힌트 계산 및 값 선택과 관련이 있습니다.브라티오. 예를 들어, 1000개의 행이 있고 기본값은브라티오(0.25), GAMS는 기본이 아닌 행이 250개 이상 존재하는 경우에만 기준을 제안합니다.

기본 시작점(모든 한계값 0)은 일반적으로 초기 기초 구성에 충분하지 않습니다. 하나의 풀이 문에서 다음 풀이 문으로의 자동 전송으로 인해 슬롯 게임의 동작이 불량해지는 경우 옵션을 설정합니다.브라티오to 1은 기초 힌트를 거짓으로 만들고 초기 기초의 사용을 억제합니다. 모델 속성 설정defpoint1 또는 2로 설정하면 동일한 결과를 얻을 수 있습니다. 반대로 설정브라티오0으로 설정하면 기본 힌트가 참이 됩니다.

GAMS의 활성 세트 슬롯 게임는 일반적으로 베이시스 힌트 값을 사용하여 다음에서 사용할 수 있는 고급 베이시스를 추출(및 사용할)할지 여부를 결정합니다.시작점. 세부사항은 슬롯 게임에 따라 다를 수 있지만 일반적으로 다음과 같이 작동합니다.

  • 0 레벨 값을 가진 변수는 0이 아닌 경우에만 기본이 아닌 것으로 제안됩니다.한계값.
  • 레벨 값이 0이 아닌 변수는 레벨 값이 변수 경계 중 하나와 같을 경우 기본이 아닌 것으로 제안됩니다. 여기서도 한계 값을 사용할 수 있습니다. 기본이 아닌 변수는 0이 아닌 한계 값에 해당합니다.
  • 0이 아닌 방정식한계비기본적인 것으로 제안됩니다. 그렇지 않으면 기본으로 제안됩니다.

따라서 사용자는 해당 시작점을 설정하여 초기 기반을 명시적으로 제공하려고 시도할 수 있습니다. 즉, 다음을 지정하여 초기 기준에 대한 추측을 설정할 수 있습니다.

  • 해에서 활성화될 것으로 예측되는 방정식에 대한 0이 아닌 주변값
  • 해의 경계에 있을 것으로 예측되는 변수에 대한 0이 아닌 주변값
  • 해법에서 0이 아닌 것으로 예측되는 변수의 0이 아닌 수준

추적 기능

때때로 특정 해결 문(또는 GAMS 작업)에 대한 특정 정보를 간결하고 사용자 정의 가능한 형식으로 얻는 것이 유용할 수 있습니다.

  • 추적 파일기능을 사용하면 GAMS 작업의 "최종 데이터" 및 포함된 해결 문에 대한 정보가 포함된 파일을 생성할 수 있습니다.
  • 추적 해결시설은 특정 해결 문의 솔루션 진행 상황에 대한 자세한 정보를 제공할 수 있습니다(예: 현재 솔루션의 객관적인 값 또는 5초마다 최상의 이중 바인딩)

추적 파일

추적 파일GAMS 작업의 "최종 데이터" 및 포함된 해결 문에 대한 정보를 포함합니다. 추적 파일 생성은 명령줄 매개변수를 통해 활성화될 수 있습니다.추적(참조아래). 추적 기능은 미리 정의된 여러 형식 지정 옵션을 지원합니다. 즉, 원하는 출력 정보에 따라 다른 형식의 추적 파일을 생성할 수 있습니다. 추적 파일 형식 옵션은 명령줄 매개변수를 통해 설정할 수 있습니다.traceOpt. 추적 파일 헤더는 포함된 내용을 정의합니다.추적 기록및 관련추적 레코드 필드.

참고
  • 추적 정보가 기존 추적 파일에 추가됩니다.기존 추적 파일 형식으로. 즉, 동일한 이름의 이전 추적 파일이 이미 존재하는 경우 모든 새 추적 데이터는 현재 형식에 관계없이 초기 형식으로 추가됩니다.traceOpt값은 실제로 다른 형식을 의미합니다.
  • 추적 파일 헤더를 수정할 수 있습니다. 즉, 사전 정의된 형식을 사용자 정의할 수 있으며 필요에 따라 추적 레코드 필드를 추가하거나 제거할 수 있습니다.

추적 기록

추적 파일에는 다양한 유형의 추적 레코드가 포함될 수 있습니다:

추적 레코드 유형의미
GamsStep AGamsStep은 GAMS 실행 단계를 나타냅니다(단일 GAMS 작업에는 여러 단계의 GAMS 실행이 있을 수 있음). 예를 들어, 다음을 사용하여 생성된 추적 파일은traceopt=0에 대한[TRNSPORT]49175_49453solveLink.
GamsExit GamsExit최종 설명GamsStep.
감스솔브 GamsSolvesolv 문을 참조하는 추적 레코드를 설명합니다. 파일에 여러 개의 풀이 문이 있는 경우 해당 추적 파일은 여러 개를 가질 수 있습니다.GamsSolve기록을 추적합니다.

추적 기록 필드

모든 추적 레코드에 대해 추적 파일에는 다음 목록의 여러 필드가 포함될 수 있습니다.

필드 이름의미
CNS CNS 해결사.
컴퓨터 이름 컴퓨터 이름.
방향 최적화 방향:0=분, 1=최대.
DNLP DNLP 해결사.
EMP EMP 해결사.
ETAlg 해결 알고리즘을 실행하는 데 걸린 경과 시간(해당 모델 속성 참조ETAlg).
ETSolve solv 문을 실행하는 데 걸린 총 경과 시간(해당 모델 속성 참조ETSolve).
ETSolver 슬롯 게임에서만 소요된 경과 시간(해당 모델 속성 참조ETSolver).
GamsCloseDownTime GAMS를 종료하는 데 걸리는 시간(부분적으로는 다음 사항에 따라 다름)명령줄 매개변수) 파일 요약 작성 시간, GDX 파일, (난독화된) 저장 파일, 매개변수 파일을 포함합니다.
GamsCompTime GAMS의 시간컴파일 단계.
GamsElapsedTime GAMS 실행 시작 이후 경과된 시간(초).
GamsElements 개수라벨.
GamsErrorCount 컴파일 및 실행 오류 수.
GamsExecTime GAMS실행 시간.
GamsLineNumber 줄 수. 이는의 줄 수에 해당합니다.에코 인쇄입력 파일의.
GamsReturnCode GAMS 반환 코드.
GamsStartupTime 확인 및 덤프 시간을 포함하여 GAMS를 시작하는 데 걸리는 시간명령줄 매개변수, 특정 내부 데이터 구조 초기화, 작업 파일 로드, 라이센스 파일 읽기.
GamsSymbols 기호 수(또는라고도 함)식별자) 이름 포함내장 함수그리고사전 정의된 기호.
GamsTotalTime 해당 추적 기록의 총 시간. 유형의 추적 레코드에만 적용됩니다.GamsStep그리고GamsExit.
GamsVersionID GAMS 버전 ID가 포함된 문자열, 예:WEX282-282Windows 64비트 버전의 GAMS 28.2용.
입력파일이름 GAMS 모델 파일 이름.
작업 날짜 작업이 시작된 날.
작업 시간 작업이 시작된 시간.
JulianDate 작업 시작 날짜/시간이 포함된 율리우스력 날짜 번호.
LP LP 해결사.
한계 한계의 가용성을 나타냅니다:0=아니요, 1=예.
MCP MCP 해결사.
MINLP MINLP 해결사.
MIP MIP 해결사.
MIQCP MIQCP 슬롯 게임.
ModelGenerationTime 모델 생성 시간. 추적 기록에 해당하는 프로그램 부분의 마지막 모델을 나타냅니다.
모델이름 모델 이름. 추적 기록에 해당하는 프로그램 부분의 마지막 모델을 나타냅니다.
모델상태 모델 상태. 추적 기록에 해당하는 프로그램 부분의 마지막 모델을 나타냅니다.
모델 유형 모델 유형. 추적 기록에 해당하는 프로그램 부분의 마지막 모델을 나타냅니다.
MPEC MPEC 해결사.
NLP NLP 해결.
NumberOfDiscreteVariables 이산형 변수의 수. 추적 기록에 해당하는 프로그램 부분의 마지막 모델을 나타냅니다.
NumberOfDomainViolations 도메인 위반 수(모델 속성 참조domUsd ).
NumberOfEquations 방정식 수. 추적 기록에 해당하는 프로그램 부분의 마지막 모델을 나타냅니다.
NumberOfInstructions 비선형 코드의 길이.
NumberOfIterations 반복 횟수. 추적 기록에 해당하는 프로그램 부분에서 마지막 모델의 해석을 나타냅니다.
NumberOfNodes 노드 수. 추적 기록에 해당하는 프로그램 부분에서 마지막 모델의 해석을 나타냅니다. 일부 트리 검색 알고리즘(예: 분기 및 경계가 사용된 경우)에만 관련됩니다.
NumberOfNonlinearNonZeros 0이 아닌 숫자. 추적 기록에 해당하는 프로그램 부분의 마지막 모델을 나타냅니다.
NumberOfNonZeros 변수의 수. 추적 기록에 해당하는 프로그램 부분의 마지막 모델을 나타냅니다.
NumberOfVariables 변수의 수. 추적 기록에 해당하는 프로그램 부분의 마지막 모델을 나타냅니다.
목표값 목표 값. 추적 기록에 해당하는 프로그램 부분에서 마지막 모델의 해석을 나타냅니다.
목표값추정 혼합 정수 모델(최상의 경계라고도 함)에 대한 최상의 솔루션 추정입니다. 추적 기록에 해당하는 프로그램 부분에서 마지막 모델의 해석을 나타냅니다.
옵션파일 슬롯 게임 옵션 파일번호. 추적 기록에 해당하는 프로그램 부분에서 마지막 모델의 해석을 나타냅니다.
플랫폼 플랫폼 ID, 예:WEXWindows 64비트용.
QCP QCP 해결사.
RMINLP RMINLP 해결사.
RMIP RMIP 해결사.
RMIQCP RMIQCP 해결사.
RMPEC RMPEC 해결사.
솔브라인 추적 기록에 해당하는 프로그램 부분의 마지막 해결 문의 줄 번호. 이는의 줄 번호에 해당합니다.에코 인쇄입력 파일의.
해결번호 특정 모델에 대한 해석 문의 수. 예를 들어,myModelA 해결...; myModelB를 해결하세요...; myModelA를 해결하세요...;해결 숫자 결과1, 1, 2.
SolverCalcTime 함수 및 미분 계산에 소요된 시간(더 이상 사용되지 않음, 모델 속성도 참조)resCalc).
SolverElapsedTime 다음 경우에 슬롯 게임가 소요한 경과 시간solveLink=0이 사용됩니다(모델 속성과 거의 동일함ETSolver).
슬롯 게임ID 해결사 ID 번호.
해결사 이름 슬롯 게임의 이름. 추적 기록에 해당하는 프로그램 부분에서 마지막 모델의 해석을 나타냅니다.
SolverReadTime 모델을 가져올 시간(더 이상 사용되지 않음, 모델 속성도 참조)resIn).
SolverRealTime 다음 경우에 슬롯 게임가 소요한 경과 시간solveLink=0이 사용됩니다(모델 속성과 거의 동일함ETSolver).
SolverSignature 슬롯 게임 서명이 포함된 문자열, 예:IBM ILOG CPLEX 28.2.0 r750fa45 2019년 8월 19일 출시 WEI x86 64bit/MS Window. 추적 기록에 해당하는 프로그램 부분에서 마지막 모델을 해결하는 데 사용되는 슬롯 게임를 말합니다.
해결자 상태 해결자 상태. 추적 기록에 해당하는 프로그램 부분에서 마지막 모델의 해석을 나타냅니다.
슬롯 게임타임 슬롯 게임가 보고한 모델을 해결하는 데 사용된 시간(초)(모델 속성 참조resUsd).
슬롯 게임 버전 슬롯 게임 버전(모델 속성 참조sysVer).
SolverWriteTime 솔루션을 내보낼 시간입니다(더 이상 사용되지 않음, 모델 속성 참조resOut).
사용자1 내용사용자1문자열.
사용자2 내용사용자2문자열.
사용자3 내용사용자3문자열.
사용자4 내용사용자4문자열.
사용자5 내용사용자5문자열.
사용자 이름 사용자 이름.

추적 보고서

GAMS는 생성할 수 있습니다추적 보고서from추적 파일, 명령줄 매개변수로 시작된 경우동작=gt. 다음 명령 순서는 모델을 로드합니다.[TRNSPORT]GAMS 모델 라이브러리에서 실행trnsport.gms추적 파일을 생성합니다trc.txt, 추적 보고서와 추적 파일의 추적 요약을 생성합니다.

$ gamslib trnsport
$ gams tnsport 추적=trc.txt
$ gams trc.txt a=gt

추적 파일 trc.txt기본값 포함추적 레코드 필드에 대한GamsStep그리고GamsSolve 추적 기록:

* 추적 레코드 정의
* 감스스텝
* JobDate JobTime 입력파일 이름 GAMS GamsVersionID GamsReturnCode GamsErrorCount GamsStartupTime GamsCompTime GamsExecTime GamsCloseDownTime GamsTotalTime "User1"
* 감스솔브
* JobDate 작업 시간 입력FileName 모델 유형 SolverName Solver상태 모델Status SolveNumber SolveLine SolverID SolverVersion NumberOfEquations NumberOfVariables NumberOfNonZeros NumberOfNonlinearNonZeros NumberOfInstructions
* NumberOfIterations ModelGenerationTime SolverReadTime SolverCalcTime SolverWriteTime ObjectiveValue "User1"
*
09/25/19 07:04:00 trnsport.gms GAMS WEX282-282 1 0 0.015 0 0 0.016 0.031 ""
09/25/19 07:04:00 trnsport.gms LP CPLEX 1 1 1 64 23 NA 6 7 19 0 0 4 0 NA NA NA 153.675 ""
09/25/19 07:04:00 trnsport.gms GAMS WEX282-282 0 0 0 0 0 0 0 ""

추적 요약 trc.sum추적 기록에 대한 요약 정보가 포함되어 있습니다:

[...]\trc.txt에 대한 TL=0인 추적 요약
추적 레코드 = 3, 오류 레코드 = 0, 첫 번째 날짜 = 09/25/19 07:04:00

추적 보고서다음에 생성됨trc.lst그리고 다음을 포함하여 기본 추적 파일의 추적 레코드에 대한 자세한 정보를 포함합니다.ModelSolveStat다음의 모든 잠재적 조합에 0부터 9까지의 점수를 할당하는 행렬모델 상태그리고해결사 상태:

[...]
파일에 대한 추적 보고서: [...]\trc.txt

TL=0에 ModelSolveStat 사용

      1 2 3 4 5 6 7 8 9 10 11 12 13
   1 9 .  .  .  .  .  .  .  .  .  .  .  .
   2 9 9 9 9 9 .  .  9 .  .  .  .  .
   3 9 .  .  .  .  .  .  .  .  .  .  .  .
   4 9 .  .  .  .  .  .  .  .  .  .  .  .
   5 9 .  .  .  .  .  .  .  .  .  .  .  .
   6 .  5 5 5 5 .  .  5 .  .  .  .  .
   7 9 9 9 9 9 .  .  9 .  .  .  .  .
   8 9 9 9 9 9 .  .  9 .  .  .  .  .
   9 .  5 5 5 5 .  .  5 .  .  .  .  .
  10 9 .  .  .  .  .  .  .  .  .  .  .  .
  11 .  .  .  .  .  .  5 .  .  .  .  .  .
  12 .  .  .  .  .  .  .  .  .  .  3 .  3
  13 .  .  .  .  .  .  .  .  3 3 .  3 .
  14 4 4 4 4 4 6 .  4 .  .  .  3 .
  15 9 .  .  .  .  .  .  .  .  .  .  .  .
  16 9 .  .  .  .  .  .  .  .  .  .  .  .
  17 9 .  .  .  .  .  .  .  .  .  .  .  .
  18 9 .  .  .  .  .  .  .  .  .  .  .  .
  19 9 .  .  .  .  .  .  .  .  .  .  .  .

표시된 추적 기록은 다음과 같습니다.

기록 날짜 시간 파일 이름 유형 해결자 메시지
        * 추적 레코드 정의
        * 감스스텝
        * JobDate JobTime 입력파일 이름 GAMS GamsVersionID GamsReturnCode GamsErrorCount GamsStartupTime GamsCompTime GamsExecTime GamsCloseDownTime GamsTotalTime "User1"
        * 감스솔브
        * JobDate 작업 시간 입력FileName 모델 유형 SolverName Solver상태 모델Status SolveNumber SolveLine SolverID SolverVersion NumberOfEquations NumberOfVariables NumberOfNonZeros NumberOfNonlinearNonZeros NumberOfInstructions
        * NumberOfIterations ModelGenerationTime SolverReadTime SolverCalcTime SolverWriteTime ObjectiveValue "User1"
        *

첫 번째 타임스탬프 = 09/25/19 07:04:00
마지막 타임스탬프 = 09/25/19 07:04:00

총 추적 기록 = 3
총 댓글 기록 = 7

총 GAMS 레코드 = 2개의 모든 반환 코드

                          1 RC= 0 정상 완료
                          1 RC= 1 실행 중인 하위 시스템

시간(초) 총 평균
   시작 0.01 0.01
   컴파일 0.00 0.00
   실행 0.00 0.00
   폐쇄 0.02 0.01
   합계 0.03 0.02

총 SOLVE 레코드 = 1 모든 반환 코드

      solvstatus 1 RC= 1 1 정상 완료

      modelstatus 1 RC= 1 1 최적

숫자 총 평균
   방정식 6 6.00
   변수 7 7.00
   0이 아닌 19 19.00
     비선형 0 0.00
   명령 0 0.00
   방정식 6 6.00
시간(초) 총 평균
   세대 0.00 0.00
   입력 0.00 0.00
   계산 0.00 0.00
   출력 0.00 0.00
   총 해결 0.00 0.00

SOLVESTAT 교차표

             1 2 3 4 5 6 7 8 9 10 11 12 13 ~
     LP 1 .    .    .    .    .    .    .    .    .    .    .    .      1
  합계 1 0 0 0 0 0 0 0 0 0 0 0 0 1

MODELSTAT 교차표

             1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 ~
     LP 1 .    .    .    .    .    .    .    .    .    .    .    .    .    .    .    .    .    .      1
  합계 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 1

GTRACE 시간 = 0.000초 검증 WEX282-282
[...]

추적 보고서는 기본 추적 파일에 다양한 해결 명령문의 여러 추적 기록이 포함되어 있는 경우 특히 흥미로울 수 있습니다. 명령줄 매개변수와 결합하여추적레벨, 필터링하기 쉽습니다GamsSolve낮은 기록을 추적ModelSolveStat점수, 즉 바람직하지 않은 조합모델 상태그리고해결자 상태. 우리가 달리면[TRNSPORT]다시 반복 제한을 0으로 설정하고(위의 예에서 추적 정보가 추적 파일에 추가된다는 점을 기억하세요) 다음과 같이 추적 보고서를 다시 생성하세요.

$ gams tnsport 추적=trc.txt iterlim=0
$ gams trc.txt a=gt

추적 보고서에는 두 개의 해결 기록과 획득된 상태가 표시됩니다.

총 SOLVE 레코드 = 2 모든 반환 코드

      solvstatus 1 RC= 1 1 정상 완료
      solvstatus 1 RC= 2 2 반복 인터럽트

      modelstatus 1 RC= 1 1 최적
      modelstatus 1 RC= 6 6 중간 실행 불가능

한 번 보세요ModelSolveStat76878_77087추적레벨5보다 크거나 같은 값으로 설정하고 추적 보고서를 다시 생성합니다. 를 통해

$ gams trc.txt a=gt 추적 수준=5

ModelSolveStat추적 보고서 시작 부분의 매트릭스가 허용되는 모델 및 슬롯 게임 상태 조합에 대해 5보다 큰 점수만 표시되도록 변경됩니다.

TL=5에 대해 ModelSolveStat 사용

      1 2 3 4 5 6 7 8 9 10 11 12 13
   1 9 .  .  .  .  .  .  .  .  .  .  .  .
   2 9 9 9 9 9 .  .  9 .  .  .  .  .
   3 9 .  .  .  .  .  .  .  .  .  .  .  .
   4 9 .  .  .  .  .  .  .  .  .  .  .  .
   5 9 .  .  .  .  .  .  .  .  .  .  .  .
   6 .  .  .  .  .  .  .  .  .  .  .  .  .
   7 9 9 9 9 9 .  .  9 .  .  .  .  .
   8 9 9 9 9 9 .  .  9 .  .  .  .  .
   9 .  .  .  .  .  .  .  .  .  .  .  .  .
  10 9 .  .  .  .  .  .  .  .  .  .  .  .
  11 .  .  .  .  .  .  .  .  .  .  .  .  .
  12 .  .  .  .  .  .  .  .  .  .  .  .  .
  13 .  .  .  .  .  .  .  .  .  .  .  .  .
  14 .  .  .  .  .  6 .  .  .  .  .  .  .
  15 9 .  .  .  .  .  .  .  .  .  .  .  .
  16 9 .  .  .  .  .  .  .  .  .  .  .  .
  17 9 .  .  .  .  .  .  .  .  .  .  .  .
  18 9 .  .  .  .  .  .  .  .  .  .  .  .
  19 9 .  .  .  .  .  .  .  .  .  .  .  .

GAMS에서 실행 오류가 발생함

--- 추적 보고서 생성 시작
*** 상태: 실행 오류

추적 보고서와 결합된 추적 파일 기능은 특정 예상 결과를 감사해야 하는 자동화된 품질 보증 테스트에 특히 유용할 수 있습니다.

추적 해결

정확한 성능 평가를 수행하려면 "최종 데이터"보다 해결에 대한 더 자세한 정보를 얻는 것이 유용할 수 있습니다.추적 파일제공합니다. 예를 들어, 분기 및 경계 기반 슬롯 게임의 경우 검색 내의 루트 노드와 후속 노드에서 원시 및 이중 경계 값에 대한 중간 정보를 원할 수 있습니다.

추적 해결일부 GAMS 슬롯 게임 인터페이스에 구현된 옵션을 통해 사용자는 모든 경우에 대해 원초 및 이중 경계와 같은 해결 정보를 출력할 수 있습니다.n노드 또는 모든 시간 단계에서. 예를 들어 사용자는 기존 솔루션의 객관적인 값이나 50개 노드마다 및 해결의 5초마다 최적값에 대한 최상의 이중 경계에 관심이 있을 수 있습니다.

참고
추적 파일 형식 및 옵션은 향후 GAMS 릴리스에서 변경될 수 있습니다.

추적 해석 옵션은 GAMS 해석 옵션 파일을 통해 호출됩니다. 일반적으로 생성할 추적 파일의 파일 이름을 지정하는 옵션과 시간 및 노드 간격을 지정하는 옵션을 사용할 수 있습니다. 이러한 옵션의 정확한 이름은 GAMS 슬롯 게임 매뉴얼을 참조하세요(검색)solvetrace또는miptrace).

해결 추적 파일은 쉼표로 구분된 값(CSV) 형식으로 작성되었으며, 각 줄의 항목은 다음과 같은 의미를 갖습니다:

열 이름의미
lineNum 라인 인덱스
시리즈ID 줄이 작성된 이유 표시: S = 검색 시작, N = 노드 빈도, T = 시간 빈도, E = 검색 끝
노드 열거된 분기 및 바인딩 노드 수
해결이 시작된 이후의 시간
bestFound 원초 경계, 즉 기존 솔루션의 객관적인 값
최고의 경계 이중 경계, 즉 최적 값에 경계

MIP 모델을 사용한 GAMS 실행 통계를 포함한 샘플 해석 추적 파일[주사위]그리고 슬롯 게임 XPRESS는 다음과 같습니다:

* miptrace 파일 miptrace.mtr: ID = XPRESS.1 인스턴스 = 주사위
* 필드는 lineNum, seriesID, node, second, bestFound, bestBound입니다.
1, S, 1, 0.078, 나, 나
2, N, 101, 0.781, 21, 23.9369
3, N, 201, 0.875, 21, 23.5564
4, N, 304, 1.031, 21, 23.5564
5, E, 399, 1.094, 21, 21
* miptrace 파일 miptrace.mtr이 닫혔습니다.

프레젠테이션 슬라이드도 참조하세요GAMS 슬롯 게임 링크의 고급 사용(2013) 및동반 스크립트솔브 트레이스 기능으로 수행할 작업에 대한 몇 가지 아이디어입니다.

분기 및 절단 및 휴리스틱 기능(BCH)

전역 검색 알고리즘은 때때로 어려운 최적화 문제의 해결 프로세스를 지원하는 사용자 제공 루틴으로부터 상당한 이점을 얻을 수 있습니다. 예를 들어 분기 및 절단 슬롯 게임(예: CPLEX, Gurobi, SCIP, Xpress)는 사용자 제공을 통해 이익을 얻을 수 있습니다.절단면또는좋은 실행 가능한 솔루션. GAMS 사용자는 위반 가능성이 있는 컷과 초기 솔루션을 나타내는 제약 조건 세트를 추가하여 슬롯 게임에 제공되는 모델의 일부로 이를 제공할 수 있습니다(아마도 다음과 같은 GAMS 매개변수와 결합).tryint및 다음과 같은 슬롯 게임 관련 옵션CPLEX의 밉스타트). 그러나 이는 실행 중인 슬롯 게임와 사용자 제공 루틴(예: 절단 평면 또는 실행 가능한 솔루션을 구성하기 위해 현재 완화 솔루션을 사용함) 간의 동적 상호 작용을 허용하지 않습니다. GAMS BCH(Branch-and-Cut-and-Heuristic) 기능은 특정 슬롯 게임가 제공하는 콜백을 GAMS 사용자가 사용할 수 있도록 만드는 데 필요한 모든 주요 단계를 자동화하려고 시도합니다. 이를 통해 GAMS 사용자는 특정 슬롯 게임의 내부 작동에 대한 자세한 지식이 없어도 복잡한 솔루션 전략을 적용할 수 있습니다.

현재 단 두 개의 슬롯 게임만이 BCH 기능을 지원합니다:CPLEX그리고SBB. GAMS/CPLEX를 사용하면 원시 휴리스틱 및 컷 생성을 구현하는 사용자 제공 GAMS 프로그램을 사용할 수 있습니다. SBB를 사용하면 원초적 휴리스틱만 가능합니다.

이름에서 알 수 있듯이 BCH 시설은 분기 및 절단 슬롯 게임(예: CPLEX, Gurobi, SCIP, Xpress)의 해결 프로세스를 염두에 두고 설계되었습니다. 이러한 슬롯 게임에서는 B&B(분기 및 경계) 트리의 노드가 처리된 후 사용자 제공 루틴을 호출할 수 있는 경우가 많습니다. 해당 루틴 내에서 해당 노드 및 현재 재직자(있는 경우)의 완화 솔루션(종종 LP 또는 NLP)과 같은 사용 가능한 정보는 BCH 시설에 의해 aGDX 파일원래 GAMS 네임스페이스를 사용합니다. 다음으로, 예를 들어 완화 솔루션(컷 생성기)에 의해 위반되는 컷을 찾거나 새로운 기존 솔루션(원초적 경험적 방법)을 찾기 위해 다양한 사용자 제공 GAMS 프로그램을 호출할 수 있습니다. 이러한 GAMS 프로그램은 GDX 파일에서 정보를 가져와서 계산을 수행해야 합니다. 종료 후 BCH 시설은 제어를 재개하고 GAMS 프로그램에서 결과를 읽고 이를 슬롯 게임에 전달합니다.

휴식 솔루션을 파일로 내보낼 수 있습니다.bchout.gdxBCH 시설에 의해. 이 GDX 파일은 변수 값을 레벨 값으로 포함할 뿐만 아니라(.l), 변수 경계(.lo그리고.up). B&B 슬롯 게임의 경우 이는 이 노드의 로컬 경계입니다. 따라서 이는 B&B 트리에서 이루어진 분기 결정과 슬롯 게임가 추론한 경계 조임을 반영합니다. 비슷한 방식으로 BCH 시설은 기존 솔루션을 GDX 파일로 내보낼 수 있습니다.bchout_i.gdx. 기존 솔루션의 경계는 전역 경계, 즉 슬롯 게임에 의해 강화될 수 있는 원래 경계를 반영합니다. GDX 파일은 컴파일 시간을 사용하여 GAMS 프로그램으로 가져올 수 있습니다.$로드또는 런타임execute_load.

BCH 시설은 슬롯 게임의 특정 옵션을 설정하여 활성화되고 제어됩니다.옵션 파일. 옵션의 정확한 이름과 의미는 슬롯 게임마다 다를 수 있습니다. 따라서 해당 GAMS 슬롯 게임 매뉴얼도 확인해야 합니다. BCH 기능과 함께 제공되는 옵션을 사용하여 사용자 GAMS 프로그램의 호출을 정의하고, 호출해야 하는 시기를 결정하고, (이름 충돌을 피하기 위해) GDX 파일의 파일 이름을 덮어쓸 수 있습니다. 일반 BCH 관련 옵션은 다음과 같습니다.

이름설명기본값
UserGDXIn 슬롯 게임로 다시 읽어온 GDX 파일의 이름입니다.bchin.gdx
사용자GDX이름 노드의 솔루션과 함께 슬롯 게임에서 내보낸 GDX 파일의 이름.bchout.gdx
UserGDXNameInc 기존 솔루션과 함께 슬롯 게임에서 내보낸 GDX 파일의 이름.bchout_i.gdx
UserGDXPrefix 추가할 접두어UserGDXIn, 사용자GDX이름UserGDXNameInc 비어있음
사용자 작업 ID 목록 및 로그 파일 이름에 추가할 접미사UserGDXIn, 사용자GDX이름UserGDXNameInc. 더 나아가,--UserJobID사용자 GAMS 프로그램 호출에 추가됩니다.비어있음
UserKeep 사용자에게 GAMS 프로그램을 호출합니다.감킵대신에게임. 의 사용감킵명령줄 옵션과 유사한 스크래치 디렉토리를 보존합니다계속 0

다음에는 사용 가능한 콜백에 대한 인터페이스가 더 자세히 설명되어 있으며 해당 옵션이 나열되어 있습니다.

원초적 휴리스틱

원초적 휴리스틱 콜백에서 사용자는 슬롯 게임가 제공한 정보(예: 현재 완화 솔루션 및 현재 기존 솔루션)를 기반으로 실행 가능한 솔루션을 구성하려고 시도하는 GAMS 프로그램을 제공할 수 있습니다. 따라서 GAMS 프로그램은 완화 솔루션의 실행 불가능성을 수정하거나 슬롯 게임의 기존 솔루션을 개선하려고 시도할 수 있습니다.

GAMS 프로그램이 새로운 솔루션을 찾으면 이를 원래 변수에 해당하는 변수의 레벨 값에 저장해야 합니다. 예를 들어 원래 모델이 이진 변수를 사용하는 경우열기(i,t), 그런 다음 GAMS 프로그램이 끝나면open.l(i,t)은 0(영) 또는 1(1)을 포함해야 합니다. BCH 기능은 GAMS 프로그램을 호출하고 종료 시 결과를 GDX 파일에 저장하도록 GAMS에 지시합니다. 그런 다음 이 GDX 파일은 BCH 기능에 의해 다시 읽혀지고 솔루션은 슬롯 게임로 다시 전달됩니다. 슬롯 게임는 이 솔루션의 실현 가능성을 확인하고, 이 확인이 통과되어 솔루션이 가장 잘 알려진 솔루션보다 나은 경우 슬롯 게임는 기존 솔루션을 업데이트합니다.

GAMS 프로그램이 실행 가능한 솔루션을 찾을 수 없는 경우 다음에 의해 실행 오류가 발생하여 종료될 수 있습니다.중단 명령문BCH 기능이 경험적 실행 결과를 읽지 못하도록 방지합니다.

원초적 경험적 호출을 제어하는 BCH 매개변수는 일반적으로 다음과 같습니다:

이름설명기본값
UserHeurFreq 휴리스틱 호출의 빈도를 결정합니다.10
UserHeurMult 경험적 호출 빈도에 대한 승수를 결정합니다.2
UserHeurInterval 휴리스틱 호출 빈도에 대한 승수를 적용할 간격을 결정합니다. 예를 들어 처음 100(UserHeurInterval) 노드, 슬롯 게임는 10번째마다 휴리스틱을 호출합니다(UserHeurFreq) 노드. 100개 노드 이후에는 빈도에 10을 곱합니다(UserHeurMult), 다음 100개 노드에 대해 슬롯 게임는 20번째 노드마다 휴리스틱을 호출합니다. 노드 200~300의 경우 휴리스틱은 40번째 노드마다 호출되고, 노드 300~400의 경우 80번째 노드마다, 노드 400 이후에는 100번째 노드마다 호출됩니다.100
UserHeurFirst 휴리스틱을 호출해야 하는 첫 번째 노드 수에 대해.10
UserHeurObjFirst 비슷함UserHeurFirst, 그러나 현재 노드 완화의 최적 값이 현재 기존 노드의 상당한 개선을 약속하는 경우 휴리스틱을 호출해야 하는 첫 번째 노드 수에 대해 구체적으로 설명합니다. 즉, 노드에서 완화의 최적 값은 현재 원시 경계보다 현재 이중 경계에 더 가까워야 합니다.슬롯 게임에 따라 다름
UserHeurNewInt 슬롯 게임가 새로운 실행 가능한 솔루션을 찾았을 때 휴리스틱을 호출할지 여부.아니요
UserHeurCall 경험적 GAMS 프로그램을 호출하기 위한 GAMS 호출에 대한 인수.비어 있음

예를 들어, 석유 파이프라인 네트워크 설계 문제의 경우 GAMS 프로그램에서 원시 휴리스틱을 호출하는 BCH 옵션bchoil_h.incGAMS/CPLEX를 사용할 때

userheurcall bcoil_h.inc mip cplex optcr 0 reslim 10
userheurfirst 5
사용자 주파수 20
userheurinterval 1000

절단면

컷 생성기 콜백에서 사용자는 완화 솔루션에 의해 위반되는 선형 컷(즉, 선형 부등식)을 찾으려고 시도하는 GAMS 프로그램을 제공할 수 있습니다. 그런 다음 슬롯 게임는 이러한 컷을 해당 부분에 추가합니다.컷 풀. 일반적으로 노드의 이완을 해결하고 절단 생성기를 다시 호출합니다. 절단 평면이 발견되지 않으면 슬롯 게임는 예를 들어 다음 노드를 처리하여 계속됩니다. 슬롯 게임는 제공된 컷에 대해 유효성 검사를 수행할 수 없습니다. 따라서 최적해를 포함하여 실현가능한 영역의 영역을 잘라내는 것이 가능하다.

컷 내보내기는 컷 계수 옆에 컷 불평등의 의미와 오른쪽도 내보내야 하기 때문에 솔루션보다 조금 더 복잡합니다. 또한 한 번의 호출로 여러 컷을 내보낼 수 있어야 합니다. 이를 위해 GAMS 프로그램은 세트를 정의하고 채워야 합니다.cc및 매개변수numcuts, rhs_c(cc)sense_c(cc)적절하게. 세트cc컷 인덱스로 사용됩니다. 실제로 생성된 컷 수보다 클 수 있습니다.

참고
절단 인덱스 세트의 요소는 1부터 시작하는 일련의 정수를 형성해야 합니다(1, 2, 3,...).

매개변수numcuts추가 컷 수를 지정해야 합니다.rhs_c(cc)각 컷의 오른쪽을 저장해야 합니다. 마지막으로,sense_c(cc)각 컷의 의미를 저장해야 하며, 이는 낮은 같음(≤)의 경우 1, 같음의 경우 2(=, 컷의 경우 다소 특이함), 더 큰 같음(≥)의 경우 3이어야 합니다. GAMS 코드의 해당 선언은 다음과 같습니다.

$set MaxCut 100
cc '컷' 설정 / 1 * %MaxCuts% /;
매개변수 numcuts '추가할 컷 수' / 0 /
           rhs_c(cc) 'rhs 잘라내기'
           sense_c(cc) '컷의 센스';

빠진 유일한 것은 절단 계수입니다. 둘 이상의 컷을 반환하는 것이 가능해야 하므로 레벨 값과 같은 변수 속성을 사용하는 것만으로는 충분하지 않습니다. 따라서 컷의 일부인 각 변수에 대해 GAMS 프로그램에 새 매개변수를 추가해야 합니다. 매개변수의 이름은 추가가 포함된 해당 변수의 이름이어야 합니다._c마지막에. 또한 매개변수는 변수처럼 색인화되어야 하지만 시작 부분에 절단 색인 세트 cc가 추가됩니다. 예를 들어 변수를 가정합니다.열기(i,t)컷의 일부여야 합니다. 그런 다음 절단 계수를 매개변수에 저장해야 합니다.open_c(cc,i,t), 예:

매개변수 open_c(cc,i,t) '컷 cc의 변수 open(i,t) 계수';

BCH 기능은 다음으로 끝나는 모든 매개변수를 읽습니다._c, 기본 이름을 가져와 해당 이름과 인덱스가 있는 변수를 찾고 절단 행렬을 구성합니다. 컷은 모델에 새로운 변수를 도입할 수 없습니다. 모델에 추가된 모든 컷은 다음과 같이 가정됩니다.글로벌 삭감, 즉 현재 노드뿐만 아니라 전체 문제에 대해 유효해야 합니다.

컷 생성 호출을 제어하는 BCH 매개변수는 일반적으로 다음과 같습니다:

이름설명기본값
UserCutFreq 컷 생성기 호출 빈도를 결정합니다.10
UserCutMult 컷 생성기 호출 빈도에 대한 승수를 결정합니다.2
UserCutInterval 컷 생성기 호출 빈도에 대한 승수를 적용할 간격을 결정합니다. 참조UserHeurInterval자세한 내용은.100
UserCutFirst 첫 번째 n 노드에 대한 절단 생성기를 호출합니다.10
UserCutNewInt 슬롯 게임가 새로운 정수 실현 가능 솔루션을 찾은 경우 컷 생성기를 호출할지 여부.아니요
UserCutCall 컷 생성기 GAMS 프로그램을 호출하기 위한 GAMS 호출에 대한 인수.비어있음

예를 들어, 송유관 네트워크 설계 문제의 경우 GAMS 프로그램에서 컷 생성기를 호출하는 BCH 옵션bcchoil_c.incGAMS/CPLEX를 사용할 때

usercutcall bcoil_c.inc 밉 cplex
유저컷퍼스트 0
사용자컷주파수 0
usercutnewint 예

현재 콜백

해석자가 현재를 개선하는 새로운 실행 가능한 솔루션을 찾았을 때 기존 콜백을 사용하여 GAMS 프로그램을 실행할 수 있습니다. 또한 현직 확인 콜백UserIncbCall주어진 실행 가능한 솔루션을 슬롯 게임가 수락해야 하는지 여부를 슬롯 게임에게 알리는 데 사용할 수 있습니다. 이를 통해 최적의 솔루션이 이미 발견된 경우에도 슬롯 게임가 추가 솔루션을 검색하도록 강제하는 필터링 메커니즘을 구현할 수 있습니다. 또한 콜백UserLazyConCall재직자를 찾은 후 게으른 제약 조건을 추가할 수 있습니다.

다음 매개변수는 기존 콜백을 제어합니다.

이름설명기본값
UserIncbCall 현재 검사 GAMS 프로그램을 호출하기 위한 GAMS 호출에 대한 인수입니다. GAMS 프로그램이 정상적으로 종료되면 재직자는 거부됩니다. 컴파일 또는 실행 오류가 있는 경우 기존이 수락됩니다.비어 있음
UserIncbICall 현재 보고 GAMS 프로그램을 호출하기 위한 GAMS 호출에 대한 인수입니다.비어있음
UserLazyConCall GAMS 프로그램을 추가하는 지연 제약 조건을 호출하기 위한 GAMS 호출에 대한 인수입니다. GAMS 프로그램이 정상적으로 종료되면 기존을 차단하는 게으른 제약 조건이 예상됩니다(UserCutCall과 유사한 형식). 컴파일 또는 실행 오류가 있는 경우 기존이 수락됩니다.비어있음

GAMS 모델 라이브러리에는 BCH 기능 사용 방법을 보여주는 몇 가지 예가 포함되어 있습니다.

적절한 해결사 선택

GAMS 문제 클래스(LP, MCP, MINLP, ...)의 경우 모든 문제 인스턴스에 가장 적합한 해결사는 없습니다. 아래에는 슬롯 게임 선택 또는 슬롯 게임 비교에 대한 경험 법칙에 대한 몇 가지 링크가 제공됩니다.

MINOS와 CONOPT의 상대적 장점

MINOS와 CONOPT 중에서 선택하는 방법

특정 모델을 해결하는 것이 얼마나 어려운지 예측하는 것은 거의 불가능합니다. 어떤 슬롯 게임를 사용할지 알아내는 가장 좋고 신뢰할 수 있는 방법은 두 가지를 모두 시험해 보는 것입니다. 그러나 몇 가지 경험 법칙이 있습니다.

CONOPT매우 비선형 제약 조건이 있는 모델에 적합합니다. MINOS가 최적화 중에 타당성을 달성하는 데 문제가 있는 경우 CONOPT를 시도해야 합니다. 반면, 모델에 목적 함수 외부의 비선형성이 거의 없다면,MINOS 및 QUADMINOS아마도 최고의 해결사일 겁니다.

CONOPT는 자유도가 낮은 모델에 특히 적합한 첫 번째 실행 가능한 솔루션을 찾는 빠른 방법을 제공합니다. 즉, 변수 수가 제약 조건 수와 거의 동일합니다. 즉, 거의 정사각형인 모델입니다. 이러한 경우 CONOPT는 MINOS보다 성능이 뛰어나고 방정식보다 변수가 더 많은 모델의 경우 MINOS가 더 적합할 수 있습니다.

CONOPT에는 재귀 방정식과 변수를 풀고 모델에서 제거하는 전처리 단계가 있습니다. 많은 방정식을 하나씩 풀 수 있는 모델이 있는 경우 CONOPT는 이 속성을 활용합니다. 마찬가지로, 목적 함수 항을 정의하는 데만 사용되는 중간 변수는 모델에서 제거되고 제약 조건은 목적 함수로 이동됩니다.

CONOPT에는 많은 내장 테스트가 있습니다(예: 불량한 확장을 감지하기 위한 테스트). 모델러가 개선할 수 있는 많은 모델은 건설적인 메시지와 함께 거부됩니다. 따라서 CONOPT는 생산 실행에 다른 슬롯 게임를 사용하더라도 모델 개발 중에 유용한 진단 도구입니다.

진지한 NLP 모델러가 MINOS와 CONOPT를 모두 보유해야 하는 이유

특정 모델을 해결하는 것이 얼마나 어려운지 예측하는 것은 거의 불가능합니다. 그러나 두 개의 슬롯 게임가 있는 경우 둘 다 시도해 볼 수 있습니다. 전반적인 신뢰성이 향상되고 예상 해결 시간이 단축됩니다.

196개의 크고 어려운 모델의 테스트 세트에서 많은 모델이 제대로 확장되지 않았거나 초기 값이 없었으며 14개 모델에서 MINOS와 CONOPT가 모두 실패했습니다. 그러나 MINOS와 CONOPT 모두에서 4개만 실패했습니다. 따라서 결합된 슬롯 게임 세트의 신뢰성은 개별 슬롯 게임보다 훨씬 좋습니다.

MINOS가 실패한 잘못 구성된 모델의 많은 예가 관찰되었습니다. CONOPT는 많은 모델을 거부했지만 문제의 원인을 정확히 찾아내는 진단 메시지를 제공했습니다. CONOPT에서 제안한 변경 사항을 통합한 후 MINOS와 CONOPT 모두 모델을 해결할 수 있었습니다. 초기 모델 구축 및 디버깅 단계에서 두 슬롯 게임 간을 전환하면 모델 공식화를 개선하는 데 유용한 정보를 얻을 수 있는 경우가 많습니다.

PATH 대 MILES

이 문서는 MCP 슬롯 게임 간의 몇 가지 차이점을 설명합니다.경로그리고마일. MILES는 GAMS/BASE 모듈과 함께 제공되는 무료 슬롯 게임인 반면, PATH는 별도로 요금이 부과되는 선택적 슬롯 게임입니다.

PATH 및 MILES는 혼합 비선형 상보성 문제(MCP)를 해결할 수 있는 두 가지 GAMS 슬롯 게임입니다. 두 슬롯 게임 모두 순차 선형 상보성 알고리즘을 기반으로 합니다. 즉, 둘 다 솔루션이 일반적으로 MCP 솔루션으로 수렴하는 일련의 선형 혼합 상보성 문제를 해결합니다. 각 선형 하위 문제(주요 반복)를 해결하기 위해 두 코드 모두 선형 계획법의 단순 방법으로 생성된 것과 유사한 일련의 피벗(보조 반복)을 기반으로 하는 Lemke로 인한 알고리즘의 일반화를 사용합니다. 이러한 피벗을 효율적으로 수행하기 위해 두 코드 모두 동일한 희소 선형 대수 패키지를 사용합니다.

위의 유사성으로 인해 두 코드의 성능은 많은 "쉬운" 모델에서 비슷합니다. 그러나 광범위한 문제를 살펴보면 PATH는 일반적으로 MILES보다 빠르고 강력합니다. 두 코드 모두 GAMSLIB의 모든 MCP 및 MPSGE 모델을 해결하지만 PATH는 CPNET에 있는 MCPLIB 테스트 컬렉션에서 MILES보다 훨씬 뛰어난 성능을 발휘합니다.

가장 정교한 MCP 및 MPSGE 모델러는 MILES보다 PATH를 사용하는 것을 선호합니다. PATH에는 선형 하위 문제 해결을 시작하기 전에 사용자가 지정한 시작점을 빠르게 개선할 수 있는 충돌 방식이 있습니다. 이로 인해 해결 시간이 단축되는 경우가 많습니다. PATH는 근위 섭동에 기반한 기술을 사용하여 "단일" 모델을 자동으로 수정하려고 시도합니다. 많은 경우 이를 통해 선형 하위 문제를 해결하여 모델 솔루션을 얻을 수 있습니다. 이는 일반적으로 모델 개발 시 모델러에게 도움이 됩니다.

PATH에는 어려운 모델을 해결할 수 있는 더 많은 솔루션 옵션이 있습니다. 코드는 다시 시작 절차를 사용하여 어려운 문제에 대해 유용한 옵션을 자동으로 시도합니다. PATH에는 일반적으로 속도와 견고성을 향상시키는 훨씬 더 정교한 "세계화" 절차가 있습니다. PATH는 비단조 감시 기술을 구현합니다. 해결책을 향해 더 큰 조치를 취할 수 있도록 함으로써 지연을 피하는 경우가 많습니다.

PATH에는 모델의 문제를 발견하는 데 도움이 되는 더 많은 진단 기능이 있습니다. 특히 모델의 특이점, 0개의 행과 열, 여러 가지 최적성 측정값이 사용자에게 반환됩니다. 이론적으로 PATH는 MILES보다 더 나은 수렴 속성을 갖습니다. 특히, 새로운 장점 함수는 보다 안정적이고 빠른 수렴을 가능하게 하는 것으로 알려져 있습니다.