$title 'GUROBI test suite - nonlinear constraints to general constraints' (GUROBI07,SEQ=905) $onText Tests a model with some nonlinear constraints that can be handled by GUROBI's general constraint concept. Contributor: Renke Kuhlmann, June 2022 $offText $onEcho > gurobi.opt writeprob prob.lp e1.trynonlin 0 e2.trynonlin 0 e3.trynonlin 0 e4.trynonlin 0 e5.trynonlin 0 e6.trynonlin 0 e7.trynonlin 0 e8.trynonlin 0 e9.trynonlin 0 e10.trynonlin 0 e11.trynonlin 0 e12.trynonlin 0 e13.trynonlin 0 e14.trynonlin 0 e15.trynonlin 0 e16.trynonlin 0 e17.trynonlin 0 e18.trynonlin 0 e19.trynonlin 0 e20.trynonlin 0 e21.trynonlin 0 e22.trynonlin 0 e23.trynonlin 0 e24.trynonlin 0 e25.trynonlin 0 e26.trynonlin 0 e27.trynonlin 0 e28.trynonlin 0 $offEcho Set i / 1*4 /; Variable r, x(i), x1, x2, x3, x4; Equation e1, e2, e3, e4, e5, e6, e7, e8, e9, e10, e11, e12, e13, e14, e15, e16, e17, e18, e19, e20, e21, e22, e23, e24, e25, e26, e27, e28; e1.. r =e= max(x1, x2, x3, x4, 42); e2.. r =e= min(x1, x2, x3, x4, 42); e3.. r =e= x1 and x2 and x3 and x4; e4.. r =e= x1 or x2 or x3 or x4; e5.. r =e= abs(x1); e6.. r =e= sin(x1); e7.. r =e= cos(x1); e8.. r =e= tan(x1); e9.. r =e= exp(x1); e10.. r =e= log(x1); e11.. r =e= log2(x1); e12.. r =e= log10(x1); e13.. r =e= x1**42; e14.. r =e= 42**x1; e15.. r =e= poly(x1, 1, 2, 3, 4, 5); e16.. r =e= edist(x1, x2, x3, x4); e17.. r =e= smax(i, x(i)); e18.. r =e= smin(i, x(i)); e19.. r =e= sand(i, x(i)); e20.. r =e= sor(i, x(i)); e21.. r =e= sum(i, abs(x(i))); e22.. r =e= sqrt(sum(i, sqr(x(i)))); e23.. r =e= smax(i, abs(x(i))); e24.. r =e= abs(x1) + abs(x2) + abs(x3) + abs(x4); e25.. r =e= sqrt(sqr(x1) + sqr(x2) + sqr(x3) + sqr(x4)); e26.. r =e= max(abs(x1), abs(x2), abs(x3), abs(x4)); e27.. r =e= sigmoid(x1); e28.. r =e= 1 / (1 + exp(-x1)); x1.lo = 0; x1.l = 1; Model m / all /; m.optfile = 1; option dnlp = gurobi; Solve m using DNLP minimizing r; execute.checkErrorlevel 'grep -qF "e1: r = MAX ( x1 , x2 , x3 , x4 , 42 )" prob.lp'; execute.checkErrorlevel 'grep -qF "e2: r = MIN ( x1 , x2 , x3 , x4 , 42 )" prob.lp'; execute.checkErrorlevel 'grep -qF "e3: r = AND ( x1 , x2 , x3 , x4 )" prob.lp'; execute.checkErrorlevel 'grep -qF "e4: r = OR ( x1 , x2 , x3 , x4 )" prob.lp'; execute.checkErrorlevel 'grep -qF "e5: r = ABS ( x1 )" prob.lp'; execute.checkErrorlevel 'grep -qF "e6: r = SIN ( x1 )" prob.lp'; execute.checkErrorlevel 'grep -qF "e7: r = COS ( x1 )" prob.lp'; execute.checkErrorlevel 'grep -qF "e8: r = TAN ( x1 )" prob.lp'; execute.checkErrorlevel 'grep -qF "e9: r = EXP ( x1 )" prob.lp'; execute.checkErrorlevel 'grep -qF "e10: r = LOG ( x1 )" prob.lp'; execute.checkErrorlevel 'grep -qF "e11: r = LOG_2 ( x1 )" prob.lp'; execute.checkErrorlevel 'grep -qF "e12: r = LOG_10 ( x1 )" prob.lp'; execute.checkErrorlevel 'grep -qF "e13: r = POW ( x1 ^ 42 )" prob.lp'; execute.checkErrorlevel 'grep -qF "e14: r = EXPA ( 42 ^ x1 )" prob.lp'; execute.checkErrorlevel 'grep -qF "e15: r = POLY ( 5 x1 ^ 4 + 4 x1 ^ 3 + 3 x1 ^ 2 + 2 x1 ^ 1 + 1 x1 ^ 0 )" prob.lp'; execute.checkErrorlevel 'grep -qF "e16: r = NORM ( 2 ) ( x1 , x2 , x3 , x4 )" prob.lp'; execute.checkErrorlevel 'grep -qF "e17: r = MAX ( x(1) , x(2) , x(3) , x(4) )" prob.lp'; execute.checkErrorlevel 'grep -qF "e18: r = MIN ( x(1) , x(2) , x(3) , x(4) )" prob.lp'; execute.checkErrorlevel 'grep -qF "e19: r = AND ( x(1) , x(2) , x(3) , x(4) )" prob.lp'; execute.checkErrorlevel 'grep -qF "e20: r = OR ( x(1) , x(2) , x(3) , x(4) )" prob.lp'; execute.checkErrorlevel 'grep -qF "e21: r = NORM ( 1 ) ( x(1) , x(2) , x(3) , x(4) )" prob.lp'; execute.checkErrorlevel 'grep -qF "e22: r = NORM ( 2 ) ( x(1) , x(2) , x(3) , x(4) )" prob.lp'; execute.checkErrorlevel 'grep -qF "e23: r = NORM ( Inf ) ( x(1) , x(2) , x(3) , x(4) )" prob.lp'; execute.checkErrorlevel 'grep -qF "e24: r = NORM ( 1 ) ( x1 , x2 , x3 , x4 )" prob.lp'; execute.checkErrorlevel 'grep -qF "e25: r = NORM ( 2 ) ( x1 , x2 , x3 , x4 )" prob.lp'; execute.checkErrorlevel 'grep -qF "e26: r = NORM ( Inf ) ( x1 , x2 , x3 , x4 )" prob.lp'; execute.checkErrorlevel 'grep -qF "e27: r = LOGISTIC ( x1 )" prob.lp'; execute.checkErrorlevel 'grep -qF "e28: r = LOGISTIC ( x1 )" prob.lp';