Samples from the Getting Started section (oclpg01)
/***************************************************************/
/* */
/* S A S S A M P L E L I B R A R Y */
/* */
/* NAME: oclpg01 */
/* TITLE: Samples from the Getting Started section (oclpg01) */
/* PRODUCT: OR */
/* SYSTEM: ALL */
/* KEYS: OR */
/* PROCS: OPTMODEL */
/* DATA: */
/* */
/* SUPPORT: UPDATE: */
/* REF: Examples from the Getting Started section of the */
/* CLP solver documentation. */
/* MISC: */
/* */
/***************************************************************/
/* Send More Money */
proc optmodel;
/* Declare all variables as integer. */
var S integer, E integer, N integer, D integer, M integer, O integer,
R integer, Y integer;
/* Set all domains to between 0 and 9. Domains are unbounded by default.
Always declare domains to be as tight as possible. */
for {j in 1.._NVAR_} do;
_VAR_[j].lb = 0;
_VAR_[j].ub = 9;
end;
/* Describe the arithmetic constraint.*/
con Arithmetic: 1000*S + 100*E + 10*N + D
+ 1000*M + 100*O + 10*R + E
= 10000*M + 1000*O + 100*N + 10*E + Y;
/* Forbid leading letters from taking the value zero.
Constraint names are optional. */
con S ne 0;
con M ne 0;
/* Require all variables to take distinct values. */
con alldiff(S E N D M O R Y);
solve;
print S E N D M O R Y;
quit;
/* Eight Queens */
proc optmodel;
num n init 8;
var A {1..n} >= 1 <= n integer;
/* Define artificial offset variables. */
var B {1..n, -1..1} >= 1 - n <= n + n integer;
con Bdef {i in 1..n, k in -1..1}:
B[i,k] = A[i] + k * i;
con OffsetsMustBeAlldifferent {k in -1..1}:
alldiff({i in 1..n} B[i,k]);
solve with CLP / varselect=fifo;
/* Replicate typical PROC CLP output from an OPTMODEL array */
create data out from {i in 1..n}<col('A'||i)=A[i]>;
quit;