A Nonlinear Optimization Problem (clp4)

```/***************************************************************/
/*                                                             */
/*          S A S   S A M P L E   L I B R A R Y                */
/*                                                             */
/*    NAME: clp4                                               */
/*   TITLE: A Nonlinear Optimization Problem (clp4)            */
/* PRODUCT: OR                                                 */
/*  SYSTEM: ALL                                                */
/*    KEYS: OR                                                 */
/*   PROCS: CLP                                                */
/*    DATA:                                                    */
/*                                                             */
/* SUPPORT:                             UPDATE:                */
/*     REF:                                                    */
/*    MISC: Example 4 from the CLP Procedure chapter of the    */
/*          Constraint Programming book.                       */
/*                                                             */
/***************************************************************/

data objdata;
input y1 x2 y2 _TYPE_ \$ _RHS_;
/* Objective function: x1^3 + 5 * x2 - 2^x3 */
datalines;
1 5 -1 MAX .
;

proc clp condata=objdata out=clpout;
var x1=[-5, 5] x2=[-5, 9] x3=[1, 10] (y1-y4) (z1-z2);

/* Use element constraint to represent non-contiguous domains */
/* and nonlinear functions.                                   */
element

/* Domain of x1 is [-5,5] */
(z1, ( -5 to 5), x1)

/* Functional Dependencies on x1 */
/* y1 = x1^3 */
(z1, (-125, -64, -27, -8, -1, 0, 1, 8, 27, 64, 125), y1)
/* y4 = mod(x1, 4) */
(z1, ( -1,  0,  -3,  -2,  -1, 0, 1, 2, 3, 0, 1), y4)

/* Domain of x2 is the set of odd numbers in [-5, 9] */
(z2, (-5 to 9 by 2), x2)

/* Functional Dependencies on x3 */
/* y2 = 2^x3 */
(x3, (2, 4, 8, 16, 32, 64, 128, 256, 512, 1024), y2)
/* y3 = x3^2 */
(x3, (1, 4, 9, 16, 25, 36, 49, 64, 81, 100), y3);

lincon
/* x1 - .5 * x2 + x3^2 <=50 */
x1 - .5 * x2 + y3 <= 50,

/* mod(x1, 4) + .25 * x2 >= 1.5 */
y4 + .25 * x2 >= 1.5;
run;
%put &_ORCLP_;
proc print data=clpout; run;

```