설명
테스트 =e= 표시기 제약. 기고자: Steve Dirkse, 2011년 11월
소형 모델 유형 :MIP
카테고리 : 슬롯 테스트 라이브러리
메인 파일 : indic02.gms
$title =e= 표시기 제약 조건 테스트(INDIC02,SEQ=542)
$onText
=e= 표시기 제약 조건을 테스트합니다.
Steve Dirkse 제공, 2011년 11월
$offText
이진변수 b;
양의 변수 x, y;
변수 z;
방정식
객체
e0 'b=0이면 켜짐'
e1 'b=1이면 켜짐'
useB 'b를 모델에 포함시키는 간단한 방정식'
;
obj.. z =e= x + y;
e0..y =e= -1.5*x + 4.5;
e1..y =e= -2 *x + 5;
useB..b =L= 1;
모델 m / 모두 /;
$onEcho > copt.o99
인도식 e0$b 0
인도어 e1$b 1
$offEcho
$onEcho > cplex.o99
인도식 e0$b 0
인도어 e1$b 1
$offEcho
$onEcho > gurobi.o99
인도식 e0$b 0
인도어 e1$b 1
$offEcho
$onEcho > gurobiold.o99
인도식 e0$b 0
인도어 e1$b 1
$offEcho
$onEcho > xpress.o99
인도식 e0$b 0
인도어 e1$b 1
미프렐스톱 0
$offEcho
$onEcho > xpressold.o99
인도식 e0$b 0
인도어 e1$b 1
미프렐스톱 0
$offEcho
$echo 슬롯/indicatorfile = "cplex.o99" > scip.o99
m.optfile = 99;
m.optcr = 1e-5;
x.up = 10;
* x=1, y=3은 e0과 e1을 모두 푼다.
* y.up < 3이면 e0이 선호되고 b = 0이 최적입니다.
* y.up > 3이면 e1이 선호되고 b = 1이 최적입니다.
y.up = 2;
mip max z를 사용하여 m을 해결합니다.
abort$[m.solvestat <> %solveStat.normalCompletion%] "잘못된 솔버 상태";
abort$[m.modelstat <> %modelStat.optimal%] "잘못된 모델 상태";
abort$[abs(b.l) > 1e-6] '0이 아닌 이진수', b.l;
abort$[abs(4.5 - y.l - 1.5*x.l) > 1e-6] 'e0이 만족되지 않음', x.l, y.l;
y.up = 4;
mip max z를 사용하여 m을 해결합니다.
abort$[m.solvestat <> %solveStat.normalCompletion%] "잘못된 솔버 상태";
abort$[m.modelstat <> %modelStat.optimal%] "잘못된 모델 상태";
abort$[abs(b.l-1) > 1e-6] '이진은 하나가 아님', b.l;
abort$[abs(5 - y.l - 2*x.l) > 1e-6] 'e1이 만족스럽지 않음', x.l, y.l;