목차
카디널 옵티마이저by Cardinal Operations는 혼합 정수 선형 및 2차 계획법 문제를 해결하는 솔루션입니다.
사용법
GAMS와 함께 배포되는 GAMS/크레이지 슬롯 인터페이스를 사용하려면 GAMS/크레이지 슬롯 또는 GAMS/크레이지 슬롯-Link 라이센스가 필요합니다. GAMS/크레이지 슬롯-Link 라이선스만 사용할 수 있는 경우 별도의 크레이지 슬롯 라이선스도 시스템에 설치해야 합니다. 자세한 내용은 "Cardinal Operations 사용자 가이드"를 참조하세요.
크레이지 슬롯를 사용하여 지정하기 위해 GAMS 프로그램 내에서 다음 명령문을 사용할 수 있습니다.
옵션 MIP = 크레이지 슬롯; 또는 LP, QCP, MIQCP, ...
위 문은 Solve 문 앞에 나타나야 합니다. GAMS 설치 중에 크레이지 슬롯가 기본 솔버로 지정된 경우 위의 설명은 필요하지 않습니다.
크레이지 슬롯는 특수 순서 집합(SOS)을 지원하지만 반연속 또는 반정수 변수는 지원하지 않습니다.
크레이지 슬롯 옵션 사양
다음 GAMS 매개변수는 현재 GAMS/크레이지 슬롯에서 지원됩니다:리슬림, iterlim, 노들림, optcr, optca, tryint그리고스레드.
추가 옵션은 솔버 옵션 파일을 통해 설정할 수 있습니다. 섹션을 참조하세요.솔버 옵션 파일24963_25028크레이지 슬롯opt:
트리컷레벨 0 단순스레드 4
크레이지 슬롯는 루트 노드(MI(QC)P 해석의 경우)에서만 컷 생성기를 사용하고 단순 알고리즘에서 4개의 스레드를 사용하도록 지정합니다.
지표 사양
지표는 특정 이진 변수가 지정된 값을 취하는 경우에만 모델의 특정 방정식이 충족되어야 함을 지정하는 모델링 도구입니다. 표시기는 GAMS 언어에서 지원되지 않지만 GAMS/크레이지 슬롯 솔버 옵션 파일을 통해 크레이지 슬롯로 전달될 수 있습니다. 참조표시 제약 조건구문에 대한 자세한 내용을 확인하세요.
MIP 시작점
MIP를 해결할 때 기본적으로 GAMS 모델에서 변수 수준으로 지정된 모든 값은 크레이지 슬롯의 시작점으로 전달됩니다.MipStartMode= 0). 단, GAMS 옵션인 경우tryint0이 아닌 값으로 설정되었거나MipStartMode= 2, 소수가 최대 값인 이진 및 정수 변수의 값만tryint는 크레이지 슬롯의 시작점으로 전달됩니다(가능한 분수 값은 정수로 반올림됩니다). 그런 다음 크레이지 슬롯는 실현 가능한 솔루션에 대한 부분 솔루션을 완성하려고 노력할 것입니다.
솔루션 풀
크레이지 슬롯가 문제를 해결할 때 여러 가지 해결책을 찾을 수 있으며 그 중 가장 좋은 해결책만 GAMS 모델의 변수 수준 값을 통해 GAMS 사용자에게 제공됩니다. 옵션인 경우solnpool가 지정되면 크레이지 슬롯에서 찾은 모든 대체 솔루션이 GDX 파일에 기록되고 이 옵션으로 지정된 이름의 인덱스 파일이 기록됩니다. 옵션인 경우solnpoolmerge이 지정되면 크레이지 슬롯에서 찾은 모든 대체 솔루션이 이 옵션으로 이름이 지정되는 단일 GDX 파일에 기록됩니다.
GAMS testlib 모델덤솔이 옵션의 사용 예를 보여줍니다.
실행 불가능하고 제한되지 않은 LP
LP가 크레이지 슬롯에 의해 실행 불가능하다고 판단되면 Farkas 증명 형태의 원초 실행 불가능 인증서(또한 참조모세크 매뉴얼)이 계산됩니다. GAMS/크레이지 슬롯 링크는 방정식 한계 값으로 이 인증서의 값을 반환하고INFES마커(참조솔루션 목록27851_27913
LP가 크레이지 슬롯에 의해 제한되지 않은 것으로 발견되면 원시 광선 형태의 이중 실행 불가능 인증서가 계산됩니다. 문제가 실현 가능하다면 원초 광선은 목적 함수가 무한히 향상될 수 있는 방향을 제시합니다. GAMS/크레이지 슬롯 링크는 변수 수준 값 및 세트의 원시 광선 값을 반환합니다.UNBND마커(참조솔루션 목록) 광선에 포함된 변수에 대한 것입니다.
크레이지 슬롯 옵션ReqFarkasRay이러한 실행 불가능 인증서 계산을 비활성화하는 데 사용할 수 있습니다.
제약조건의 축소할 수 없는 불일치 하위 시스템(IIS) 찾기
LP 또는 MIP가 실행 불가능한 경우 크레이지 슬롯는 실행 불가능한 제약 조건의 하위 집합을 식별하고 제약 조건 중 하나가 제거되면 실행 가능해지는 기능을 갖습니다. 옵션iisIIS를 찾는 데 사용할 수 있습니다.
예를 들어 다음을 포함하는 GAMS 모델을 고려해보세요.
양수 변수 x, y;
방정식 e1;
e1.. x + y =l= -1;
해당 크레이지 슬롯 출력은 다음과 같습니다.iis1로 설정되었습니다.
1개의 스레드를 사용하여 심플렉스 솔버 시작
메소드 반복 목적 Primal.NInf Dual.NInf 시간
듀얼 0 0.0000000000e+00 1 0 0.00s
해결 완료
상태: 실행 불가능 목표: - 반복: 0 시간: 0.00s
LP에 대한 IIS 계산 시작
반복 Min RowBnd Max RowBnd Min ColBnd Max ColBnd Time
0 0 1 0 2 0.00초
1 0 1 0 2 0.00초
2 1 1 0 2 0.00초
3 1 1 1 2 0.00초
4 1 1 2 2 0.00초
IIS 요약: 행 1개, 열 경계 2개
IIS 계산 완료(0.000초)
IIS는 최소입니다.
IIS의 방정식 수: 1
상한: e1 <= -1
IIS의 변수 수: 2
하한: x >= 0
하한: y >= 0즉, 크레이지 슬롯는 문제가 실현 불가능하다고 판단합니다. 그런 다음 IIS 계산이 시작되고 IIS가 발견됩니다. 그런 다음 IIS가 로그 및 목록 파일에 인쇄됩니다. 변수의 하한으로 구성됩니다.x그리고y및 방정식e1. 이는 의 하한을 낮춤으로써 전체 모델을 실현 가능하게 만들 수 있음을 시사합니다.x또는y또는 오른쪽을 늘려e1.
문제가 실행 불가능하다는 것을 미리 알고 있다면 옵션iis초기 해석을 건너뛰려면 2로 설정할 수 있습니다.
타당성 완화 사용
타당성 완화는 다음에 의해 활성화됩니다.FeasRelax크레이지 슬롯 솔버 옵션 파일의 매개변수.
FeasRelax 옵션을 사용하면 크레이지 슬롯는 가중치가 부여된 페널티 함수가 최소화되는 방식으로 실행 불가능한 모델 인스턴스의 변수 경계와 제약 측면을 선택적으로 완화합니다. 본질적으로, 실현 가능한 완화는 실현 가능성을 달성할 수 있는 최소한의 변화를 제안하려고 합니다. 실행 불가능한 솔루션을 GAMS에 반환하고 목록 파일의 솔루션 섹션에 있는 INFES 마커를 사용하여 경계 및 제약 조건의 완화를 표시합니다.
- 주의
- 현재 크레이지 슬롯는 선형 제약 조건의 측면만 완화할 수 있습니다. 표시 및 2차 제약 조건은 완화를 위해 고려되지 않습니다.
기본적으로 모든 방정식 변은 완화 대상이며 동일하게 가중치가 부여되지만 변수 경계 중 어느 것도 완화될 수 없습니다. 이 기본 동작은 완화 기본 설정을 변수 경계 및 제약 조건에 할당하여 수정할 수 있습니다. 이러한 기본 설정은 다음을 사용하여 편리하게 지정할 수 있습니다.점 옵션 feaspref. 기본 설정이 0이라는 것은 연관된 경계 또는 제약 측면이 수정되지 않음을 의미합니다. 가중 페널티 함수는 이러한 선호도를 바탕으로 구성됩니다. 선호도가 클수록 주어진 변수 경계 또는 제약 조건이 완화될 가능성이 높아집니다. 그러나 각 경계 또는 범위에 대해 고유한 기본 설정을 지정할 필요는 없습니다. 실제로 문제에 대한 지식이 명시적인 선호도 할당을 제안하는 경우를 제외하고는 0(영)과 1(1) 값만 사용하는 것이 일반적입니다.
기본 설정은 크레이지 슬롯 솔버 옵션 파일을 통해 지정할 수 있습니다. 구문은 다음과 같습니다.
(변수 또는 방정식)
.feaspref(값)
예를 들어, GAMS 선언이 있다고 가정해 보겠습니다:
i /i1*i5/ 설정;
j /j2*j4/를 설정합니다.
변수 v(i,j); 방정식 e(i,j);
그러면, 휴식 선호도는크레이지 슬롯opt파일은 다음으로 지정할 수 있습니다:
feasrelax 1
v.feaspref 1
v.feaspref('i1',*) 2
v.feaspref('i1','j2') 0
e.feaspref(*,'j1') 0
e.feaspref('i5','j4') 2먼저 우리는 가능한 이완을 켭니다. 또한 모든 변수를 지정합니다.v(i,j)설정 요소보다 변수를 제외하고 1을 선호합니다.i1, 선호도는 2입니다. 집합 요소보다 변수i1그리고j2기본 설정 0이 있습니다. 기본 설정은 나중에 할당된 기본 설정이 이전 기본 설정을 덮어쓰도록 절차적 방식으로 할당됩니다. 위에서 설명한 것과 같이 방정식에 기본 설정을 할당하는 데에도 동일한 구문이 적용됩니다. 모델의 모든 변수 또는 방정식에 기본 설정을 할당하려면 키워드를 사용하세요.변수또는방정식개별 변수 및 방정식 이름 대신(예:변수.feaspref 1).
매개변수FeasRelaxMode한 단계 또는 두 단계에서 실행 가능한 이완을 찾는 다양한 전략을 허용합니다. 첫 번째 단계에서는 실현 불가능한 모델의 완화를 최소화하려고 시도합니다. 즉, 최소한의 변화만 필요로 하는 실행 가능한 솔루션을 찾으려고 시도합니다. 두 번째 단계에서는 첫 번째 단계에서 필요하다고 판단한 만큼만 완화가 필요한 솔루션 중에서 최적의 솔루션(원래 목표 사용)을 찾습니다. FeasRelaxMode 매개변수의 값은 두 가지 측면을 나타냅니다. (1) 1단계에서 중지할지 아니면 2단계를 계속할지 여부와 (2) 이완을 측정하는 방법(합계필요한 휴식; 으로번호완화해야 하는 제약 조건과 경계; 으로제곱의 합필요한 휴식). 모델도 확인하세요feasopt1GAMS 모델 라이브러리에 있습니다.
매개변수 조정 도구
크레이지 슬롯 튜닝 도구는 런타임 또는 기타 품질 측정을 향상시키는 설정을 검색하면서 각 실행에 대해 서로 다른 매개변수 설정을 선택하여 모델 인스턴스에 대해 여러 해결을 수행합니다. 실행 기간이 길어질수록 상당한 개선이 이루어질 가능성이 높아집니다. 매개변수 조정 도구의 제한 사항에 대한 참고 사항은 다음을 참조하세요.GAMS/구로비 매뉴얼.
수조정 관련 매개변수튜닝 도구의 작동을 제어할 수 있습니다. 튜닝을 활성화하려면 옵션조정설정이 필요합니다. 의 값조정은 솔버 링크에 의해 작성된 옵션 파일 이름의 접두어로 사용됩니다. 튜닝에 소요되는 시간은 옵션으로 제어할 수 있습니다.TuneTimeLimit. 옵션조정 모드그리고TuneMeasure해결 시간 또는 최적 값의 경계를 조정 시간에 대한 품질 측정으로 사용해야 하는지 여부를 지정할 수 있습니다.
GAMS/크레이지 슬롯 옵션 파일에 설정된 옵션은 고정 매개변수로 간주되며 조정 도구에 의해 변경되지 않습니다. GAMS/크레이지 슬롯 링크는 일부 크레이지 슬롯 옵션의 기본값을 변경하므로 수정된 매개변수에 대한 로그를 확인하세요.
옵션 사용 중TuneParams, 조정해야 하는 매개변수가 포함된 크레이지 슬롯 옵션 파일을 지정할 수 있습니다. 이 매개변수 파일은 크레이지 슬롯에서 직접 읽으므로 해당 구문이 GAMS/크레이지 슬롯 솔버 옵션 파일 중 하나와 다를 수 있습니다. 파일은 각 매개변수 이름에 대해 여러 값을 허용합니다. 예를 들어, 파일에 다음 줄이 포함되어 있는 경우루트컷레벨 0 1 2 3그리고트리컷레벨 0 1 2 3, 그러면 튜너는 지정된 인스턴스에 대한 절단면 생성량만 최적화합니다. 만일TuneParams설정되지 않은 경우 튜너가 자동으로 튜닝 매개변수 세트를 생성합니다.
조정 도구가 성능을 향상시키는 하나 이상의 매개변수 세트를 발견한 경우, 이는 다음 이름의 파일에 기록됩니다.<조정>.<idx>, 여기서조정옵션의 값입니다조정그리고idx매개변수 세트의 색인입니다. 최고의 성능을 내는 매개변수 세트에는 색인이 있습니다.000. 튜닝 도구를 사용하는 경우 GAMS/크레이지 슬롯는 솔루션을 반환하지 않습니다. 조정은 타당성 완화와 같은 다른 고급 기능과 동시에 사용할 수 없습니다.
그래픽 처리 장치(GPU) 사용
크레이지 슬롯의 1차 LP 방법 PDLP는 Linux 및 Windows 시스템에서 NVIDIA GPU를 사용할 수 있습니다. 그렇게 하려면 다음 단계를 수행해야 합니다.
- 옵션Lp메소드PDLP 솔버를 선택하려면 6으로 설정되어야 합니다.
- CUDA 12 라이브러리시스템에 설치해야 합니다. GAMS 배포에는 포함되지 않습니다. 또한 크레이지 슬롯는 런타임에 CUDA 라이브러리를 찾을 수 있어야 하며 이는 환경 변수를 설정하여 보장할 수 있습니다.
LD_LIBRARY_PATHLinux 또는 환경 변수 보강PATHWindows의 경우.
PDLP 솔버가 실행되면 크레이지 슬롯는 CUDA 라이브러리와 호환 가능한 GPU 장치를 찾았는지 여부를 로그에 표시합니다. CUDA 또는 NVIDIA GPU를 찾을 수 없는 경우 PDLP는 CPU만 사용하도록 대체합니다. 옵션GPU모드GPU 사용을 강제하거나 비활성화하는 데 사용할 수 있습니다. 옵션GPU장치GPU가 여러 개인 경우 GPU를 선택하는 데 사용할 수 있습니다.
GPU 사용은 현재 PDLP 방법에만 사용할 수 있습니다.
크레이지 슬롯 옵션 목록
다음에서는 사용 가능한 크레이지 슬롯 옵션의 자세한 목록을 제공합니다.
한도 및 공차
| 옵션 | 설명 | 기본값 |
|---|---|---|
| AbsGap | MIP의 절대 격차 범위: [0, ] | GAMS optca |
| BarIterLimit | 장벽 반복 제한 범위: 0, ..., 무한대 | GAMS iterlim |
| 듀얼톨 | 이중 솔루션에 대한 내성 및 비용 절감 범위: [1e-09, 0.0001] | 1e-06 |
| FeasTol | 타당성 공차 범위: [1e-09, 0.0001] | 1e-06 |
| IntTol | 정수 타당성 공차 범위: [1e-09, 0.1] | 1e-06 |
| 매트릭스톨 | 입력 행렬 계수 허용오차 범위: [0, 1e-07] | 1e-10 |
| 노드 제한 | MIP 노드 제한 범위: -1, ..., 무한대 | GAMS 노들림 |
| PDLPTol | 1차 방법(PDLP)에 대한 수렴 허용오차 범위: [1e-12, 0.0001] | 1e-06 |
| RelGap | MIP의 상대적 격차 범위: [0, ] | GAMS optcr |
| SolTimeLimit | 원초적인 실현 가능한 솔루션을 찾은 후에만 유효한 시간 제한 범위: [0, 1e+20] | 1e+20 |
| 시간 제한 | 최적화 시간 제한 범위: [0, 1e+20] | GAMS 리슬림 |
Presolving 및 Scaling
LP 해결
MIP 해결
| 옵션 | 설명 | 기본값 |
|---|---|---|
| 충돌 분석 | 충돌 분석 수행 여부 -1: 자동. 0: 아니요. 1: 예. | -1 |
| 컷레벨 | 절단면 생성 수준 -1: 자동. 0: 꺼짐. 1: 빠릅니다. 2: 정상입니다. 3: 공격적입니다. | -1 |
| DivingHeur레벨 | 다이빙 휴리스틱 수준 -1: 자동. 0: 꺼짐. 1: 빠릅니다. 2: 정상입니다. 3: 공격적입니다. | -1 |
| FAPHeur레벨 | 수정 및 전파 휴리스틱 수준 -1: 자동. 0: 꺼짐. 1: 빠릅니다. 2: 정상입니다. 3: 공격적입니다. 4: 매우 공격적입니다. | -1 |
| Heur레벨 | 휴리스틱 수준 -1: 자동. 0: 꺼짐. 1: 빠릅니다. 2: 정상입니다. 3: 공격적입니다. | -1 |
| 선형화지표 | 표시 제약 조건의 강제 선형화 0: 표시기 제약조건의 선형화를 강제하지 마십시오. 1: 모든 표시기 제약 조건의 선형화를 강제합니다. 활성화된 경우 모든 표시기 제약 조건은 동등한 선형 제약 조건으로 변환됩니다. | 0 |
| 선형화Sos | SOS 제약의 강제 선형화 0: SOS 제약조건의 선형화를 강제하지 마세요. 1: 모든 SOS 제약조건의 선형화를 강제합니다. 활성화되면 모든 SOS 제약조건이 동등한 선형 제약조건으로 변환됩니다. | 0 |
| MipRepair | 숫자 문제가 있는 경우 MIP 솔루션을 복구하기 위한 수준(-1: 남은 시간에만, 0: 꺼짐, >0 시간 제한 연장) 범위: -1, ..., 3 | -1 |
| MipStartMode | MIP 시작 모드 지정 -1: 자동. 0: MIP 시작을 비활성화합니다. 1: 전체적이고 실행 가능한 MIP 시작만 사용하세요. 2: subMIP를 해결하여 부분적으로 실행 가능한 MIP 시작을 완료해 보세요. | -1, ifGAMS 시도= 0, 그렇지 않으면 2 |
| MipStartNodeLimit | MIP 시작 하위 MIP에 대한 노드 제한(부분 MIP 시작을 완료하기 위해)(-1: 무제한) 범위: -1, ..., 무한대 | -1 |
| NodeCutRounds | 로컬 노드의 최대 컷 라운드 범위: -1, ..., 무한대 | -1 |
| PreRootHeur레벨 | 루트 전 휴리스틱 수준 -1: 자동. 0: 꺼짐. 1: 빠릅니다. 2: 정상. 3: 공격적입니다. | -1 |
| 루트컷레벨 | 루트 절단면 생성 수준 -1: 자동. 0: 꺼짐. 1: 빠릅니다. 2: 정상. 3: 공격적입니다. | -1 |
| RootCutRounds | 루트의 최대 절단 라운드(-1: 무제한) 범위: -1, ..., 무한대 | -1 |
| 반올림Heur레벨 | 반올림 휴리스틱 수준 -1: 자동. 0: 꺼짐. 1: 빠릅니다. 2: 정상. 3: 공격적입니다. | -1 |
| 강한 분기 | 강한 분기 수준 -1: 자동. 0: 꺼짐. 1: 빠릅니다. 2: 정상. 3: 공격적입니다. | -1 |
| SubMipHeur레벨 | 하위 MIP 휴리스틱 수준 -1: 자동. 0: 꺼짐. 1: 빠릅니다. 2: 정상. 3: 공격적입니다. | -1 |
| 트리컷레벨 | 나무 절단면 생성 수준 -1: 자동. 0: 꺼짐. 1: 빠릅니다. 2: 정상. 3: 공격적입니다. | -1 |
NLP 해결
| 옵션 | 설명 | 기본값 |
|---|---|---|
| MipNLPIterLimit | MIP 솔버 내에서 NLP 문제를 해결하기 위한 반복 제한(-1: 제한 없음) 범위: -1, ..., 무한 | 100 |
| NLPIterLimit | NLP 문제 해결을 위한 반복 제한 범위: 0, ..., 무한대 | GAMS iterlim |
| NLPLinScale | 비선형 솔버의 선형 시스템 스케일링 전략 -1: 자동으로 선택하세요. 0: 확장이 없습니다. 1: 항상 확장됩니다. | -1 |
| NLPMu업데이트 | 비선형 솔버의 장벽 매개변수 업데이트 전략 -1: 자동으로 선택합니다. 0: 단조롭게 감소합니다. 1: 적응형 조정. | -1 |
| NLPTol | 비선형 프로그래밍에 대한 최적의 상대 허용오차 범위: [1e-13, 0.001] | 1e-08 |
| 비볼록형 | 비볼록 문제를 해결할지 여부 -1: 자동으로 선택하세요. 0: 비볼록성을 보고하고 종료합니다. 1: 로컬 최적 솔루션을 검색합니다. 2: 전역 최적 솔루션을 검색합니다. | -1 |
멀티스레딩
| 옵션 | 설명 | 기본값 |
|---|---|---|
| 바스레드 | 장벽 해결에 사용할 스레드 수 범위: -1, ..., 128 | -1 |
| 크로스오버스레드 | 크로스오버에 사용할 스레드 수 범위: -1, ..., 128 | -1 |
| 밉태스크 | MIP 해결의 병렬 작업 수(-1: 자동) 범위: -1, ..., 256 | -1 |
| 심플렉스스레드 | 심플렉스 솔버에 사용할 스레드 수 범위: -1, ..., 128 | -1 |
| 스레드 | 사용할 스레드 수(-1:자동, 0:1스레드) GAMS 스레드 = 0은 크레이지 슬롯 스레드의 기본값을 -1로 설정합니다. 즉, 크레이지 슬롯가 사용할 프로세서 수를 선택하도록 합니다. 범위: -1, ..., 128 | GAMS 스레드 |
타당성 분석
매개변수 조정
기타
| 옵션 | 설명 | 기본값 |
|---|---|---|
| 로그레벨 | 해결 정보의 로그 수준 2: 기본 최적화 로그를 인쇄합니다. 3: 기본 최적화 로그 외에 메모리 사용량 정보를 인쇄합니다(MIP 문제의 경우). | 2 |