cplex06.gms : CPLEX 테스트 스위트 - 다목적

설명

CPLEX 다중 목표 최적화 기능을 테스트합니다.

기고자: Renke Kuhlmann, 2020년 10월

소형 모델 유형 :피망 슬롯


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


메인 파일 : cplex06.gms

$title 'CPLEX 테스트 스위트 - 다목적 테스트' (CPLEX06,SEQ=831)
$if not '%피망 슬롯lp%' == '' $set 솔버 %피망 슬롯lp%
$설정되지 않은 경우 솔버 $set 솔버 cplex
$onText
CPLEX 다목적 최적화 기능을 테스트합니다.

기고자: Renke Kuhlmann, 2020년 10월
$offText

변수 x, y, z, z1, z2;
방정식 obj_1, obj1, obj2, obj3, obj4, con1, con2;
obj_1.. z =e= 1.1 * z1 + z2;
obj1.. z1 =e= x;
obj2.. z2 =e= y;
obj3.. z2 =e= y;
obj4.. z1 =e= x;
con1..2 * x + y =l= 3;
con2.. 0.5 * x + y =l= 1.5;
x.lo = 0;
y.lo = 0;

모델 m1 / obj_1, obj1, obj2, con1, con2 /;
z를 최대화하는 lp를 사용하여 m1을 해결합니다.

abort$(x.l <> 1 or z1.l <> x.l) 'false value x';
abort$(obj1.l <> 0) 'false 값 obj1';
abort$(y.l <> 1 또는 z2.l <> y.l) 'false 값 y';
abort$(obj2.l <> 0) 'false 값 obj2';

file fcpx 'Cplex 옵션 파일' / %solver%.opt /;

m1.optfile=1;
putclose fcpx 'multobj 1';
z를 최대화하는 lp를 사용하여 m1을 해결합니다.

abort$(x.l <> 1.5 또는 z1.l <> x.l) '거짓 값 x';
abort$(obj1.l <> 0) 'false 값 obj1';
abort$(y.l <> 0 또는 z2.l <> y.l) 'false 값 y';
abort$(obj2.l <> 0) 'false 값 obj2';

putclose fcpx 'multobj 1' / 'objnabstol z1 0.55';
z를 최대화하는 lp를 사용하여 m1을 해결합니다.

중단$(x.l <> 1) '거짓 값 x';
중단$(z1.l <> 1) '거짓 값 z1';
abort$(obj1.l <> 0) 'false 값 obj1';
abort$(y.l <> 1) 'false 값 y';
중단$(z2.l <> 1) '거짓 값 z2';
abort$(obj2.l <> 0) 'false 값 obj2';

putclose fcpx 'multobj 1' / 'objnabstol z1 1.65';
z를 최대화하는 lp를 사용하여 m1을 해결합니다.

중단$(x.l <> 0) '거짓 값 x';
abort$(z1.l <> 0) 'false 값 z1';
abort$(obj1.l <> 0) 'false 값 obj1';
abort$(y.l <> 1.5) 'false 값 y';
abort$(z2.l <> 1.5) '거짓 값 z2';
abort$(obj2.l <> 0) 'false 값 obj2';

* 다른 목표 순서로 테스트

모델 m2 / obj_1, obj3, obj4, con1, con2 /;
z를 최대화하는 lp를 사용하여 m2를 해결합니다.

abort$(x.l <> 1 or z1.l <> x.l) 'false value x';
abort$(obj4.l <> 0) 'false 값 obj4';
abort$(y.l <> 1 또는 z2.l <> y.l) 'false 값 y';
abort$(obj3.l <> 0) 'false 값 obj3';

m2.optfile=1;
putclose fcpx 'multobj 1';
z를 최대화하는 lp를 사용하여 m2를 해결합니다.

abort$(x.l <> 1.5 또는 z1.l <> x.l) '거짓 값 x';
abort$(obj4.l <> 0) 'false 값 obj4';
abort$(y.l <> 0 또는 z2.l <> y.l) 'false 값 y';
abort$(obj3.l <> 0) 'false 값 obj3';

putclose fcpx 'multobj 1' / 'objnabstol z1 0.55';
z를 최대화하는 lp를 사용하여 m2를 해결합니다.

중단$(x.l <> 1) '거짓 값 x';
중단$(z1.l <> 1) '거짓 값 z1';
abort$(obj4.l <> 0) 'false 값 obj4';
abort$(y.l <> 1) 'false 값 y';
중단$(z2.l <> 1) '거짓 값 z2';
abort$(obj3.l <> 0) 'false 값 obj3';

putclose fcpx 'multobj 1' / 'objnabstol z1 1.65';
z를 최대화하는 lp를 사용하여 m2를 해결합니다.

중단$(x.l <> 0) '거짓 값 x';
abort$(z1.l <> 0) 'false 값 z1';
abort$(obj4.l <> 0) 'false 값 obj4';
abort$(y.l <> 1.5) 'false 값 y';
abort$(z2.l <> 1.5) '거짓 값 z2';
abort$(obj3.l <> 0) 'false value obj3';