pf4minlp.gms : 정수 변수(MINLP)에 대한 +INF의 상한 테스트

설명

피망 슬롯 23.1에서는 피망 슬롯 매개변수 PF4가 도입되어 기본값을 수정했습니다.
정수 변수의 상한:

 Pf4=0: +INF의 새로운 기본 상한이 솔버에 전달됩니다.
 Pf4=1: +INF 대신 100 값이 솔버에 전달됩니다. 는
        솔버는 이전 피망 슬롯 버전과 마찬가지로 작동합니다. 추가 메시지
        로그 및 목록에 기록되어 개수를 보고합니다.
        새로운 기본 경계를 갖는 정수 또는 반정수 변수
        +INF는 100으로 재설정됩니다.
 PF4=2: +INF의 새로운 기본값이 PF4=0과 마찬가지로 사용됩니다. 언제
        해는 피망 슬롯로 반환되고 정수 변수의 수준 값이 반환됩니다.
        이전 제한 값인 100을 초과하면 메시지가 로그에 기록됩니다.
        그리고 목록.
 PF4=3: PF4=2와 동일하며 다음과 같은 경우 추가 실행 오류가 발생합니다.
        솔루션은 모든 정수 변수에 대해 100보다 큰 수준 값을 보고합니다.
        기본 경계는 +INF입니다.

이 간단한 테스트는 솔버가 PF4=0에서 올바르게 작동하는지 확인합니다.

기고자: Lutz Westermann, 2013년 1월

소형 모델 유형 :MINLP


카테고리 : 피망 슬롯 테스트 라이브러리


메인 파일 : pf4minlp.gms

$title '제한 없는 정수 변수 테스트(MINLP)' (PF4MINLP,SEQ=597)

$onText
피망 슬롯 23.1에서는 기본값을 수정하기 위해 피망 슬롯 매개변수 PF4가 도입되었습니다.
정수 변수의 상한:

 Pf4=0: +INF의 새로운 기본 상한이 솔버에 전달됩니다.
 Pf4=1: +INF 대신 100 값이 솔버에 전달됩니다. 는
        솔버는 이전 피망 슬롯 버전과 마찬가지로 작동합니다. 추가 메시지
        로그 및 목록에 기록되어 개수를 보고합니다.
        새로운 기본 경계를 갖는 정수 또는 반정수 변수
        +INF는 100으로 재설정됩니다.
 PF4=2: +INF의 새로운 기본값이 PF4=0과 마찬가지로 사용됩니다. 언제
        해는 피망 슬롯로 반환되고 정수 변수의 수준 값이 반환됩니다.
        이전 제한 값인 100을 초과하면 메시지가 로그에 기록됩니다.
        그리고 목록.
 PF4=3: PF4=2와 동일하며 다음과 같은 경우 추가 실행 오류가 발생합니다.
        솔루션은 모든 정수 변수에 대해 100보다 큰 수준 값을 보고합니다.
        기본 경계는 +INF입니다.

이 간단한 테스트는 솔버가 PF4=0에서 올바르게 작동하는지 확인합니다.

기고자: Lutz Westermann, 2013년 1월
$offText

$설정되지 않은 경우 TOL $set TOL 1e-6

$onEcho > test.gms
스칼라 rhs;
변수 z;
정수 변수 y;
방정식 a,b;

a.. z =e= y;
b..y =l= rhs;
모델 m /all/;

$offEcho

$if not '%피망 슬롯minlp%' == '' $echo 옵션 MINLP = %피망 슬롯minlp%; >> 테스트.gms

$onEcho >> test.gms
rhs = 150;
m max z를 풀려면 minlp를 사용하세요.
abort$(abs(z.l-150) > %TOL%) '목표 값은 150이어야 합니다.', z.l;

rhs = 200.5;
m max z를 풀려면 minlp를 사용하세요.
abort$(abs(z.l-200) > %TOL%) '목표 값은 200이어야 합니다.', z.l;

y.lo = -inf;
rhs = -41.1;
m max z를 풀려면 minlp를 사용하세요.
if( m.solvestat = %solveStat.capabilityProblems%가 아님,
  abort$(abs(z.l+42) > %TOL%) '목표 값은 -42여야 합니다.', z.l;
);
$offEcho

* pf4가 0으로 설정된 경우 모든 것이 작동하는지 확인하십시오.
$call 피망 슬롯 test.gms lo=%피망 슬롯lo% pf4=0 iterlim=%피망 슬롯iterlim% reslim=%피망 슬롯reslim%
$if errorlevel 1 $abort test.gms에 오류가 있습니다! test.lst를 확인하세요!