$title 'XPRESS test suite - multiobjective test' (XPRESS08,SEQ=831) $onText Tests the XPRESS multiobjective optimization features. Contributor: Renke Kuhlmann, December 2025 $offText option solver = xpress; Variables x, z, z1, z2, y; Equations 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.. y =e= z2; obj4.. x =e= z1; con1.. 2 * x + y =l= 3; con2.. 0.5 * x + y =l= 1.5; x.lo = 0; y.lo = 0; Model m1 / obj_1, obj1, obj2, con1, con2 /; Solve m1 using lp maximizing z; abort$(x.l <> 1 or z1.l <> x.l) 'false value x'; abort$(obj1.l <> 0) 'false value obj1'; abort$(y.l <> 1 or z2.l <> y.l) 'false value y'; abort$(obj2.l <> 0) 'false value obj2'; file fxpx 'Xpress Option file' / xpress.opt /; m1.optfile=1; putclose fxpx 'multobj 1'; Solve m1 using lp maximizing z; abort$(x.l <> 1.5 or z1.l <> x.l) 'false value x'; abort$(obj1.l <> 0) 'false value obj1'; abort$(y.l <> 0 or z2.l <> y.l) 'false value y'; abort$(obj2.l <> 0) 'false value obj2'; putclose fxpx 'multobj 1' / 'objnabstol z1 0.5' / 'multiObjOps_rcFixing 0'; Solve m1 using lp maximizing z; abort$(x.l <> 1) 'false value x'; abort$(z1.l <> 1) 'false value z1'; abort$(obj1.l <> 0) 'false value obj1'; abort$(y.l <> 1) 'false value y'; abort$(z2.l <> 1) 'false value z2'; abort$(obj2.l <> 0) 'false value obj2'; putclose fxpx 'multobj 1' / 'objnabstol z1 1.5'; Solve m1 using lp maximizing z; abort$(x.l <> 0) 'false value x'; abort$(z1.l <> 0) 'false value z1'; abort$(obj1.l <> 0) 'false value obj1'; abort$(y.l <> 1.5) 'false value y'; abort$(z2.l <> 1.5) 'false value z2'; abort$(obj2.l <> 0) 'false value obj2'; * test with different objective ordering Model m2 / obj_1, obj3, obj4, con1, con2 /; Solve m2 using lp maximizing z; abort$(x.l <> 1 or z1.l <> x.l) 'false value x'; abort$(obj4.l <> 0) 'false value obj4'; abort$(y.l <> 1 or z2.l <> y.l) 'false value y'; abort$(obj3.l <> 0) 'false value obj3'; m2.optfile=1; putclose fxpx 'multobj 1'; Solve m2 using lp maximizing z; abort$(x.l <> 1.5 or z1.l <> x.l) 'false value x'; abort$(obj4.l <> 0) 'false value obj4'; abort$(y.l <> 0 or z2.l <> y.l) 'false value y'; abort$(obj3.l <> 0) 'false value obj3'; putclose fxpx 'multobj 1' / 'objnabstol z1 0.5' / 'multiObjOps_rcFixing 0'; Solve m2 using lp maximizing z; abort$(x.l <> 1) 'false value x'; abort$(z1.l <> 1) 'false value z1'; abort$(obj4.l <> 0) 'false value obj4'; abort$(y.l <> 1) 'false value y'; abort$(z2.l <> 1) 'false value z2'; abort$(obj3.l <> 0) 'false value obj3'; putclose fxpx 'multobj 1' / 'objnabstol z1 1.5'; Solve m2 using lp maximizing z; abort$(x.l <> 0) 'false value x'; abort$(z1.l <> 0) 'false value z1'; abort$(obj4.l <> 0) 'false value obj4'; abort$(y.l <> 1.5) 'false value y'; abort$(z2.l <> 1.5) 'false value z2'; abort$(obj3.l <> 0) 'false value obj3';