설명
기고자: Jan-H. Jagla, 2011년 3월
소형 모델 유형 :슬롯
카테고리 : 슬롯 테스트 라이브러리
메인 파일 : empdisj5.gms
$title 이진 변수 및 제약 조건이 아닌 것을 사용하여 분리 테스트(EMPDISJ5,SEQ=517)
$onText
기여자: Jan-H. 자글라, 2011년 3월
$offText
$onEchoV > testm1.inc
abort$(abs(%1.objval-(-2.0))>1e-6) '목표 값이 잘못되었습니다 [%1,%2]' , %1.objval;
abort$(abs(b.l-0.0) >1e-6) 'b.l 잘못됨 [%1,%2]' , b.l ;
abort$(abs(x.l-2.0) >1e-6) 'x.l 잘못됨 [%1,%2]' , x.l ;
$offEcho
변수 z,x;
이진변수 b;
방정식 obj1,obj2,e1,e2;
obj1.. z =e= -0.9*b - x;
e1..x =l= 1;
x.up = 2;
$onEcho > jams.opt
파일 이름 mymodel.gms
mydoc.txt 받아쓰기
$offEcho
모델 m1 / obj1,e1 /; m1.optcr=0; m1.optfile=1;
* ConvexHull로 테스트(기본 재구성)
'에코 분리 chull b e1 else not e1 > "%emp.info%"'를 실행합니다.
m1 us emp min z를 푼다;
$batInclude testm1.inc m1 CHull
'echo disjunction chull not b not e1 else e1 > "%emp.info%"'를 실행합니다.
m1 us emp min z를 푼다;
$batInclude testm1.inc m1 CHull
* bigM으로 테스트
'에코 분리 bigM b e1 else not e1 > "%emp.info%"'를 실행합니다.
m1 us emp min z를 푼다;
$batInclude testm1.inc m1 BigM
'에코 분리 bigM not b not e1 else e1 > "%emp.info%"'를 실행합니다.
m1 us emp min z를 푼다;
$batInclude testm1.inc m1 BigM
* bigM 및 임계값 0으로 테스트합니다(동등성이 항상 분할됨을 의미함).
* 완전성을 위한 m1/m2 테스트(임계값은 불평등에 영향을 미치지 않음)
'에코 분리 bigM 1e4 1e-4 0 b e1 else not e1 > "%emp.info%"'를 실행합니다.
m1 us emp min z를 푼다;
$batInclude testm1.inc m1 BigM2
'에코 분리 bigM 1e4 1e-4 0 not b not e1 else e1 > "%emp.info%"'를 실행합니다.
m1 us emp min z를 푼다;
$batInclude testm1.inc m1 BigM2
$솔버가 아닌 경우 cplex $goTo SCIP
* 표시기 및 CPLEX를 사용한 테스트
옵션 밉=cplex;
'echo disjunction indic b e1 else not e1 > "%emp.info%"'를 실행합니다.
m1 us emp min z를 푼다;
$batInclude testm1.inc m1 인도어
'echo disjunction indic not b not e1 else e1 > "%emp.info%"'를 실행합니다.
m1 us emp min z를 푼다;
$batInclude testm1.inc m1 인도어
$라벨 SCIP
$해제가 아닌 경우 scip $goTo XPRESS
* 지표 및 SCIP를 사용한 테스트
옵션 밉=scip;
'echo disjunction indic b e1 else not e1 > "%emp.info%"'를 실행합니다.
m1 us emp min z를 푼다;
$batInclude testm1.inc m1 인도어
'echo disjunction indic not b not e1 else e1 > "%emp.info%"'를 실행합니다.
m1 us emp min z를 푼다;
$batInclude testm1.inc m1 인도어
$라벨 XPRESS
$아니면 SOLVER xpress $goTo 완료
* 표시기와 XPRESS를 사용한 테스트
옵션 mip=xpress;
'echo disjunction indic b e1 else not e1 > "%emp.info%"'를 실행합니다.
m1 us emp min z를 푼다;
$batInclude testm1.inc m1 인도어
'echo disjunction indic not b not e1 else e1 > "%emp.info%"'를 실행합니다.
m1 us emp min z를 푼다;
$batInclude testm1.inc m1 인도어
$라벨 완료