lazy01.gms : 게으른 제약 조건 테스트

설명

이 모델은 도트 옵션 .lazy를 통해 지연 제약 조건을 테스트합니다.

MIP 솔루션 프로세스가 시작될 때 Lazy가 적용되는 모든 제약 조건은
속성은 Gurobi의 경우 1, 2 또는 3, Cplex의 경우 1로 설정됩니다(기본값은
0)이 모델에서 제거되어 지연 제약 조건 풀에 배치됩니다. 게으른
제약조건은 실행 가능한 솔루션이 발견될 때까지 비활성 상태로 유지됩니다.
솔루션은 게으른 제약 조건 풀과 비교하여 확인됩니다. 해결책이라면
게으른 제약 조건을 위반하면 솔루션이 삭제되고 다음 중 하나 이상이 발생합니다.
위반된 지연 제약 조건은 활성 모델로 당겨집니다.

Gurobi: 이 속성의 값이 클수록 제약 조건이 적용됩니다.
모델이 좀 더 공격적으로 값이 1이면 제약 조건을 사용하여 다음을 수행할 수 있습니다.
실행 가능한 해결책을 잘라내지만, 다른 해결책이 있다면 반드시 끌어들일 필요는 없습니다.
게으른 제약 조건도 솔루션을 차단합니다. 값이 2이면 모두 게으르다.
실행 가능한 솔루션에 의해 위반되는 제약 조건은
모델. 값이 3이면 완화 솔루션을 차단하는 게으른 제약 조건
끌려가기도 합니다.

기고자: Michael Bussieck, 2014년 12월

소형 모델 유형 :슬롯 무료체험


카테고리 : 슬롯 무료체험 테스트 라이브러리


메인 파일 : lazy01.gms

$title 지연 제약 조건 테스트(LAZY01,SEQ=671)

$onText
이 모델은 도트 옵션 .lazy를 통해 게으른 제약 조건을 테스트합니다.

MIP 솔루션 프로세스가 시작될 때 Lazy가 적용되는 모든 제약 조건은
속성은 Gurobi의 경우 1, 2 또는 3, Cplex의 경우 1로 설정됩니다(기본값은
0)이 모델에서 제거되어 지연 제약 조건 풀에 배치됩니다. 게으른
제약조건은 실행 가능한 솔루션이 발견될 때까지 비활성 상태로 유지됩니다.
솔루션은 게으른 제약 조건 풀과 비교하여 확인됩니다. 해결책이라면
게으른 제약 조건을 위반하면 솔루션이 삭제되고 다음 중 하나 이상이 발생합니다.
위반된 지연 제약 조건은 활성 모델로 당겨집니다.

Gurobi: 이 속성의 값이 클수록 제약 조건이 적용됩니다.
모델이 좀 더 공격적으로 값이 1이면 제약 조건을 사용하여 다음을 수행할 수 있습니다.
실행 가능한 해결책을 잘라내지만, 다른 해결책이 있다면 반드시 끌어들일 필요는 없습니다.
게으른 제약 조건도 솔루션을 차단합니다. 값이 2이면 모두 게으르다.
실행 가능한 솔루션에 의해 위반되는 제약 조건은
모델. 값이 3이면 완화 솔루션을 차단하는 게으른 제약 조건
끌려가기도 합니다.

기고자: Michael Bussieck, 2014년 12월
$offText

$ifThenI %system.mip% == 구로비 $set 솔버 구로비
$elseIfI %system.mip% == 구로비올드 $set 솔버 구로비올드
$elseIfI %system.mip% == cplex $set 솔버 cplex
$else
$abort '%solver%에는 게으른 제약조건을 사용할 수 없습니다.'
$endIf

$call gamslib -q 큐브
$onEcho >> Cube.gms
abort$(cube.solvestat<>1 또는 (cube.modelstat<>1 및 Cube.modelstat<>8)) '잘못된 모델/solvestatus', Cube.modelstat, Cube.solvestat;
abort$(abs(num.l-4)>1e-4) '잘못된 숫자.l', num.l;
$offEcho

$ifThenI %solver% == 구로비
$onEcho > gurobi.opt
게으른 제약 예
ldef.lazy 3
$offEcho
$elseIfI %solver% == 구로비올드
$onEcho > gurobiold.opt
게으른 제약 예
ldef.lazy 3
$offEcho
$elseIfI %solver% == 복잡함
$onEcho > cplex.opt
게으른 제약 예
ldef.lazy 1
$offEcho
$endIf

$call 슬롯 무료체험 큐브 lo=2 mip=%solver% optfile=1
$if errorlevel 1 $abort '큐브에 문제가 있습니다. Cube.lst'를 검사하세요.

* Lazy Constraints를 사용했는지 확인하세요.
$ifThenI %solver% == 구로비
$call grep "추출된 .* 게으른 제약 조건" Cube.log > %system.nullfile%
$elseIfI %solver% == 구로비올드
$call grep "추출된 .* 게으른 제약 조건" Cube.log > %system.nullfile%
$elseIfI %solver% == 복잡함
$call grep "문제에 .* 게으른 제약 조건이 포함되어 있습니다." Cube.log > %system.nullfile%
$endIf
$if errorlevel 1 $abort '솔버가 게으른 제약 조건을 추출하지 않았습니다.'