Home
        OPL Language User™s Manual
         Contents
1.                  To represent our warehouse location problem as an integer program  the model   warehouse mod  uses a 0 1 Boolean variable for each combination of warehouse and  store to represent whether or not a warehouse supplies a store  In addition  the  model associates a variable with each warehouse to indicate whether the  warehouse is selected  Once these variables are declared  the constraints state that  each store must be supplied by a warehouse  that each store can be supplied by  only an open warehouse  and that each warehouse cannot deliver more stores than  its allowed capacity     Warehouse location  as a discrete optimization problem   warehouse mod     int Fixed      3    string  Warehouses      3   int NbStores      3   range Stores   0  NbStores 1    int Capacity Warehouses       3   int SupplyCost Stores   Warehouses          dvar boolean Open Warehouses       Chapter 2  The application areas 35    dvar boolean Supply Stores   Warehouses      minimize  sum  w in Warehouses    Fixed   Open w     sum  w in Warehouses   s in Stores    SupplyCost s  w    Supply s   w      subject to   forall  s in Stores    ctEachStoreHasOneWarehouse   sum  w in Warehouses    Supply s  w     1   forall  w in Warehouses  s in Stores    ctUseOpenWarehouses   Supply s  w   lt   Open w    forall  w in Warehouses    ctMaxUseOfWarehouse   sum  s in Stores    Supply s   w   lt   Capacity w          int  Storesof w in Warehouses      s   s in Stores   Supply s  w     1     execute D
2.      112  What you are going todo         112     Setting an initial solution for the CPLEX engine 112  Setting preferences on the search for conflicts    and relaxations      voa w e  amp  114  Searching for relaxation and conflicts Ke are aa   116  Using IBM ILOG Script in constraint programming 116   Setting CP parameters           116   Defining search phases       z   e   118   Accessing solutions in postprocessing  gt      a 122    Chapter 4  Advanced features         125    Tutorial  External functions                  125  Context of external functions               125  Using an external knapsack algorithm         126  Using data from other sources        a 131  Debugging custom Java code using Eclipse     132    Chapter 5  Performance and memory  usage          2     2      137    Performance tips s   s               137  Memory usage         lt  gt  we  138  If your system runs out of memory   5 oe  amp  2 L38  Building data structures differently           138  Terminating data objects                  139  Changing engine parameters               139  Using oplrun                    140  Changing to a 64 bit platform   boo Ze    2 PAO  Using 4GT tuning     gt       141  Scaling down the size af ihe model  s          141  Multi threading     soe oe ee         147  A typical problem to solve Soep grd   141    From the mathematical model to the OPL cod   145    Index    aoao ew ee   a    a    147    iii    iv OPL Language User   s Manual       Figures    1  Piecewis
3.      Exploiting sparsity   a first attempt  Presents transp2 mod     28 OPL Language User   s Manual    A first attempt at exploiting the sparsity available in a large scale transportation  problem consists of representing the data as a set routes of tuples of type    tuple Route   string p  string o  string d       The array cost and trans can then be indexed with this set  A model based on this  idea is shown in the example below  transp2 mod     A sparse transportation model  first attempt  transp2 mod      string  Cities          string  Products      3  float Capacity           tuple route    string p   string 03  string d       route  Routes         tuple supply    string p   string 0       supply  Supplies      lt p o gt     lt p o d gt  in Routes     float Supply Supplies          tuple customer      string p    string d    customer  Customers      lt p d gt     lt p o d gt  in Routes     float Demand Customers          float Cost Routes             string  Orig p in Products    string  Dest p in Products       o    lt p o d gt  in Routes      d    lt p o d gt  in Routes      assert forall p in Products   sum o in Orig p    Supply  lt p o gt      sum  d in Dest p    Demand  lt p d gt       dvar floatt  Trans Routes     constraint ctSupply Products   Cities    constraint ctDemand Products   Cities      minimize  sum 1 in Routes  Cost 1    Trans 1      subject to    forall  p in Products   o in Orig p       ctSupply p   o     sum  d in Dest p     Trans  lt  p 0 d  gt   
4.      Where     dvar interval a     dvar interval A       Chapter 3  IBM ILOG Script for OPL 121    For instance  this code sample will specify a search that first fixes all interval  variables in array A1 before the ones in array A2    dvar interval Al         3   dvar interval A2         3    execute    var f   cp factory   cp setSearchPhases f searchPhase Al     f searchPhase A2           Sequence variable search phase   A search phase on sequence variables works on a unique sequence variable or on  an array of sequence variables  During this phase CP Optimizer fixes the value of  the specified sequence variable s   Each sequence variable will be assigned a totally  ordered sequence of present interval variables  Note that this search phase also  fixes the presence statuses of the intervals involved in the sequence variables  This  phase does not fix the start and end values of interval variables    It is recommended to use this search phase only if the possible range for start and  end values of all interval variables is limited  for example by some known horizon  that limits their maximal values     searchPhase p      searchPhase P      Where     dvar sequence p     dvar sequence P       Accessing solutions in postprocessing    Describes how to access the solution in postprocessing     You can access information about intervals  sequences  and instances of  cumulFunction or stateFunction in a solution     The value of an interval variable a in a solution can be accessed u
5.      forall s in 1  nbSlabs   colorCt  sum  c in 1  nbColors   or o in 1  nbOrders   colors o     c   where o     s    lt   2     Chapter 1  Introduction to OPL 25    You use this constraint just as the usual forall constraint or sum expression  The or  constraint can express a complex combination of constraints in one single  statement  As a result of the expressiveness of the OPL language  the steel mill  model uses only two OPL constraints to represent a very complete and realistic  model     The search process  How to influence the default search of CP Optimizer     Constraint programming techniques have been seen for a long time as harder to  use than mathematical programming because it was sometimes necessary to define  search procedures using complex syntaxes and concepts  Now the IBM ILOG CP  Optimizer engine includes a powerful default search  This means that without  giving any particular indication on how the solution or optimal solution is to be  found  some combinations of techniques are used with default behaviors so that  good solutions are quickly found for a wide variety of problems     However  you can influence the search process by   e Changing CP parameters  e Defining search phases    Changing CP parameters  You can change CP Optimizer parameters by means of  script statements  See    Changing CP parameters    on page 93     Setting limits    Limits are just a particular type of parameters you can change with a certain  impact on the search process  You 
6.     MaxProduction   100000    Product         kluski    lt  100  0 6  0 8    0 5  0 2   ml  gt   capellini    lt  200  0 8  0 9    0 4  0 4   m2  gt   fettucine    lt  300  0 3  0 4    0 3  0 6   m3 gt          Capacity     20  40       Note that the model now contains two types of variables  0 1 variables that  represent whether to rent a machine and production variables of type float  The  product data is enhanced with a field describing the required machine  while the  new constraints are modeled as in the fixed charge problem in    A fixed charge  model  fixed mod     on page 53     56 OPL Language User   s Manual    A solution to prodmilp mod    For the instance data in prodmilp dat  OPL returns the optimal solution    Final Solution with objective 378 3333   inside    0 0000 0 0000 66 6667    outside    100 0000 200 0000 233 3333    rent    0 0 1      Piecewise linear programming    Defines piecewise linear programming  describes an inventory problem with  piecewise linear functions  compares pwl to plain linear programming  and  indicates complexity issues     What is piecewise linear programming   Piecewise linear programs are in fact syntactic sugar for linear  integer  or mixed  integer linear programs     In other words  a piecewise linear program can always be transformed into a  mixed integer linear program and  sometimes  into a linear program  This last case  is particularly interesting from a computational standpoint  Piecewise linear  programs are also useful
7.     on page  137 in The Language User s Manual     Sparsity    Discusses sparsity  tuples of parameters  and filtering in the context of model  efficiency     Sparsity in the transportation problem  Describes the problem  and presents transp1 mod     Consider the transportation problem in which the shipments of products between  each pair of cities may not exceed a given limit     A simple transportation model   transp1 mod     on page 28 shows a simple model for this problem  which  implicitly assumes that all cities are connected and that all products may be  shipped between two cities  It is thus not appropriate for large scale problems  where only a fraction of the cities are connected     A small data set can easily illustrate the issue  Consider the set of cities    Chapter 1  Introduction to OPL 27      Amsterdam    Antwerpen    Bergen   Bonn    Brussels    Cassis   London    Madrid     Milan   Paris      and the set of products   Godiva   Leonidas   Neuhaus    There are three  hundred ways of shipping a product from one city to another  However  only a  small fraction of these may be explored in the application and Table 2 displays a  possible subset     The statement in the model below  transp1 mod  would induce a substantial loss in   memory and time  efficiency  The following sections explore how to exploit this    sparsity    A simple transportation model  transp1 mod    string  Cities          string  Products      3   float Capacity          float Supply Product
8.    Linear programming  Defines linear programming     Linear programming is an important tool for combinatorial search problems  not  only because it solves efficiently a large class of important problems  but also  because it is the basic block of some fundamental techniques in this area     A linear program consists of minimizing a linear objective function subject to a set  of linear constraints over real variables constrained to be nonnegative or  in  symbols           TL  minimize  gt   jai CI      subject to    Doj CX   b   1  lt i  lt m     a   U LEJEN     Note first that considering only equations  nonnegative variables  and  minimization is not restrictive  An inequality t 2 0 can be recast as an equation t    s   0 by adding a new variable  an arbitrary variable can be expressed as the  difference of two nonnegative variables  and maximization can be expressed by  negating the objective function  In addition  decision problems  i e   finding if a set  of constraints is satisfiable  can be recast by adding a variable per constraint and  minimizing their sum  The problem is satisfiable if and only if the optimum is  zero  Note also that linear programs can be solved in polynomial time and robust  solvers are now available that solve large scale linear programs  The success of  linear programming led many researchers to investigate some of its  generalizations     Integer programming  Defines integer programming     Integer programming is a natural extension of linear 
9.    Supply  lt p o gt     forall  p in Products   d in Dest p     ctDemand p   d     sum  o in Orig p     Trans  lt  p o d  gt      Demand  lt p d gt     ctCapacity  forall  o   d in Cities    sum   lt p o d gt  in Routes    Trans  lt p o d gt    lt   Capacity        The data for the supplies and demands are also represented in a sparse way by  projecting the set Routes to obtain their index sets  In addition to that  the model    Chapter 1  Introduction to OPL 29    also precomputes  in a generic way  the cities orig p  that can ship product p and  the cities dest  p  that can receive product p  Most of the resulting model is elegant  and efficient     Unfortunately  the constraint  ctCapacity  forall  o   d in Cities    sum   lt p o d gt  in Routes    Trans  lt p o d gt    lt   Capacity     is not particularly efficient because it does not exploit the structure of the  application  Indeed  the forall statement iterates not over actual connections but  rather over all pairs of cities  In addition  the aggregate operator on the second line    sum  lt p o d gt  in Routes  trans  lt p o d gt    lt   capacity     cannot exploit the    connection    structure to obtain all products of a connection   since 0 and d are separate entities     Exploiting sparsity   a better model  Presents transp3 mod     The application can be modeled more effectively by closely reflecting the structure  of the application  The example below  transp3 mod  contains a statement  illustrating this princi
10.    dvar float  Boat Periods    dvar float  Inv 0  NbPeriods      minimize  sum  t in Periods    piecewise i in 1  NbPieces 1     Cost i    gt  Breakpoint i    Cost NbPieces     Boat t     InventoryCost      sum  t in Periods   Inv t        subject to    ctInit   Inv       Inventory   forall  t in Periods    ctBoat   Boat t    Inv t 1     Inv t    Demand t           The interesting feature is the objective function  minimize  sum  t in Periods    piecewise i in 1  NbPieces 1     Cost i    gt  Breakpoint i    Cost NbPieces     Boat t     InventoryCost      sum  t in Periods   Inv t        which is now generic in the number of pieces  Data for the generalized  piecewise linear model  sailcopwg1 dat  describes the same instance data for this  model     Data for the generalized piecewise linear model  sailcopwg1 dat     60 OPL Language User   s Manual    NbPeriods   4    Demand     40  60  75  25     NbPieces   2    Cost     400  450     Breakpoint     40     Inventory   10   InventoryCost   20     Consider now adding a constraint stipulating that the maximum number of boats  produced in each period cannot exceed fifty on the instance data depicted in  Another instance data item for the generalized piecewise linear model   sailcopwg2 dat      Another instance data item for the generalized piecewise linear model   sailcopwg2 dat    NbPeriods   4    Demand     40  60  75  25      NbPieces   3    Cost     300  400  450      Breakpoint     30  40      Inventory   10    InventoryCost  
11.    type filter text   D G     B OPL Run Configuration A ae ments     D cutstock Alternate formulation of fixed number of patterns  ie cutstock Fixed number of patterns  D Scheduling_nonCPO Configurationi                      Xdebug  Xrunjdwp transport dt_socket server y address 8000                Filter matched 4 of 4 items                   Meen         Xdebug  Xrunjdwp transport dt_socket server y address 8000 indicates that  the Java Virtual Machine launched by CPLEX Studio will be in debug mode  and will listen for debugger connections on port 8000 of the current machine     4  Click Apply  then Run to launch the selected run configuration     The run does not start until a debugger connection is received  you may  receive a time out message from the IDE      For details  see http   publib boulder ibm com infocenter javasdk tools topic   com ibm java doc igaa _1vg000156f385c9 11b26a8be3f 7fff_1001 html     Setting breakpoints and debugging  The steps to set breakpoints and debug     About this task  At this stage  you run a model in CPLEX Studio IDE  and if any breakpoints are    set in the associated Java project in Eclipse  the Java debugger stops at those lines  in the code and you can then debug in Eclipse     134 OPL Language User   s Manual    Procedure    To set breakpoints and debug    1  Set breakpoints as appropriate in the Eclipse project    2  Connect to the IDE by running the Eclipse Debug run configuration you  created in    Creating a run configuration    
12.   1   forall  w in Warehouses  s in Stores    ctUseOpenWarehouses   Supply s  w   lt   Open w    forall  w in Warehouses    ctMaxUseOfWarehouse   sum  s in Stores    Supply s   w   lt   Capacity w               int  Storesof w in Warehouses      s   s in Stores   Supply s  w     1     execute DISPLAY _RESULTS    writeln  Open    Open      writeln  Storesof   Storesof          Data for the warehouse location model  warehouse dat   Fixed   30   Warehouses    Bonn Bordeaux London Paris Rome    NbStores   10   Capacity    1 4 2 1 3    SupplyCost        20  24  11  25  30      28  27  82  83  74      74  97  71  96  70       2  55  73  69  61       46  96  59  83  4      42  22  29  67  59       1  5  73  59  56      10  73  13  43  96      93  35  63  85  46       47  65  55  71  95         The statement declares the warehouses and the stores  the fixed cost of the  warehouses  and the supply cost of a store for each warehouse  The problem  variables   dvar boolean Open Warehouses      dvar boolean Supply Stores   Warehouses      represent which warehouses supply the stores  i e   supply s   w  is 1 if warehouse  w supplies store s and zero otherwise     Chapter 2  The application areas 51    The objective function  minimize  sum  w in Warehouses    Fixed   Open w     sum  w in Warehouses   s in Stores    SupplyCost s   w    Supply s   w      expresses the goal that the model minimizes the fixed cost of the selected  warehouses and the supply costs of the stores     The constrain
13.   135 0       What is unknown   Describes how the decision variables can be represented     The variables of the problem can be represented in arrays   e How much blended  refined oil to produce per month   e How much raw oil to use per month   e How much raw oil to buy per month     e How much raw oil to store per month     like this     dvar float  Produce Months      dvar float  Use Months   Products     dvar float  Buy Months   Products     dvar float Store Months   Products  in 0  1000     Notice that how much to use and buy is initially unknown  and thus has an  infinite upper bound  whereas the amount of oil that can be stored is limited  as  you know from    Description of the problem    on page 82  Consequently  one of the  constraints is expressed here as the upper bound of 1000 on the amount of oil by  type that can be stored per month     What are the constraints   Describes how to represent the various constraints in the problem     As you know from    Description of the problem    on page 82  there are a variety of  constraints in this problem     For each type of oil  there must be 500 tons in storage at the end of the plan  That  idea can be expressed like this     forall  p in Products    ctStore   Store NbMonths   p     500     The constraints on production in each month can all be expressed as statements in  a forall statement     e Not more than 200 tons of vegetable oil can be refined     ctUsel   Use m    v1     Use m    v2    lt   200     e Not more tha
14.   20 Model has an unbounded optimal face    21 Stopped due to a limit on the primal  objective    22 Stopped due to a limit on the dual objective    23 The problem under consideration was found  to be feasible after phase 1 of FeasOpt  A  feasible solution is available    30 The problem appears to be feasible  no  conflict is available    31 The conflict refiner found a minimal conflict    32 The conflict refiner concluded contradictory  feasibility for the same set of constraints due  to numeric problems  A conflict is available   but it is not minimal    33 The conflict refiner terminated because of a  time limit  A conflict is available  but it is  not minimal    34 The conflict refiner terminated because of an  iteration limit  A conflict is available  but it  is not minimal    35 The conflict refiner terminated because of a  node limit  A conflict is available  but it is  not minimal    36 The conflict refiner terminated because of an  objective limit  A conflict is available  but it  is not minimal    37 The conflict refiner terminated because of a  memory limit  A conflict is available  but it  is not minimal    38 The conflict refiner terminated because a  user terminated the application  A conflict is  available  but it is not minimal    101 Optimal integer solution has been found    102 Optimal solution with the tolerance defined  by epgap or epagap has been found    103 Solution is integer infeasible   104 The limit on mixed integer solutions has  been reached    1
15.   You can change the amount of memory allocated to the CPLEX Studio IDE in the  file  lt Install_dir gt  op1 oplide oplide ini  See the topic Memory allocation for  CPLEX Studio IDE for a description     Building data structures differently    Explains how to tune the way data structures inside a model are built     A way of using less memory is to tune the way the data structures inside a model  are built     For instance  creating many intermediate arrays and sets that are not directly used  in the model will increase memory  In addition  it is important to take advantage  of proper modeling techniques  building a large  sparse  multi dimensional array  generally uses more memory than an equivalent set of tuples  Other treatments of  sparsity and generic arrays are covered in greater detail in    Modeling tips    on  page 27 of the Language User   s Manual  In addition  IDE users can also use the    138 OPL Language User   s Manual    Profiler tab of the Output window to identify constructs that use large amounts of  memory  an example is given in Profiling the execution of a model of IDE Tutorials     See also the white paper    Efficient Modeling in ILOG OPL CPLEX Development  System    available from the IBM ILOG web site for IBM ILOG OPL at    http    www 01 ibm com software integration  optimization cplex optimization   studio library      Terminating data objects    Explains how to use the method end to free memory in IBM ILOG Script and  interfaces     Use the method
16.   ctMaxTotal2   3   Gas   4   Chloride  lt   180   ctMaxChloride   Chloride  lt   40        This statement declares two real decision variables  gas and chloride  representing  the production of ammoniac gas and ammonium chloride  These variables are of  type float  The objective function    maximize  40   Gas   50   Chloride     states that the profit must be maximized  The constraints ensure that the  production plan does not exceed the available stocks of nitrogen  hydrogen  and  chlorine  respectively  The constraint gas   chloride  lt   50 represents the capacity  constraint for nitrogen  since each unit of ammoniac gas and of ammonium  chloride uses one unit of nitrogen  The next two constraints  for hydrogen and  chlorine respectively  are similar in nature  As mentioned at the beginning of this  section  a solution to an optimization problem is typically an assignment of values  to the variables that satisfies the constraints and optimizes the objective function     10 OPL Language User   s Manual    Note that in    A simple production problem  volsay mod     on page 10  the  constraints are identified with so called    labels     It is recommended to label  constraints in a model  See Constraints in the Language Reference Manual for details     A solution to volsay mod    For the Volsay production planning problem  OPL returns the optimal solution    Final Solution with objective 2300 0000   gas   20 0000   chloride   30 0000     Elements of the production model  Des
17.   explain how to use the class IloOplConflictlterator to refine a conflict with  user defined preferences  not available for CP models      The conflictlterator model  Presents the variables and constraints of this infeasible model     This tutorial uses a simple infeasible model which defines the following variables  and constraints     Variables    range r   1  10   dvar int  x r  in 1  10     Constraints    minimize sum i in r  x i    subject to    ct  sum i in r  x i   gt   10   forall i in r   cts  x i   gt   i 5          This model is clearly infeasible  All constraints from cts 6  through cts 10  are  infeasible     Default behavior  Shows the code from the flow control and the result     114 OPL Language User   s Manual    The following code lines from the first part of the flow control  the main block   show the default behavior if you use the IloOplConflictIterator class without  setting any user defined preferences       Default behavior   writeln  Default Behavior      var opll   new Ilo0plModel  def  cplex     opl1 generate      writeln opl1 printConflict        The output is then     Default Behaviour  cts 6  at 9 0 10 17 E  opl conflictIterator mod  is in conflict     This result was to be expected since CPLEX refined the solution to the first  constraint in the declared order     Setting user defined preferences  How to assign an ordering to members of a conflict     About this task    You can assign preferences to members of a conflict  In most cases  there i
18.   where S is the indexer for A     IBM ILOG Script variables    All variables you declare using the var keyword in a scripting block are undefined  in the block until they are declared  For example     int a 2  execute   writeln a   var  a 2  writeln a      gives out    undefined 2  Lazy initialization of data    See Pitfall of lazy initialization of data     Chapter 3  IBM ILOG Script for OPL 97       Tutorial  Flow control and multiple searches    Shows how to use IBM ILOG Script flow control statements to solve a production  planning model iteratively  modifying the data after each iteration     The production planning problem    Describes the problem and tells you where to find the files   What you are going to do    In this tutorial  you are going to work with the production problem presented in     A multi period production planning problem    on page 39  This models extends  the basic production planning problem presented in    A production problem    on  page 38 by considering the demand for the products over several periods and  allowing the company to produce more than the demand in a given period  Of  course  there is an inventory cost associated with storing the additional production     Where to find the files    You will work on a multiperiod production example  supplied as the mul prod  example at the following location      lt Install_dir gt  op  examples op1 mulprod    where  lt Instal1_dir gt  is your installation directory     Procedure summary    Explains 
19.   y k     1     N    sum i j in R  used i   i         More useful features    When it comes to computing operational plans or schedules that must be  executable  you cannot always use the linear form to simplifying costs or  constraints  Fortunately  constraint programming can accurately model these  problems     Constraint programming can also be used as a fast generator of feasible solutions   This can be extremely useful in combination with other models and engines  for  instance to implement column generation for a complex optimization model     Differences with mathematical programming  Describes what is required by constraint programming  in contrast with math  programming     In contrast with math programming  constraint programming requires   e Explicit modeling for max  min  abs    e More memory usage per decision variable    and supports   e Only discrete decision variables  e No gap measure    Explicit modeling for max  min  abs    Since constraint programming does not have linear relaxation to optimize a relaxed  problem after each decision on integer variables  the MP way of modeling  constraints such as max  min  cannot be used directly for CP  For instance  the  following MP linearization would put the maximum value of x i  in m   minimize m     5  subject to     forall i in 1  10  m  gt   x i          In CP  it is safer and more efficient to write   minimize    3   subject to     m    max i in 1  10  x i         More memory usage per decision variable    For a
20.  0 4    0 3  0 6    gt     Jf     from Data for the revised production planning problem  product  dat  specifies  these various data items  tuples are initialized by giving values for each of their  fields  It is of course possible to use a named initialization for the tuple  as shown  in Named data for the revised production planning problem  productn dat   in  which case the initialization is enclosed with   lt  and  gt    Tuple fields can be  obtained by suffixing the tuple with a dot and the field name  For instance  in the  objective function  minimize   sum  p in Products       Product p  insideCost   Inside p     Product p  outsideCost   Outside p        the expression product p  insideCost represents the field insideCost of the tuple  product p      Similarly  in the constraint  forall r in Resources     sum p in Products  product p  consumption r    inside p   lt   capacity r      the expression product  p   consumption represents the field consumption of tuple  product p   This field is an array that can be subscripted in the traditional way     Chapter 1  Introduction to OPL 17    Displaying results  Describes how to display results by writing an execute IBM ILOG Script block     About this task    The statements presented so far did not specify what elements of the solution  should be displayed  OPL offers a way to display the results of an application  An  interesting feature of OPL is the ability to display tuples of expressions     Procedure    To display resul
21.  20     This new constraint has a dramatic effect on the model  which is now infeasible   Piecewise linear functions can be used here to understand where the infeasibility  comes from  The key insight is to replace the capacity constraint by yet another  piece in the piecewise linear function and to associate a huge cost with this new  piece  Instance data to deal with infeasibility  sailcopwg3 dat  depicts the instance  data needed to do this     Instance data to deal with infeasibility  sail copwg3 dat   NbPeriods   4    Demand     40  60  75  25      NbPieces   4    Cost     300  400  450  100000      Breakpoint     30  40  50      Inventory   10    InventoryCost   20     OPL produces the following optimal solution     Final Solution with objective 1560600 0000   boat    50 0000 50 0000 65 0000 25 0000    inv    10 0000 20 0000 10 0000 0 0000 0 0000      which indicates clearly where the bottlenecks  i e   the third period  are located   The result may help Sailco to plan ahead and take appropriate measures     Complexity issues  Discusses when a piecewise linear program corresponds to a mixed integer linear  program     It is important to understand  of course  when a piecewise linear program  corresponds to a mixed integer linear program  The diagrams below describe the  shapes of functions that can be used in objective functions to produce linear  programs  convex piecewise linear functions in minimization problems and  concave piecewise linear functions in maximization
22.  3  IBM ILOG Script for OPL 119    added to the search phases  For instance  in a model that has three arrays of  variables x  y and z  the following search phases   execute     var f   cp factory    cp setSearchPhases f searchPhase x   f searchPhase y   f searchPhase z            mean that variables x will be instantiated before variables y  then  once x and y are  instantiated  variables z will be instantiated  In some particularly well designed  models  passing such an order can have a dramatic impact on the solving time     Specifying variable and value choosers  A search phase can contain a variable chooser and a value chooser     A search phase can also contain a variable chooser and a value chooser  The  example below shows how such a search phase could be defined for the carseq  example  The full code of the carseq mod model  which does not contain this  search  is available at      lt Install_dir gt  op  examples op  models Car carseq mod    Variable and Value Choosers in Search Phases  alternative search for  carseq mod     execute    var f   cp factory       f searchPhase slot   f selectSmallest f varIndex slot     f selectLargest f explicitValueEval values  valueEval  0        var phasel    cp setSearchPhases  phase1        List of variable choosers  selectSmallest  eval   selectLargest  eval   selectRandomVar    List of variable evaluators  cp  factory domainSize    cp  factory  domainMin    cp  factory  domainMax     cp  factory successRate    cp  factory  impac
23.  IBM ILOG  Script 114  scripting statements to search for 116  constraint  precedence 78  constraint arrays 113  constraint programming  benefits 6  changing parameters with script  statements 26  93  compatibility  incompatibility  constraints 7  defining search phases 26  in a nutshell 4    constraint programming  continued   inventory matching problem 24  logical constraints and statements 7  nonlinear costs and constraints 6  presentation 3  scheduling 4  search phases 118  setting parameters 117  vs  mathematical programming 5  writing modeling constraints and  specialized constraints 25  constraints  dual variable 47  in blending problem 23  in inventory matching problem 25  in production planning 15  in set covering problem 48  in warehouse location problem 35  labeling 32  time tabling example 71  72  use of the universal quantifier 12  convertAllIntVars method  IloOplModel class 54  convex piecewise linear functions 61  costs  solution with reduced cost 107  costs  reduced  displayed 18  in model decomposition 109  110  in sensitivity analysis 47  CP Optimizer  customizing search strategy 74  search space 4  setting parameters with script  statements 26  93  CPLEX basis  controlling through IBM ILOG  Script 112  status 47  CPLEX constraint  changing bounds  CPLEX engine  conflict refinement algorithm 115  setting an initial solution 113  warmstart 112  CPLEX infinity value 32  CPLEX matrix  modifying incrementally 104  CPLEX objective  changing coefficient of variabl
24.  ILOG Script classes and methods  Then  it is easy to reuse  this algorithm in different OPL models  Although this is standard JavaScript code   the example includes a few useful comments  The IBM ILOG Script wrapping  functions are all located in a reusable javaknapsack mod file     Procedure    To wrap the calls to external functions   1  Use a function to declare the new algorithm class     function Knapsack      1100p1ImportJava        java javaknapsack classes       this object   I1l00p CallJava  javaknapsack Knapsack    lt init gt           this updateInputs   _ Knapsack_updateInputs   this solve   _ Knapsack_solve    s  The content of the function is what the constructor will execute  Part of it is to  register methods  Here is an example of implementing a method   function _ Knapsack_updateInputs weights values     this  object  updateInputs  weights  values        The call above is a shortcut as there is no risk of ambiguity      In the general case  if several methods have the same name  you can use     Tlo0p1CallJava this object  updateInputs     Lilog op  Ilo0p Element Lilog op  I1oOplElement  V   weights  values     s  Then  these new IBM ILOG Script class and methods are used in the modified  cutstock algorithm  the model of which is the cutstock_ext_main mod file   2  Include the javaknapsack mod file so that the IBM ILOG Script definition can  be used     include  javaknapsack mod    3  Create the knapsack algorithm        Create a subproblem instance   var kn
25.  ILOG Script is a scripting language for OPL  supporting these functionalities     In other words  while OPL is the language to express optimization  IBM  ILOG Script for OPL is the language for the non modeling aspects  flow control   preprocessing  postprocessing      The main novelty in IBM ILOG Script is to consider models as first class objects   providing a clear separation of concerns between models and scripting  and  making the overall system compositional  As a consequence  models can be  developed  tested  and maintained independently of the scripts using them     For more information  see     e Chapter 3     IBM ILOG Script for OPL     on page 87 in this Language User s  Manual     e IBM ILOG Script for OPL in the Language Reference Manual  e The Reference Manual for IBM ILOG Script extensions for OPL       A short tour of OPL    Gives readers a preliminary understanding of the language and shows how OPL  supports linear programming  production planning problem   integer programming   knapsack problem   mixed integer linear programming  a blending problem   and  constraint programming  inventory matching problem   See also The Language  User   s Manual  gt  The application areas  gt  Quadratic programming  and Getting Started  with Scheduling in CPLEX Studio     Linear programming  a production planning example    Explains how OPL expresses LP problems  describes the production planning  problem  presents the elements of a production model  shows how results can b
26.  Java Runtime Environment installed on your  machine  Once it is installed  the JRE is automatically detected at runtime  see the  function 1100p1ImportJava for details   OPL supports versions 5 0 and above of  IBM JDK or JRE     On Unix  the LD_LIBRARY_PATH must also contain the path to the shared libraries of  the Java Virtual Machine  For example   jre 1ib i386 and  jre 1ib i386 client  for Linux     See also Working Environment     Using an external knapsack algorithm    Presents the problem  the code sample  the location of the files  a summary of the  procedure  and the detailed steps     The problem    Gives a summary of the cutstock problem used in this tutorial     This tutorial reuses the same problem and data as the cutstock_main example  described in    The cutting stock problem    on page 106  The main problem consists  of cutting big wooden boards into small shelves to meet customer demands while  minimizing the number of boards used  The subproblem consists of finding the  best new pattern to cut the roll  This is a simple knapsack problem  To solve it  you  are going to use a dedicated algorithm implemented in Java  instead of CPLEX      The code sample  Presents the code sample used in this tutorial     This tutorial shows how to use external functions and work with a run  configuration of the cutstock example     In the code sample    Using an external knapsack algorithm     the  cutstock_ext_main example shows how to call a knapsack dynamic programming  alg
27.  a g      use both types of variables  since sum o in Oils  blend o   g  represents the  amount of gasoline g produced daily     These constraints capture the purchase limitations for each type of oil   forall  o in Oils    ctCapacity   sum  g in Gasolines    Blend o  g   lt   Oil o  capacity     This constraint enforces the capacity limitation on production   forall  o in Oils    ctCapacity   sum  g in Gasolines    Blend o   g   lt   0il o  capacity     These constraints enforce the quality criteria for the gasoline     forall  g in Gasolines    ctOctane   sum  o in Oils     Oil o  octane   Gas g  octane    Blend o  g   gt   0   forall  g in Gasolines    ctLead   sum  o in Oils     Oil o  lead   Gas g  lead    Blend o  g   lt   0     The objective function has four parts  the sales price of the gasoline  the purchase  cost of the crude oils  the production costs  and the adverting costs   maximize  sum  g in Gasolines   o in Oils     Gas g  price   Oil o  price   ProdCost    Blend o   g     sum g in Gasolines  a g      A solution to oil mod    For the instance data given in    Data for the oil blending planning problem  oil dat       on page 42  the optimal solution to this problem is  Final Solution with objective 287750 0000   blend     2088 8889 2111 1111 800 0000    777 7778 4222 2222 0 0000    133 3333 3166 6667 200 0000     a    0 0000 750 0000 0 0000       Exploiting sparsity  Discusses how to exploit the sparsity of large scale problems  beyond the classical  transpo
28.  all    IBM ILOG CPLEX Optimization Studio  OPL Language Users Manual    Copyright notice    Describes general use restrictions and trademarks related to this document and the software described in this  document        Copyright IBM Corp  1987  2011    US Government Users Restricted Rights   Use  duplication or disclosure restricted by GSA ADP Schedule Contract  with IBM Corp     Trademarks    IBM  the IBM logo  ibm com  WebSphere  and ILOG are trademarks or registered trademarks of International  Business Machines Corp   in many jurisdictions worldwide  Other product and service names might be trademarks  of IBM or other companies  A current list of IBM trademarks is available on the Web at Copyright and trademark  information     Adobe  the Adobe logo  PostScript  and the PostScript logo are either registered trademarks or trademarks of Adobe  Systems Incorporated in the United States  and or other countries     Linux is a registered trademark of Linus Torvalds in the United States  other countries  or both   UNIX is a registered trademark of The Open Group in the United States and other countries     Microsoft  Windows  Windows NT  and the Windows logo are trademarks of Microsoft Corporation in the United  States  other countries  or both     Java and all Java based trademarks and logos are trademarks or registered trademarks of Oracle and or its  affiliates     Other company  product  or service names may be trademarks or service marks of others        Copyright IBM Corp
29.  be used instead of   and    Note also that  in data files  the items  can be initialized in any order and the commas can be omitted freely     Tuples  OPL offers a variety of data structures in addition to arrays and sets of  strings  Tuples  a fundamental tool for structuring the application data  offer an  alternative to the traditional approach of representing data in parallel arrays  To  see the use of tuples in OPL  consider the following production planning model  To  meet the demands of its customers  a company manufactures its products in its  own factories  inside production  or buys them from other companies  outside  production      Inside production is subject to some resource constraints  each product consumes a  certain amount of each resource  In contrast  outside production is theoretically  unlimited  The problem is to determine how much of each product should be  produced inside and outside the company while minimizing the overall production  cost  meeting the demand  and satisfying the resource constraints  The example  below  production mod  depicts an OPL model for this problem that uses only the  concepts introduced so far  and production dat presents the data for a specific  instance     A production planning problem  production mod      string  Products      3   string  Resources      3    float Consumption Products   Resources          float Capacity Resources       3   float Demand Products       3   float InsideCost Products           float Outside
30.  can process while minimizing the number of empty  cars to insert to respect the load of the cells     The initial model includes the following elements   e The demand   e The production capacity   e The decision variables   e The constraints   e The data    Chapter 2  The application areas 67    The demand    In the following code extract     int nbCars   sum  c in Confs  demand c     int nbSlots   ftoi floor nbCars   1 1   5       10  slack   5 slots  int nbBlanks   nbSlots   nbCars    range Slots   1  nbSlots    int option Options Confs            The demand element represents the number of cars to build for each type     The nbSlots element is the total number of cars to sequence  This number is  multiplied by ten percent to make sure that it is possible to insert enough null cars  to make the problem feasible     The option array of Boolean values defines the options required for each car type   See Instance data for the car sequencing problem  carseq dat     The production capacity    In the following code extract  the array defines the number of cars that can be  processed for an option in a period of time     tuple CapacitatedWindow    int 1   int u   E  CapacitatedWindow capacity Options            The decision variables  The first decision variable defines the sequence of cars     The second decision variable defines the length of the sequence  that is  the last  non null car     dvar int slot Slots  in AllConfs   dvar int lastSlot in nbCars  nbSlots     The objecti
31.  e explains how you can run this model from the CPLEX Studio IDE and how  some specific IDE features work in the constraint programming context     The CP Optimizer engine can currently solve any model than can be solved by the  CPLEX engine  provided that all the decision variables are discrete  This means  that any modeling object  constraint or expressions  in OPL can be interpreted by  this engine  The reverse is not true  some of the new global expressions and  constraints can be used only in a CP model to be solved with the CP Optimizer  engine     The solving engine  By default  that is  if nothing different is specified   OPL uses  the CPLEX engine to solve an OPL model  To specify that you want your model to  be solved by the CP Optimizer engine  you must start the model with this  statement     using CP     The OPL model  You do not need to learn any new syntax to develop a CP  model  The organization of an OPL model for CP does not change  You define and  manipulate data and decision variables in the same way  For example  to define an  array of integer decision variables indexed by integers from 1 to nbOrders and  taking values between 1 and nbSlabs  you can write     dvar int where 1  nbOrders  in 1  nbSlabs     Modeling constraints and specialized constraints  As for any OPL model   constraints are stated in a constraints    or subject to    block  When the  model is solved by the CP Optimizer engine  you can include some specialized  constraints in this set of 
32.  end to free memory in IBM ILOG Script and interfaces     A complex model may manage separate submodels  data sources  run  configurations  solvers  additional variables to move data between models  and so  on  Accordingly  it is a good practice to systemically terminate these additional  data objects when they are no longer needed  IBM ILOG Script for OPL provides  the end method for the class IloObject  which is inherited by all other IBM ILOG  Script classes  Similarly  the OPL Interfaces APIs have the end method for the class  IloExtractable  which is also inherited by nearly all OPL Interfaces classes     By using the method end to free objects  you greatly improve management of the  total memory in use     For more information and examples  please see the documentation for the classes  IloObject or NoExtractable  and section    Ending objects    on page 111 in the  Language User s Manual     Changing engine parameters    Explains how to change engine parameters to modify the way the engine solves a  model     You can also change the way the engine solves models by changing engine  parameters     In some rare situations  you may want to instruct the engine to use less memory     To do so  set the MemoryEmphasis parameter to true  In the IDE  this parameter is in  the Mathematical Programming Emphasis page of the project settings panel     Chapter 5  Performance and memory usage 139       Type parameter description filter z 3 oO                General  Conflicts  o  Feaso
33.  expressions are supported by the CP Optimizer  engine for CP combinatorial and scheduling models  See Constraints available  in constraint programming in the Language Reference Manual     7  Parameters  You can set various parameters for propagation control  log  control  search control  and so on  See Constraint programming options in  Parameters and settings in OPL     8  Propagation  Constraints in CP model are propagated at execution time by the  CP solving engine  Constraint propagation is the process of communicating  the domain reduction of a decision variable to all of the constraints that are  stated over this variable  This process can result in more domain reductions   These domain reductions  in turn  are communicated to the appropriate  constraints  This process continues until no more variable domains can be  reduced or when a domain becomes empty  In the latter case  an empty  domain means that the model has no solution     4 OPL Language User   s Manual    9  Search  To find a solution  the CP Optimizer search functionality implicitly  generates combinations of values for decision variables by means of  constructive strategies  these strategies are executed and guided towards  optimal solutions in order to converge rapidly  The CP Optimizer search uses  a variety of guides and uses the most appropriated one depending on the  model structure and on constraint propagation  The powerful default search  gives satisfactory results in most cases but in specific cas
34.  for external  functions 126  knapsack algorithm 126    Java  continued   translation of parameters and  results to and from IBM ILOG  Script 128  using the code from OPL 127  Java Virtual Machine  call to external functions 129  ODM Home 129  OPL Home 129  JAVA_HOME  environment variable 129  JAVA_HOME environment variable 129  JavaScript standard 87    K    keywords   invoke 132   prepare 132  knapsack problem   as subproblem of cutting stock   problem 126   description 19   feasible vs  final solutions 21  Knapsack  constructor of the Java   knapsack algorithm 127    L    lazy initialization of data 97  LD_LIBRARY_PATH environment  variable 126  linear programming  and sparsity 43  blending problem 41  definition 2  11  37  description with example 10  multiperiod production planning 39  piecewise 57  product mix problem 33  production planning problem 38  volsay model 10  vs  piecewise linear 59  linear relaxation 55  logical constraints  inCP 7  in the vellino problem 63  used to express an objective 85  lower and upper bounds  in IloConstraint class 104  in IloNumVar class 105    M    main  IBM ILOG Script block  defining 99  example for CP problem 95  example for CPLEX problem 95  warmstart example 113  115  mainEndEnabled setting 111  makespan  time tabling example 74  master model 106  107  mathematical programming 1  and modeling languages 1  definitions 2    mathematical programming  continued   vs  constraint programming 5  max  OPL keyword  inCP 8  memory allocat
35.  have to be cut     The whole process involves solving the master and the subproblem iteratively  At  each iteration  a new cutting pattern is added  then the master problem is solved  again from this new pattern  As there is more freedom in the way the boards are  cut  a better solution may be found  The submodel uses a reduced cost objective so  that only the patterns that could improve the total cost are generated     Note   Although this reduced cost objective is explained by the simplex theory  it is not    necessary to fully understand this theory to follow how the cutting stock example  works     Where to find the files    You will work with the files listed below  in Table 1  to solve a column generation  problem  You can find them at the following location      lt Install_dir gt  op  examples op1 cutstock    where  lt Instal1_dir gt  is your installation directory     Table 12  Files for the cutting stock example    cutstock_main mod The model definition for the master model  it  also contains the flow control script    cutstock_main_elements mod Similar to cutstock_main mod but uses  IloOp DataElements for the data of the  submodel    cutstock dat The initial data for the master model   cutstock sub mod The definition of the submodel    Procedure summary    Explains how to work with a master model and a submodel  Procedure    To work through model decomposition   1  Prepare the submodel     Chapter 3  IBM ILOG Script for OPL 107    2  Solve the master model     3  U
36.  if relaxed according to that  relaxation  was installed  The relaxation is  optimal        122    This status occurs only with the parameter  feasoptmode set to 2 on a mixed integer  problem  A relaxation was successfully  found and a feasible solution for the  problem  if relaxed according to that  relaxation  was installed  The relaxation is  minimal        123          This status occurs only with the parameter  feasoptmode set to 3 on a mixed integer  problem  A relaxation was successfully  found and a feasible solution for the  problem  if relaxed according to that  relaxation  was installed  The relaxation is  optimal        92 OPL Language User   s Manual          Code number Solution status       124 This status occurs only with the parameter  feasoptmode set to 4 on a mixed integer  problem  A relaxation was successfully  found and a feasible solution for the  problem  if relaxed according to that  relaxation  was installed  The relaxation is  minimal     125 This status occurs only with the parameter  feasoptmode set to 5 on a mixed integer  problem  A relaxation was successfully  found and a feasible solution for the  problem  if relaxed according to that  relaxation  was installed  The relaxation is  optimal        126 This status occurs only after a call to  feasOpt  when the algorithm terminates  prematurely  for example after reaching a  limit     This status means that a relaxed solution is  available and can be queried        127 The problem under considerat
37.  in simplifying the models for a variety of applications     An inventory application with piecewise linear functions  Describes the problem  with its solution  and presents the model and data files     This section introduces piecewise linear programs using an inventory application   This piecewise linear application is adapted from Applications and Algorithms by W   Winston  see the Bibliography      The company Sailco must determine how many sailboats to produce over four  time periods  The demand for the four periods is known  40  60  75  25  and  in  addition  an inventory of ten boats is available initially  In each period  Sailco can  produce 40 boats at a cost of  400 per boat  Additional boats can be produced at a  cost of  450 per boat  The inventory cost is  20 per boat and per period     A simple  inventory model  sailco mod     describes a linear program for this application and     Data for the simple inventory model  sailco dat      on page 58describes the  instance data     A simple inventory model  sailco mod     int NbPeriods  range Periods      1  NbPeriods   float Demand Periods          float RegularCost      3  float ExtraCost          float Capacity          float Inventory          float InventoryCost           dvar float  RegulBoat  Periods    dvar float  ExtraBoat Periods    dvar float  Inv    NbPeriods       minimize  RegularCost      sum  t in Periods   RegulBoat t       ExtraCost      sum  t in Periods   ExtraBoat t         Chapter 2  The applicat
38.  location problem  a fixed charge problem  and integer relaxation     What is integer programming   Integer programming is the class of problems defined as the optimization of a  linear function subject to linear constraints over integer variables     Chapter 2  The application areas 47    Integer programs are  in general  much harder to solve than linear programs and  the size of integer programs that can be solved efficiently is much smaller than  that of linear programs  This section reviews a number of typical integer programs     Set covering  Describes the problem and presents the model and data files     Consider selecting workers to build a house  The construction of a house can be  divided into a number of tasks  each requiring a number of skills  e g   plumbing  or masonry   A worker may or may not perform a task  depending on skills  In  addition  each worker can be hired for a cost that also depends on his  qualifications  The problem consists of selecting a set of workers to perform all the  tasks  while minimizing the cost  This is known as a set covering problem  The key  idea in modeling a set covering problem as an integer program is to associate a  0 1 variable with each worker to represent whether the worker is hired  To make  sure that all the tasks are performed  it is sufficient to choose at least one worker  by task  This constraint can be expressed by a simple linear inequality     The example covering mod describes a set covering model for this proble
39.  model definition  write   var def   produce modelDefinition     Note     All the scalar elements that are in the  dat file  string  int  float  are copied  whereas complex data such as arrays  sets  and tuples are shared  In other words   scalar data elements are passed by value while nonscalar data is passed by  reference     Data elements and data publishers    When calling the method dataElements on an IloOplModel instance  you obtain a  container of all the data elements of this model  This container does not include  the data source publishers  if the IoOplModel instance has been created by means  of a data source that contained publishers  these publishers will not be included in  the data elements structure  For example  if you have created an IloOplModel  instance with a  dat file containing a publisher like     result to DBUpdate  db  INSERT INTO writeOPL id  VALUES           and you want to use the same publisher on another IloOplModel instance  you  must use a specific  dat file containing only the publishers and add it to the new  IloOplModel  as shown in Reusing data source publishers     Reusing data source publishers    main    var Source   new I1o0p ModelSource  writeDB mod      var Def   new I100p 1ModelDefinition Source     var Cplex   new IloCplex     var Data   new I1o00p1DataSource  writeDBfromScript dat        var Op    new I100p1Model  Def  Cplex     Op1 addDataSource  Data    Cplex solve      var DataElts   Opl dataElements     var 0p12   new I100p1Mo
40.  postProcess          Tutorial  Changing default behaviors in flow control    Describes how to achieve finer control on the execution of a CPLEX model by  using flow control scripts to change the default behavior     What you are going to do    Includes where to find the files     This tutorial covers     e Setting an initial solution for the CPLEX engine explains how to use the class  IloOplCplexVectors to pass an initial solution to the CPLEX solving engine  before executing the model     e Setting preferences on the search for conflicts and relaxations explains how to  use the class IloOplConflictIterator to refine a conflict with user defined  preferences    Important   The search for conflicts and relaxations is not supported in CP models     Where to find the files    In this tutorial  you will work with the conflictIterator and warmstart examples   which you can find at the following location      lt Install_dir gt  op  examples op1 conflictIterator   lt Install_dir gt  op  examples op1 warmstart    where  lt Instal1_dir gt  is your installation directory     Setting an initial solution for the CPLEX engine    Uses the warmstart example and its model warmstart mod to show how you can  use the IBM ILOG Script extension class IloOplCplexVectors to set up an initial  solution for CPLEX on a specific part of the model     The warmstart model  Presents the variables and constraints of warmstart mod     The warmstart mod model file defines the following variables and constra
41.  problems  Of course   summations of such functions  possibly on different variables  are also appropriate   Similar considerations apply to constraints  A convex piecewise linear function may  appear on the left hand side of an  lt  inequality and on the right hand side of an    Chapter 2  The application areas 61      inequality  A concave piecewise linear function may appear on the right hand  side of an  lt  inequality and on the left hand side of an 2 inequality  In other cases   the piecewise linear program is transformed into a mixed integer linear program     minimize maximize    Figure 1  Piecewise linear functions leading to linear programs       Applications of constraint programming    Defines constraint programming and describes a column generation problem   vellino example   a production problem  car sequencing example   a time tabling  problem  time tabling example   and an introductory scheduling problem     What is constraint programming   Provides a brief definition of constraint programming   Constraint programming consists of optimizing a function subject to logical   arithmetic  or functional constraints over discrete variables or interval variables  or  finding a feasible solution to a problem defined by logical  arithmetic  or functional  constraints over discrete variables or interval variables     See    Constraint programming    on page 3 for more information     For an introduction to scheduling in OPL using constraint programming  see  Getting Star
42.  profiler mod example contains two semantically equivalent  initializations     Two ways of initializing arrays  int Valuesl r   r    execute INIT _Valuesl      Chapter 1  Introduction to OPL 31    for  var i inr   for  var j inr   if  i    2 j    Valuesl i  j    i j   writeln Values1     int Values2 i in r  j in r     i  2 j    i j   0     execute INIT Values2    writeln Values2           Initialization of Values2 is much faster than initialization of Values1  as shown by  the profiling facility described in Profiling the execution of a model in IDE  Tutorials     Generic arrays    It is recommended to use generic arrays  or generic indexed arrays  whenever  possible because they make the model more explicit and readable     Other modeling tips    Collects miscellaneous modeling tips that are already mentioned elsewhere in the  documentation set     Labeling constraints    It is recommended to give labels to constraints but be aware of the performance  cost  See section Cost of Labeling constraints in the Language Reference Manual     Tuples of parameters    The general expression  p ins    where S is a set of tuples containing n fields  can be replaced by a formal  parameter expression     lt pl     pn gt  in S    for more readability  For more information on tuples of parameters  see Formal  parameters in the Language Reference Manual     CPLEX infinity value    For CPLEX  the value of  infinity  is 1e 20  When CPLEX encounters a larger  value  it silently truncates the va
43.  r discipline x     1    sum o in InstanceSet   1    PossibleRoom o discipline x     Start o   gt   Start r      Start o   lt  End r      room o     ord Room x     lt  2      5  Possibly  constrain the classes on the same pattern  so that they do not follow  two courses simultaneously   forall r in InstanceSet  x in Class     if r Class    x    sum o in InstanceSet   o Class    x    1     Start o   gt   Start r    Start o   lt  End r      lt  2        Adding side constraints  How to add a set of constraints to control the search     About this task    In order to produce a more realistic schedule  you can add a set of constraints that  constrain the search to follow room preferences and teacher skills  and to produce  more practical time tables     Procedure    To add side constraints   1  Make sure that the chosen room handles the discipline taught     forall r in InstanceSet   room r  in PossibleRoomIds r discipline       where PossibleRoomlds is a table of integer sets defined as      int  PossibleRoomIds d in Discipline      i   i in RoomId  z in Room   PossibleRoom d z     1   amp  amp   i    ord Room z      and PossibleRoom is a bi dimensional table of Boolean values specifying which  room can support which discipline     72 OPL Language User   s Manual    int PossibleRoom d in Discipline  x in Room      lt x d gt  in DedicatedRoomSet           card   lt z k gt    z in Room  k in Discipline      lt x k gt  in DedicatedRoomSet        lt z d gt  in DedicatedRoomSet       
44.  set of strings called Resources to represent the raw ingredients  of flour and eggs     Integer programming  a warehouse location problem  Describes the problem and presents the model and data files     Warehouse location is a typical discrete optimization problem  A company is  considering a number of locations for building warehouses to supply a set of  stores  Each possible warehouse has a fixed operating cost and a maximum  capacity specifying how many stores it can support  In addition  each store must  be supplied by exactly one warehouse and the cost to supply a store depends on  the warehouse selected  The model consists of choosing which warehouses to  build and which warehouse to assign to each store in order to minimize the total  cost  i e   the sum of the fixed and supply costs  Consider an example with five  warehouses and ten stores  The fixed costs for the warehouses are all identical and  equal to 30  The instance data for the problem  shown in the table below  reflects  the transportation costs and the capacity constraints defined in the data file  warehouse  dat     Table 3  Instance data for the warehouse location problem                                        Warehouses Bonn Bordeaux London Paris Rome  Capacity 1 4 2 1 3  storel 20 24 11 25 30  store2 28 27 82 83 74  store3 74 97 71 96 70  store4 2 55 73 69 61  store5 46 96 59 83 4  store6 42 22 29 67 59  store7 1 5 73 59 56  store8 10 73 13 43 96  store9 93 35 63 85 46  store10 47 65 55 71 95           
45.  such as   var phasel   f searchPhase new Array x 1  x 2        Writing script statements to define search phases  The model steelmill mod shows this feature     To define a search phase  you write a script statement after the declaration of  decision variables and before the constraint block  as shown below     Location of the search phase script statement  stee mi11 mod     dvar int where 1  nbOrders  in 1  nbSlabs   dvar int load 1  nbSlabs  in 0  maxLoad     execute    writeln  loss      loss    writeln  maxLoad      maxLoad    writeln  maxCap      maxCap         execute    cp param Workers      1   cp param LogPeriod      50     execute    var f   cp factory   cp setSearchPhases f searchPhase where             dexpr int totalLoss   sum s in 1  nbSlabs  loss load s       minimize totalLoss   subject to    packCt  pack load  where  weight    forall s in 1  nbSlabs   colorCt  sum  c in 1  nbColors   or o in 1  nbOrders   colors o     c   where o     s    lt   2        Multiple search phases  Explain how to pass several search phases to the engine     You can pass several search phases to an instance of the CP Optimizer engine  The  order of the search phases in the array is significant  The search engine instantiates  the variables phase by phase  starting with the first one  It is not necessary that the  variables in the search phases cover all the variables of the problem  It can be  assumed that a search phase containing all the problem variables is implicitly    Chapter
46.  the new master model and regenerating its  optimization model  Provides the syntax     Using these modified data elements  create a new master problem and generate its  optimization model     masterOp    new Ilo0p1Model  masterDef  masterCplex     masterOp  addDataSource masterData     masterOp1 generate       110 OPL Language User   s Manual    Doing    You can see the complete version of this model in the file cutstock_main mod     Ending objects  Discusses the use of the end method to terminate objects that are no longer  necessary     The cutstock_main example also shows how to end the different script elements   Although memory leaks are not so much of a concern in this small example  it is  good practice to use the end method of the class IloOplModel to systematically  terminate objects that are no longer necessary  See IloOplModel  in the IBM ILOG  Script Reference Manual for details     The end method is disabled by default in the CPLEX Studio IDE and can be  enabled by setting mainEndEnabled to true  At the beginning of your script  add     thisOp Model settings mainEndEnabled   true     We recommend that you use caution in applying this setting  When it is enabled   you must ensure that memory is properly managed by your script  Faulty memory  management  such as attempting to use an object after it has been deleted  may  result in crashes     more with cutstock_main    Shows further work with the cutstock_main example  such as integer solution or  executing postpr
47.  the relevant instance data     Table 5  Octane and lead data for the blending problem                               Octane Lead Content Octane Lead  Rating Rating Contents  super greater than   less than or crudel 12 0 5  or equal to 10   equal to 1  regular greater than   less than or crude2 6 2 0  or equal to 8   equal to 2  diesel greater than   less than or crude3 8 3 0  or equal to 6   equal to 1             The company must also satisfy its customer demand  which is 3 000 barrels a day  of super  2 000 of regular  and 1 000 of diesel  The company can purchase 5 000  barrels of each type of crude oil per day and can process at most 14 000 barrels a  day  In addition  the company has the option of advertising a gasoline  in which  case the demand for this type of gasoline increases by ten barrels for every dollar  spent  Finally  it costs four dollars to transform a barrel of oil into a barrel of  gasoline  The model is depicted in the example 0i1 mod and the instance data is  shown in 0i1 dat     An oil blending planning problem  0i1 mod      string  Gasolines      3   string  Oils      3  tuple gasType     float demand    float price    float octane    float lead        Chapter 2  The application areas 41    tuple oilType    float capacity   float price   float octane   float lead         gasType Gas Gasolines       3  oilType Oil Oils          float MaxProduction         float ProdCost           dvar float  a Gasolines    dvar float  Blend 0ils   Gasolines      maximi
48.  the same parameter  the value set in  the script statement takes precedence  For an example  see Executing preprocessing  scripts in Using IBM ILOG Script for OPL     For more information    See also the description of class IloOpI Settings in the Reference Manual of IBM ILOG  Script Extensions for OPL     Flow control  Flow control scripting enables you to control how models are instantiated and  solved     Flow control scripting enables you to control how models are instantiated and  solved  You can use it in addition to pre  and postprocessing  More specifically  it  enables you to use several models with different data  to run multiple    solve    on a  model  and to modify the model data between one solve and the next  It is  particularly useful when you want to solve a model with modified data several  times  or if you want to use different models to solve your problem  model  decomposition      94 OPL Language User   s Manual    Examples   Mathematical programming  CPLEX engine     A main block in an MP model     model generate    if  cplex solve      var  obj cplex getObjValue    opl postProcess         Constraint programming  CP Optimizer engine     Two different main blocks in a CP model     model generate    if  cp solve      var obj cp getObjValue    model postProcess         Or  to find all solutions     model generate    cp startNewSearch    while   cp next      model postProcess         For more information    The design of the OPL extensions to IBM ILOG Scrip
49.  the variables  OPL can efficiently solve large instances of linear programs     Chapter 2  The application areas 37    A production problem  Uses again the model production mod     Consider again the production planning problem first presented in the section     Tuples    on page 15  The model production mod  and the instance data   production dat are shown again in the examples below     A Production planning problem  production mod      string  Products      3   string  Resources      3    float Consumption Products   Resources       3  float Capacity Resources       3   float Demand Products       3   float InsideCost Products       3   float OutsideCost Products       3    dvar float  Inside Products     dvar float  Outside Products      minimize  sum  p in Products      InsideCost p     Inside p    OutsideCost p    Outside p        subject to    forall  r in Resources    ctCapacity   sum  p in Products    Consumption p  r    Inside p   lt   Capacity r      forall p in Products   ctDemand   Inside p    Outside p   gt   Demand p         Instance data for the production planning problem  production dat     Products      kluski    capellini    fettucine      Resources      flour    eggs        Consumption      0 5  0 2    0 4  0 4    0 3  0 6      Capacity     20  40      Demand     100  200  300     InsideCost     0 6  0 8  0 3    OutsideCost     0 8  0 9  0 4    ils    The model aims at minimizing the production cost for a number of products while  satisfying customer dem
50.  the warehouse selected  The application consists of choosing  which warehouses to build and which of them should supply the various stores in  order to minimize the total cost  i e   the sum of the fixed and supply costs  The  instance used in this section considers five warehouses and 10 stores  The fixed    Chapter 2  The application areas 49    costs for the warehouses are all identical and equal to 30  Table 7 depicts the  transportation costs and the capacity constraints     Table 7  Instance data for the warehouse location problem                                        Bonn Bordeaux London Paris Rome   capacity 1 4 2 1 3   storel 20 24 11 25 30  store2 28 27 82 83 74  store3 74 97 71 96 70  store4 2 55 73 69 61  stored 46 96 59 83 4   store6 42 22 29 67 59  store7 1 5 73 59 56  store8 10 73 13 43 96  store9 93 35 63 85 46  store10 47 65 55 ZA  95                         The key idea in representing a warehouse location problem as an integer program  consists of using a 0 1 variable for each  warehouse  store  pair to represent  whether a warehouse supplies a store  In addition  the model also associates a  variable with each warehouse to indicate whether the warehouse is selected  Once  these variables are declared  the constraints state that each store must be supplied  by a warehouse  that each store can be supplied by only an open warehouse  and  that each warehouse cannot deliver more stores than its allowed capacity  The most  delicate aspect of the modeling is ex
51.  using the following code   var subData   new Ilo0plDataElements        subData RollWidth   master0pl RollWidth   subData Size   master0pl Size     The array Duals is now declared in the post processing of the master model and  we pass it to the sub model as follows     subData Duals   master0p  Duals   IloOplRunConfiguration    Alternatively  the class IloOpIRunConfiguration could be used to create an  IloOplModel instance in a straightforward manner by just passing the file names as  arguments  as follows    var subSource   new I100p1 ModelSource  cutstock sub mod       var subDef   new I100p ModelDefinition subSource      var subData   new Ilo0p 1DataElements      var subCplex   new IloCplex       108 OPL Language User   s Manual    After the run configuration is created  you can access the I100p1Model instance  using the op Model property  as follows     sub0p  generate       Using model and data file instances  You can also create the IloOplModel  instance for the submodel    from scratch     using a model source  model definition   and data source  see the list in Table 12 on page 107     var subSource   new I1o0p ModelSource  cutstock sub mod       var subDef   new I100p1ModelDefinition subSource      var subCplex   new IloCplex       Solving the master model  Provides the syntax     The master model is contained in the following variables     var masterDef   thisOp  Model  modelDefinition   var masterCplex   cplex   var masterData   thisOpIModel dataElements        Cr
52.  will see a normal Java object  of class MyClass      Creation of the Java Virtual Machine  JVM     When the calls are executed     e Either there is a JVM running  this is the case for ODM Enterprise applications   the IDE in ODM Enterprise mode  custom Java applications  Then  the call is  performed within the current JVM     e Or there is no JVM running  this is the case for the IDE in pure OPL mode and  for oplrun  Then  a new JVM is created     The JVM is initialized at the first call  To create the JVM  the runtime process must  find both the Java home and the OPL home to access the OPL   jar file  If ODM  Enterprise is installed  the process must also find the ODM Enterprise home to  access the ODM Enterprise   jar files  so that the ODM Enterprise scripting works   These environment variables are detected automatically  See the Java API Reference  Manual for details     If a new JVM is created  it receives the value of the environment variable  ODMS_JAVA_ARGS as parameter  if this variable is defined  This variable is also  already taken into account if the JVM is started by the IDE  IDE in ODM  Enterprise mode  or in an ODM Enterprise application  This enables you to  customize the way in which the JVM is created  for example by adding more  virtual memory  customizing the default classpath  and so on     Deploying OPL models with external Java function calls on Linux    When deploying OPL models that make external Java function on Linux platforms    the following in
53.  windows size 5   dvar interval facade size 10   dvar interval garden size 5   dvar interval moving size 5     In this example  certain tasks can start only after other tasks have been completed   IBM ILOG OPL allows you to express constraints involving temporal relationships  between pairs of interval variables using precedence constraints     Note   Precedence constraints    Precedence constraints are used to specify when one interval variable must start or  end with respect to the start or end time of another interval  The following types  of precedence constraints are available  if act1 and act2 denote interval variables   both interval variables are present  and delay is a number or integer expression  0  by default   then     e endBeforeEnd a  b  delay  constrains at least the given delay to elapse between  the end of a and the end of b  It imposes the inequality endTime a    delay  lt    endTime b     e endBeforeStart a  b  delay  constrains at least the given delay to elapse between  the end of a and the start of b  It imposes the inequality endTime a    delay  lt    startTime b      e endAtEnd a  b  delay  constrains the given delay to separate the end of a and  the end of ab  It imposes the equality endTime a    delay    endTime b      e endAtStart a  b  delay  constrains the given delay to separate the end of a and  the start of b  It imposes the equality endTime a    delay    startTime b      e startBeforeEnd a  b  delay  constrains at least the given delay to ela
54. 0 3  0 4    0 3  0 6    gt          Capacity     20  40       In the model  the instruction    tuple productData    float demand   float insideCost   float outsideCost   float consumption Resources            declares a tuple type with four fields  The first three fields  of type float  are used  to represent the demand and costs of a product  the last field is an array  representing the resource consumptions of the product  These fields are intended to  hold all the data related to a given product     The instruction  ProductData product Products            declares an array of these tuples  one for each product     The model also contains two arrays of decision variables to represent the inside  and outside production  respectively  There is an objective function to minimize the  total production cost  and there are two types of constraints  a set of constraints to  avoid exceeding the capacity limitation  and another set of constraints to satisfy the  demand requirements     Initialization of the data given in product dat for one instance of this problem  specifies these various data items  to initialize the tuples  values are given for each  of their fields     Product         kluski    lt  100  0 6  0 8    0 5  0 2    gt    capellini    lt  200  0 8  0 9    0 4  0 4   gt    fettucine    lt  300  0 3  0 4    0 3  0 6    gt            34 OPL Language User   s Manual    In the data file we use a set of strings called Products to represent the varieties of  pasta and another
55. 00000000   IntervalSequenceInferenceLevelLow  Basic  Medium  Basic  Extended   LogPeriod 1000   LogVerbosity Quiet  Terse  Normal  Normal  Verbose   MultiPointNumberOfSearchPoints 30   NoOverlapInferenceLevel Low  Basic  Medium  Basic  Extended   OptimalityTolerance le 15   PrecedenceInferenceLevel Low  Basic  Medium  Basic    Extended             Chapter 3     IBM ILOG Script for OPL 117    Table 13  IBM ILOG Script CP parameters  continued                                            Parameter Possible Values Default Value  PropagationLog Quiet  Terse  Normal  Quiet  Verbose  RandomSeed 0  RelativeOptimalityTolerance 0  RestartFailLimit 100  RestartGrowthFactor 1 05  SearchType DepthFirst  Restart  Auto  MultiPoint  Auto  SolutionLimit 2100000000  StateFunctionInferenceLevel   Low  Basic  Medium  Basic  Extended  TimeLimit Infinity  number in seconds   Workers 1 to 4 1             Defining search phases    To define search phases in OPL  you can use only IBM ILOG Script statements   This section explains how     What is a search phase   Introduces the notion of a search phase     In constraint programming  a search phase is a way to guide search types     One method of tuning the search is to use a search type other than the default  search type  You can do this either from the IDE settings editor or by changing a  CP parameter from IBM ILOG Script  as described in    Setting CP parameters    on  page 116     Another way is to guide the search types with search phases  A sear
56. 05 Node limit has been exceeded but integer  solution exists    106 Node limit has been reached  no integer       solution           Chapter 3  IBM ILOG Script for OPL 91       Code number    Solution status       107    Time limit exceeded  but integer solution  exists        108    Time limit exceeded  no integer solution        109    Terminated because of an error  but integer  solution exists        110    Terminated because of an error  no integer  solution        111    Limit on tree memory has been reached  but  an integer solution exists        112    Limit on tree memory has been reached  no  integer solution        113    Stopped  but an integer solution exists        114    Stopped  no integer solution        115    Problem is optimal with unscaled  infeasibilities        116    Out of memory  no tree available  integer  solution exists        117    Out of memory  no tree available  no integer  solution        118    Problem has an unbounded ray        119    Problem has been proved either infeasible or  unbounded        120    This status occurs only with the parameter  feasoptmode set to 0 on a mixed integer  problem  A relaxation was successfully  found and a feasible solution for the  problem  if relaxed according to that  relaxation  was installed  The relaxation is  minimal        121    This status occurs only with the parameter  feasoptmode set to 1 on a mixed integer  problem  A relaxation was successfully  found and a feasible solution for the  problem 
57. 2  Ensure that a given teacher has the required skills to teach a course     forall r in InstanceSet   teacher r  in PossibleTeacherlds r discipline      where PossibleTeacherlds is defined as      int  PossibleTeacherlds d in Discipline      i   i in TeacherId  z in Teacher    i    ord Teacher  z    amp  amp  d in PossibleTeacherDiscipline z      and maps discipline names to the set of the indices for teachers who are  capable of teaching this discipline  and PossibleTeacherDiscipl ine is defined  as      string  PossibleTeacherDiscipline x in Teacher     d    lt x d gt  in TeacherDisciplineSet     and maps each teacher to the set of disciplines he can teach     3  Ensure that  for a given class and a given discipline  the teacher remains the  same   forall c in Class  d in Discipline  r in InstanceSet    r Class    c  amp  amp  r discipline    d   teacher r     classTeacher c  d    where the additional classTeacher array is modeled as   dvar int classTeacher Class Discipline  in TeacherId     teacher working once per time point    4  Ensure that  if a course spans more than one unit of time  it does not cross  half day boundaries     forall i in InstanceSet   i Duration  gt  1    Start i  div HalfDayDuration       End i  1  div HalfDayDuration       Because the model contains only classes that fit half days  it is not necessary to  write a similar    same day    constraint     To also avoid having one discipline taught immediately after another  the data  file contains a se
58. 29  ODMS_JVM_LIBRARY_OVERRIDE  environment variable 129  operator  aggregate 12  OPL settings  setting in script 94  oplModel property 108  OPLROOT environment variable 129  opportunity cost 47  optimization problem  how to specify 10  order  between IDE  scripting values of  parameters 89  for processing script blocks 96  of indexers 31  of search phases 119  output file  writing to 103    P    packing constraint 25  parameters   precedence between IDE value and   script value 89   piecewise linear programming 57   complexity issues 61   vs  linear programming 59  planning a production 38  39  platforms   AIX 125  postProcess method   IloOplModel class 96  postprocessing   and scripting 88   on demand execution 111   solutions of time tabling project 75  postprocessing solution access 122  prepare  OPL keyword 132  preprocessing 43   and scripting 88   setting parameters 89  prerequisites   for external functions 126  printConflicts   IBM ILOG Script method 116  printRelaxation   IBM ILOG Script method 116  processing order 96  product mix problem 33  production code sample 89  production planning problem 10  38   a MILP model 55   and flow control 98   another model 16   multiperiod 39   using arrays 11    149    Index    production planning problem  continued   using tuples 15  profiler 31  projects  creating model instances through  scripting 108  definition 13  properties  oplModel 108  PSD  Positive Semi Definite  problems 5  publishers of data sources 100    Q    quadr
59. 93  changing CPLEX parameters 89  changing OPL parameters 94    customizing CP search strategy 74    defining a search phase in CP 69  scope of variables 96    syntax of pre  and postprocessing 88    to display results 18    148 OPL Language User   s Manual    external data  and scripting 102  external Java function calls 129    F    feasible solutions   vs  final solution 21  files    ops 108   blending example 21   carseq example 67   knapsack example 19   mulprod 98   steelmill example 24   timetabling example 70   transportation example 27   vellino example 63   writing to an output file 103  filtering   in tuples of parameters 27  fixed charge production problem 52  flow control 98   basic script 105   definition 94   thisOplModel variable 109  flow problem  multicommodity 43  forall  statements   in car sequencing example 68  functions   using OPL functions in scripting   statements 87    G    gap measure  none in CP 9   generic arrays 32   getBasisStatus method  IloOplCplexBasis class 114  IloOplCplexBasisclass 47   getVectors method  TloOplCplexVectors class 114    IBM ILOG Script  defining CP search phases 118  external functions 128  flow control 98  in data files 132  introduction 9  87  purpose 125  relaxations and conflicts 116  setting CP parameters 117  variables  declaration 97  wrapping calls to external  functions 130  IloConstraint class  lower and upper bounds 104  setCoef method 105  IloCp class 93  IloCplex  status  getCplexStatus 89  IloCplex class 89  
60. After this call  the CPLEX instance is ready to solve     Solving the current optimization model  Presents the solve   function     To solve the current optimization model  just call the solve   function on the  IloCplex instance  This function returns true or false depending on whether a  solution has been found  If a solution is found  you can ask for the objective value  as follows   if   cplex solve         curr   cplex getObjValue      writeln      writeln  OBJECTIVE    curr     ofile writeln  Objective with capFlour      capFlour    is    curr          else    writeln  No solution      break          Getting the data elements from an IloOpIModel instance  Defines data elements and explains how to access them     What are data elements     You cannot directly change the data in a    data source     A data source represents  what is in a  dat file and the only way to change it would be to modify the  dat  file  However  you can ask for another editable view of the data  This other view is  referred to as the    data elements    of the OPL model  These data elements can be  modified and then used as a data source for another model     100 OPL Language User   s Manual    Using data elements    In the mulprod_main example  you want to get the data from the current model at  each successful iteration  modify it  and use it to solve another optimization model     1  To get the elements of the IloOplModel instance  write   var data   produce dataElements    2  To reuse the same
61. Cost Products            dvar float  Inside Products     dvar float  Outside Products      minimize  sum  p in Products      InsideCost p    Inside p    OutsideCost p    Outside p        subject to    forall  r in Resources    ctCapacity   sum  p in Products    Consumption p  r    Inside p   lt   Capacity r      forall p in Products   ctDemand   Inside p    Outside p   gt   Demand p      An instance of the problem must specify the products  the resources  the capacity  of the resources  the demand for each product  the consumption of resources by  the different products  and the inside and outside costs of each product  These  various data items are specified in the standard way in production dat below  The  model contains two arrays of variables  element Inside p   respectively  Outside p   represents the inside  respectively outside  production of product p   The objective function specifies that the production cost must be minimized     Data for the production planning problem  production  dat     Chapter 1  Introduction to OPL 15    Products      kluski    capellini    fettucine      Resources      flour    eggs        Consumption      0 5  0 2    0 4  0 4    0 3  0 6      Capacity     20  40      Demand     100  200  300     InsideCost     0 6  0 8  0 3    OutsideCost     0 8  0 9  0 4    1     The production cost is simply the sum of the individual production costs  which  are obtained by multiplying the inside and outside productions of the given  product by their resp
62. ISPLAY RESULTS     writeln  Open    Open      writeln  Storesof   Storesof            The most delicate aspect of the modeling is expressing that a warehouse can  supply a store only when it is open  These constraints can be expressed by  inequalities of the form    supply w  s   lt   open w      which ensure that when warehouse w is not open  it cannot supply store s  This  follows from the fact that open w     0 implies supply w  s     0  In fact  these  constraints can be combined with the capacity constraints to obtain  forall  w in Warehouses  s in Stores    ctUseOpenWarehouses   Supply s   w   lt   Open w    forall  w in Warehouses    ctMaxUseOfWarehouse   sum  s in Stores    Supply s  w   lt   Capacity w      This formulation implies that a closed warehouse has no capacity     The statement declares the warehouses and the stores  the fixed cost of the  warehouses  and the supply cost of a store for each warehouse  The problem  variables    dvar boolean Supply Stores   Warehouses       represent which warehouses supply the stores  i e   supply s   w  is 1 if warehouse  w supplies store s  and zero otherwise     The objective function  minimize  sum  w in Warehouses    Fixed   Open w     sum  w in Warehouses   s in Stores    SupplyCost s   w    Supply s   w      36 OPL Language User   s Manual    expresses the goal that the model minimizes the fixed cost of the selected  warehouse and the supply costs of stores     The constraint    forall  s in Stores    ctEachStoreHasO
63. OPL code is straightforward  and is  presented in the files      lt Install_dir gt  op  examples op1 models Portfolio portfolio mod   lt Install_dir gt  op  examples op  models Portfolio portfolio dat    r i  is modeled in OPL as   float Return Investments       3    COV is defined as     float Covariance Investments   Investments          p is    float Rho          X is     dvar float Allocation Investments  in FloatRange     TR and TV are calculated by     float TotalReturn   sum i in Investments  Return i  Allocation i    float TotalVariance   sum i j in Investments  Covariance i  j  Allocation i  Allocation j      The file portfolio dat contains 20 investment assets  for which a vector R and a    matrix COV are defined  Rho takes N values from 0 to 1  N being defined by the  user     Chapter 5  Performance and memory usage 145    146 OPL Language User   s Manual       Index  A    abs  OPL keyword  inCP 8  aggregate operators 12  AIX platforms 125  algebraic notation 1  all  OPL keyword 25  arrays  constraint value pair  IBM ILOG  Script  113  index sets 11  initialization  IBM ILOG Script  88  modeling tips 31    bins  in the vellino problem 62  blending problem 21  41  bounds   changing  in a CPLEX constraint 104  branch and bound algorithm 55    C    C   API  custom linked applications and JVM  creation 129   capacities  of resources  in production planning  problem 15   car sequencing example  data 69  enhancing the model 69  model description 67  tutorial 67   carseq 
64. a domain  The product of all domain sizes makes up the  search space  CP models are further characterized by specific constraints and  expressions  and parameterizable propagation  and search     If you already have experience of constraint programming with OPL 3 x  read also  Data preprocessing in Migration from OPL 3 x  CP projects      Here are the basics of using constraint programming in an OPL model  Read the  CP Optimizer documentation for details     1  Declaration  A CP model must start with the statement   using CP    Otherwise  it will be considered an MP model solved by the CPLEX engine   2  Decision variables  Use only discrete variables as decision variables     3  Decision expressions  It is possible to constrain floating point expressions  or  to use them as an objective term  It is also possible to declare floating point  expressions with the dexpr keyword  as in the floatexpr mod code sample     4  Domain definition  From OPL 5 2 onwards  you must define domains for  your decision variables  CP does not work well with undefined domains     5  Search space  The search space is the product of all domain sizes  measured  by its log  base 2   The search space is a measure of how difficult a problem is  for the CP Optimizer engine  It is also a limit for the Preview Edition of  CPLEX Optimization Studio     See the Glossary for a definition of search space     6  Constraints and expressions  Specific arithmetic  logical  temporal  and  specialized constraints and
65. a solution is found     Detailed steps    Provides more detail on each step of the procedure summary     Defining a    main    block  To operate flow control  you need to add a main block to your model     Flow control means solving several models in sequence and  possibly  modifying  data or passing results from one model to the data of another model  To operate  flow control  you need to add a main block to your  mod file using this syntax     main    a    When a  mod file contains a main block  the IDE  or the oplrun command  starts the  execution of the model by running the main block first     Note that the two optimization models can use the same model definition  that is   the same  mod file  as is the case in this example     Loading the necessary structures  Lists the structures needed to manipulate models and data     The structures you will use to manipulate models and data are listed in the table  below     Table 11  Scripting  structures to manipulate models and data                         Name Role   TloOp ModelDefinition Links to the mod file representation of the  model   IloOp IDataSource Links to a  dat file representation of the  data   IloCplex An instance of the CPLEX algorithm   TloOpIModel A structure linking one model definition to   possibly  one or several data sources          See the Reference Manual of IBM ILOG Script Extensions for OPL for more  information on these classes     When a main block is executed  a variable called thisOp1Model repres
66. ack  java    Note   1  It is not the purpose of this tutorial to describe the knapsack algorithm     2  Be aware that this implementation of the algorithm might not be optimal as the  purpose in this tutorial is to keep it small and simple to read and understand     The interesting point is that some methods are public and therefore candidates for  being called from OPL     These methods  written as simple OPL Java code  are     e public Knapsack    This constructor creates an empty knapsack instance that can  be reused with different data     e public void updateInputs  IloOplElement oplWeights  IloOplElement oplValues    This method allows you to update data from OPL elements and pass it to the  algorithm  using arrays of weights and values     e public double solve  IloOplElement opI Solution  int size   This method runs the  algorithm and puts back the solution into the given solution array     You need to compile the Java source code using Run  bat     For more information on how to use OPL APIs from Java  please refer to the  Interfaces User   s Manual and the Java API OPL Reference Manual     Using the Java code from OPL    Explains how to import Java classes and how to call Java from OPL     Two IBM ILOG Script functions enable you to call Java external functions from  OPL models in IBM ILOG Script statements     Chapter 4  Advanced features 127    The successive steps are   1  Importing Java classes  2  Calling Java    Then  learn more about    Translation of paramet
67. ameters via scripting  timetabling mod  extends the logPeriod  parameter to 10000  sets the search type to DepthFirst and the time limit to 600     The timetabling example is available at the following location    lt Install_dir gt  op  examples op1 timetabling  where  lt Instal1_dir gt  is your installation directory     Changing CP parameters via scripting  timetab  ing mod     var p   Cp param   p logPeriod   10000   p searchType    DepthFirst    p timeLimit   600     For more information    See the description of class IloCP in the Reference Manual of IBM ILOG Script  Extensions for OPL  You can also find the complete reference documentation of CP  parameters in the CP Optimizer documentation     In the steel mill example  the solution is found very quickly  However  if you want  to illustrate the engine log  you can decrease the periodicity  that is  the number of  branches between which a line of log is printed   To do so  write    execute      cp param Workers      I   cp param LogPeriod      50        The general syntax to change engine parameters is   execute    cp param param_name   param_value         Changing OPL settings  You can set certain OPL settings from a script statement  in an execute block  Not all OPL parameters can be set by scripting  you can  change only the parameters that are listed as properties of IloOpISettings in the  Reference Manual of IBM ILOG Script Extensions for OPL  In case of conflict  if a  different value has been set from the IDE for
68. and  Each product can be produced either inside the  company or outside  at a higher cost  The inside production is constrained by the  company s resources  while outside production is considered unlimited  The model  first declares the products and the resources  The data consists of the description of  the products  i e   the demand  the inside and outside costs  and the resource  consumption  and the capacity of the various resources  The variables for this  problem are the inside and outside production for each product     A solution to production mod  For these statements  OPL returns the optimal solution  Final Solution with objective 372 0000     inside    40 0000 0 0000 0 0000    outside    60 0000 200 0000 300 0000      38 OPL Language User   s Manual    A multi period production planning problem  Extends the production planning problem to several production periods     Large linear programming problems are often obtained from simpler ones by  generalizing them along one or more dimensions  A typical extension of  production planning problems is to consider several production periods and to  include inventories in the model  This section presents a multiperiod production  planning model that generalizes the model of the previous section    A production  problem    on page 38     The main generalization is to consider the demand for the products over several  periods and to allow the company to produce more than the demand in a given  period  Of course  there is an in
69. and ingots  In the  instance data shown in Instance data for the blending problem  blending dat    there are three metals  two raw materials  two kinds of scrap  and one kind of  ingot  The model also defines ranges for each of the components  It then defines  the cost of the various components in costMetal  costRaw  costScrap  costIngo  In  the instance data  for example  the second raw material has a cost of 5  The data  items low and up specify the production constraints and give lower and upper  bounds on the quantity of each sort of metal in the alloy  For example  in the  instance data  between 30  and 40  of the alloy must be the second metal  The  next data items  percRaw  percScrap  and percIngo  specify the percentage of each  metal in the sources  In Instance data for the blending problem  blending dat   the  second type of scrap contains 1  of the first metal  none of the second metal  and  70  of the third metal  Finally  the data alloy specifies the amount of alloy to be  produced     Instance data for the blending problem  blending  dat   NbMetals   3     NbRaw   2   NbScrap   2   NbIngo   1     22 OPL Language User   s Manual    CostMetal    22  10  13    CostRaw    6  5    CostScrap     7  8      CostIngo    9    Low    0 05  0 30  0 60    Up    0 10  0 40  0 80      PercRaw       0 20  0 01      0 05  0     0 05  0 30       PercScrap      0  0 01      0 60  0     0 40  0 70       PercIngo      0 10      0 45      0 45         Alloy   71     Decision variable
70. anual     string  Dest p in Products      c d    lt p c gt  in Routes        connection  CPs p in Products      c    lt p c gt  in Routes     assert forall p in Products   sum o in Orig p   Supply  lt p o gt      sum d in Dest p   Demand  lt p d gt       dvar floatt  Trans Routes       constraint ctSupply Products   Cities    constraint ctDemand Products   Cities      minimize  sum 1 in Routes   Cost 1    Trans 1    subject to    forall  p in Products   o in Orig p     ctSupply p   0     sum   lt o d gt  in CPs p     Trans  lt  p  lt o d gt   gt      Supply  lt p o gt     forall  p in Products   d in Dest p     ctDemand p   d     sum   lt o d gt  in CPs p     Trans  lt  p  lt o d gt   gt      Demand  lt p d gt     forall c in Connections   ctCapacity   sum   lt p c gt  in Routes    Trans  lt p c gt    lt   Capacity          About arrays    Discusses sparsity  tuples of parameters  and filtering in the context of model  efficiency     Order of indexers    When you use multidimensional arrays  the order of the dimensions may be  significant  For instance  in the following example             range rl   1  nl   range r2   1  n2     dvar int  x r1   r2              sum i in rl  j in r2  x i   i    sum j in r2  i in r1  x i   i      al  a2    the calculation of al is more efficient because OPL internal caching mechanism  recalculates x i  only when i changes     Array initialization    A better performing array initialization syntax has been introduced in OPL4 1  For  example  the
71. apsack   new Knapsack       4  Write instructions so that at each iteration  the data is updated  the algorithm  called  and the solution retrieved     130 OPL Language User   s Manual    knapsack updateInputs master0p  Size  masterOp1 Duals     var solutionValue   knapsack solve master0p  NewPattern  master0p1 Rol1Width       5  Run the example   Results    The rest of the model is the same as the cutstock model that uses a CPLEX  algorithm to solve the submodel  See    The cutting stock problem    on page 106     Using data from other sources    Shows how to use calls to external functions to define two customer specific ways  of feeding data to an OPL model  by using a subclass of IoCustomOp  DataSource  and by using a script function from a  dat file     Subclassing lloCustomOp IDataSource  Indicates what provided code sample to start from to subclass this class     The associated code sample is the externaldataread example     The Java subclass of IloCustomOp DataSource is implemented at the following  location      lt Install_dir gt  op  examples op _interfaces java externaldataread src   externaldataread ExternalDataRead  java    This code sample contains standard Java OPL code  like the Warehouse  java  example documented in Working with OPL interfaces of the Interfaces User s  Manual  The difference in this example is that you will use the custom data source  directly from the OPL model by attaching it from the script statement to an  instance of IloOplModel  To do s
72. ar chooseBin   new Ilo0p RunConfiguration  vellinochooseBin mod       chooseBin cplex   cplex    chooseBin op Model  addDataSource  data     chooseBin op1Model  generate       if  chooseBin cplex solve        chooseBin op1Model  postProcess       chooseBin end       The results  Shows the trace displayed in the IDE after executing a run configuration     To solve the full model  you need to execute the Vellino run configuration  You  can use the other two run configurations to test the two submodels individually   Run configurations are generally used to enable users to test their models by  running different models related to the same problem  or the same model with  different data sets   all within a single project   See also Understanding OPL projects  in From Operations Research to CPLEX Studio and ODM Enterprise      After you have solved the Vellino run configuration  you see a trace  If you work  in the IDE  the trace is in the Console output window  This trace first shows first  what is being generated                 genbin   Found bin with color   red and containing elements  1000 0   Found bin with color   red and containing elements  2 0 0 0 0   Found bin with color   red and containing elements  3 0 0 0 0   Found bin with color   red and containing elements  0000 1   Found bin with color   red and containing elements  0 0 0 0 2   Found bin with color   red and containing elements  0 0 0 0 3   Found bin with color   blue and containing elements  0 0 0   1   Found 
73. as shown in the model below  gas1 mod     A simple production model  gas1 mod      12 OPL Language User   s Manual     string  Products      gas    chloride       string  Components      nitrogen    hydrogen    chlorine        float Demand Products   Components       1  3  0    1  4  1      float Profit Products     30  40    float Stock Components     50  180  40      dvar float  Production Products      maximize  sum  p in Products    Profit p    Production p    subject to    forall  c in Components    ct   sum  p in Products    Demand p  c    Production p   lt   Stock c         The objective function    maximize  sum  p in Products    Profit p    Production p      illustrates the use of the aggregate operator sum to take the summation of the  individual profits  A variety of aggregate operators are available in OPL  including  sum  prod  min  and max     The instruction    subject to    forall  c in Components    ct   sum  p in Products    Demand p  c    Production p   lt   Stock c         shows how the universal quantifier forall can be used to state closely related  constraints  It generates one constraint for each chemical component  each  constraint stating that the total demand for the component cannot exceed its  available stock  OPL supports rich parameter specifications in aggregate operators  and quantifiers  see Expressions in the Language Reference Manual      Isolating the data  Another fundamental step in making models reusable is to  separate the model and th
74. atic programming 81  quantifiers 12    R    range of variables 23  ranges  no range syntax in script  statements 97  reduced costs  in model decomposition 107  109   110  in product mod productn data  example 18  in sensitivity analysis 47  relaxations  control by using IBM ILOG  Script 114  linear 55  of integer decision variables 54  scripting statements to search for 116  results  displaying 18  rostering 3  run configurations  creating model instances through  scripting 108    S    scalar data and scripting 102  scheduling   time tabling example 70  scheduling search phases 121  scripting   changing settings within a model 89   column generation 106   common pitfalls 97   creating model instances for run   configurations 108  displaying results 18  flow control 94  105  and multiple models 98   incrementality 104   language 9  87   preprocessing postprocessing 88   tips 95   variables   scope 96   search phase   definition 118   multi criteria 118    150 OPL Language User   s Manual    search phases 26  121  in constraint programming 118  order 119  value choosers and evaluators 121  variable choosers and evaluators 120  search space  size 4  search strategy  constructive strategies 4  customizing in time tabling  example 74  sensitivity analysis  basis status 47  information on constraints 47  introduction 46  reduced cost 47  separation  between model and data 1  between modeling and scripting 9  sequence variable search phase 121  sequencing problem  tutorial 67  set c
75. ations of constraint programming          62  What is constraint programming             62  The vellino example  column generation        62  The car sequencing example                67  The time tabling example          70  Modeling and solving a simple problem  house  building s s s s   so o    s o we   a76   Quadratic programming     Som a Sal   Tutorial  Using CPLEX logical constraints  gt a     82  What are logical constraints                82  Description of the problem                 82  Representing the data                  83  Using logical constraints                  85    Chapter 3  IBM ILOG Script for OPL     87       Copyright IBM Corp  1987  2011    Introduction to scripting                   87  What is IBM ILOG Script                  87  Preprocessing and postprocessing            88  Afewtips  sao 6 s sor con oa pom   2 95  Common pitfalls        x a 97   Tutorial  Flow control and multiple searches poe   98  The production planning problem            98  Procedure summary             9 8  Detailed steps       eS me ot ve 99  Doing more with mulprod_  main    s        103  Basic flow control script            105   Tutorial  Flow control and column generation     106  What is model decomposition              106  The cutting stock problem                106  Procedure summary                  107  Detailed steps       gn a  ds  he e LOS  Doing more with c  tstocki main s 2 s s 4    M   Tutorial  Changing default   behaviors in flow control      2 2 2 2
76. bin with color   blue and containing elements  10 0 0 0   Found bin with color   blue and containing elements  0 0 1 0 0   Found bin with color   green and containing elements  0 1 0 0 0   Found bin with color   green and containing elements  0 2 0 0     Found bin with color   green and containing elements  0 3 0 0     Found bin with color   green and containing elements  0 4 0 0 0   Found bin with color   green and containing elements  0 0 0 0 1   Found bin with color   green and containing elements  0 0 0 0 2   Found bin with color   green and containing elements  0 0 0 0 3   Found bin with color   green and containing elements  0 0 0 0 4   Found bin with color   green and containing elements  01 0 1 0   Found bin with color   green and containing elements  0 2 0 1 0   Found bin with color   green and containing elements  0 3 0 1 0   Found bin with color   green and containing elements  0 1 0 2 0   Found bin with color   green and containing elements  0 2 0 2 0     Then  the trace shows the final selection     choosebin   Chosen      lt 1  red   1000 0  gt   0   lt 2  red   2000 0  gt   1   lt 3  red   3 000 0  gt   0    66 OPL Language User   s Manual     lt 4  red   0000 1  gt   0   lt 5  red   0000 2  gt   0   lt 6  red   0 0 0 0 3  gt   0   lt 7  blue   0000 1  gt   0   lt 8  blue   1000 0  gt   0   lt 9  blue   0 010 O  gt    3   lt 10  green   0 100 0  gt   0   lt 11  green   0200 0  gt   0   lt 12  green   03 00 0  gt   0   lt 13  green   0 400 0  gt   0   lt 14  gre
77. bjValue      0 5     status    1           thisOp1Model unconvertAl1IntVars     if  cplex solve       writeln  Unrelaxed Model     writeln  OBJECTIVE    cplex getObjValue      if  cplex getObjValue      1     status    l           status          Both methods are available for flow control scripting  and in the C    Java  and   NET Interfaces     For more information  For details on scripting  see Chapter 3     IBM ILOG Script for OPL     on page 87   For details on the API  see each Interfaces Reference Manual     To learn more about what MIP relaxation is and how to use it  see the CPLEX  documentation or consult a textbook about linear programming     integer linear programming  Defines mixed integer linear programming and describes an upgrade to the  production planning problem to include a fixed charge for the products     What is mixed integer linear programming   Defines mixed integer linear programming     Mixed integer linear programs are linear programs in which some variables are  required to take integer values  and arise naturally in many applications     The integer variables may come from the nature of the products  e g   a machine  may  or may not  be rented   Mixed integer linear programs are solved using the  same technology as integer programs  or vice versa   For instance  a  branch and bound algorithm can exploit the linear relaxation and its branching  procedure is applied only to integer variables     Fixed charge in a production planning problem  Prese
78. bjects    In preprocessing  postprocessing  or flow control context  you can end the OPL  elements you don   t need to reduce overall memory consumption     Debugging  To improve the response time of your script blocks  OPL provides the Profiler as a    debugging tool  See Profiling the execution of a model for more information on  how to identify the blocks that are good candidates for improvement     96 OPL Language User   s Manual    Common pitfalls    Lists syntax errors you should avoid when writing IBM ILOG Script statements in  OPL models     No range syntax    The range syntax you can use in OPL modeling statements does not exist for script  statements     In OPL  a  lt   x  lt   b is equivalent to a  lt   x  amp  amp  x  lt   b    whereas in scripting it is evaluated as   a  lt   x   lt   b  or   var vl   a  lt   x    vl  lt   b    However  that syntax is valid for JavaScript  ECMAScript  parsing in some cases     For example  this statement   for var i in 1  n     iterates an empty loop  The expression    1  n     is interpreted as the named  property n for the number object 1  As that property does not exist  it evaluates to  undefined  Iterating the undefined value is an empty loop     No tuple syntax  The tuple syntax in OPL modeling statements does not exist for script statements     Use the find   or the get   methods to get control of tuple objects  For example   instead of writing     A  lt a  b gt      which results in a parsing error  write  A S get a b    
79. can set a limit on the number of failures during  the search or on the time spent searching  Here are examples on how to change  these parameters      execute    cp param FailLimit   500   cp param TimeLimit   20        Changing the search behavior    You can also change the search behavior by using CP parameters to change the  nature of the search  The CP Optimizer engine includes several different methods  to search for solutions  Some parameters enable you to decide which search  method to use exactly  This is useful in some cases  The default search uses default  combinations that are proven to be the best choice on average  However  better  combinations can be found on particular cases  Here are examples on how to  change such parameters   execute     cp param searchType    multiPoint     writeln  Search type is     cp param searchType      cp param DefaultInferenceLevel    Extended           Defining search phases  Sometimes  the default search may not be capable of  finding good enough values in an appropriate amount of time  By changing  parameters  you can modify slightly how these default algorithms work  When this  is not sufficient  you can also help the engine by providing some indications on the  structure of the search space  The default search algorithm can use them efficiently  to find good solutions  This is referred to as    search phases        26 OPL Language User   s Manual    For example  in the steel mill code sample  the preprocessing part indicates t
80. ce  because of  economies of scale   The transformation would not be correct  because a linear  program would tend to use    extra   boats before all the    regular    boats have been  built  The transformation must enforce a constraint stipulating that    extra    boats  can only be used when all the    regular    boats have been manufactured  The  resulting program is a mixed integer linear program     Chapter 2  The application areas 59    A solution to sailcopwg mod    For the instance data given in Data for the generalized piecewise linear model   sailcopwg1 dat   OPL returns the optimal solution  Final Solution with objective 72200 0000     boat    90 0000  0 0000 100 0000 0 0000    inv    10 0000 60 0000 0 0000 25 0000 0 0000       This solution is interesting since it uses    extra    boats as much as possible while  trying to minimize the use of boats in inventory  As a result  there is no production  in the second and fourth periods     A simple inventory model  sailco mod     on  page 57 can be generalized further to include more pieces  A generalized  piecewise linear model for the simple inventory problem  sailcopwg mod  depicts  such a model     A generalized piecewise linear model for the simple inventory problem   sail copwg mod    int NbPeriods      3  range Periods   1  NbPeriods   int NbPieces           float Cost 1  NbPieces           float Breakpoint 1  NbPieces 1          float Demand Periods           float Inventory      3   float InventoryCost        
81. ch phase  allows you to specify the order of the search moves and the order in which the  values must be tested     A search phase defines instantiation strategies to help the embedded CP Optimizer  search algorithm     A search phase is either mono criterion or multi criteria     A mono criterion search phase is composed of   e either      an array of integers to instantiate  or fix   and        a variable chooser that defines how the next variable to instantiate is chosen   and       a value chooser that defines how values are chosen when variables are  instantiated    var phasel   f searchPhase x   f selectLargest f varIndex x     f selectLargest f explicitValueEval values  varEval  0           or    118 OPL Language User   s Manual    an array of integers to instantiate  or fix   var phasel   f searchPhase  x    e or      a variable chooser that defines how the next variable to instantiate is chosen   and        avalue chooser that defines how values are chosen when variables are  instantiated    var phasel   f searchPhase  f selectLargest f varIndex x     f selectLargest f explicitValueEval  values  varEval  0        A multi criteria search phase can have   e either two different search phases  such as     var multiPhaseVar   new Array f selectSmallest f domainSize     f selectRandomVar      var multiPhaseValue   new Array f selectSmallest f value     f selectRandomValue      var phasel   f searchPhase multiPhaseVar  multiPhaseValue       e or several decision variables 
82. cribes the details of this linear programming model     The volsay model shown in    A simple production problem  volsay mod     on page  10 is a linear programming model  Linear programming is the class of problems  that can be expressed as the optimization of a linear objective function subject to a  set of linear constraints  i e   linear equations and inequalities  over real numbers   Linear programming models can be solved for large numbers of variables and  constraints and are  from a computational standpoint  the simplest applications  considered in this manual     This section examines    e Arrays   e Data declarations   e Aggregate operators and quantifiers   e Isolating the data   e Data initialization   e Tuples   e Displaying results   e Setting CPLEX parameters   e Integer programming  the knapsack problem  e Mixed integer linear programming  a blending problem    For more information     Applications of linear and integer programming    on  page 37 studies the application of OPL to linear programming  integer  programming  mixed integer linear programming  and piecewise linear  programming     Arrays  The above statement is very specific to the application at hand  In  general  it is desirable to write generic models that can be extended  modified  easily  and applied in different contexts  The next sections describe a number of  OPL concepts to simplify the process of creating such models  A first step towards  more genericity is the use of arrays  which makes 
83. cript template calling a project    calls a project file while    Flow  control script template calling a model and data    calls model and data files     Flow control script template calling a project  main      var proj   new 11o0p Project                 op1 mulprod      var rc proj makeRunConfiguration     rc op Model generate      if  rc cplex solve        writeln  OBJ       rc cplex getObjValue          else     writeln  No solution          rc end      proj end            Flow control script template calling a model and data  main      var source   new I100p ModelSource                 op1 mulprod mulprod mod        Chapter 3  IBM ILOG Script for OPL 105    var cplex   new IloCplex     var def   new I1lo00p ModelDefinition source     var opl   new Ilo0plModel  def  cplex       var data   new I1o0p DataSource                 op1 mulprod mulprod dat               op  addDataSource  data     op  generate      if  cplex solve       writeln  OBJ       cplex getObjValue          else     writeln  No solution         opl end      data end      def end      cplex end       source end               Tutorial  Flow control and column generation    Shows how to use flow control and multiple searches to create more complex flow  control scripts that involve several model definitions     What is model decomposition     Defines decomposition for complex models     Some models are too complex to solve  either because they are just too big or  because they are too long to search  In th
84. ctory    var selectVar   f selectSmallest f domainSize       var selectValue   f selectRandomValue      var assignRoom   f searchPhase room  selectVar  selectValue     var assignTeacher   f searchPhase teacher  selectVar  selectValue      var assignStart   f searchPhase Start  selectVar  selectValue     cp setSearchPhases assignTeacher  assignStart  assignRoom       Note that the phases are assigned in a specific order   1  Teachers  because there are only a few to choose from     2  Start times  because once teachers are determined  there is only a limited  number of possible start times for courses     74 OPL Language User   s Manual    3  Rooms     To specify search method and time limits  you can either use a scripting block  like  this    var p   cp param    p logPeriod   10000    p searchType    DepthFirst     p timeLimit   600     or edit the Constraint Programming Search Control page in the project settings  file  timetabling ops  from the CPLEX Studio IDE  See Setting programming  options in IDE Reference     Postprocessing the solution  Using postprocessing statements and scripting capabilities     About this task    To present the solution  the model uses OPL postprocessing statements and  scripting capabilities     Procedure    To specify postprocessing   1  Define the Course tuple which is used to aggregate information from the room   teacher and start decision variable arrays      Course  timetable t in Time  c in Class        lt p d r i n gt   d in Discipline  
85. data     Finally  they are sometimes extended by a command language that makes it  possible to solve sequences of related models and to make modifications to the  models and solve the modified models  Traditional modeling languages have many  benefits that make them appealing for stating and solving mathematical  programming problems  Perhaps their most significant contribution is to provide a  language that directly supports the natural statement of these problems  This  language abstracts away the implementation details of the underlying solver and  users are then relieved of mundane  low level  considerations and can focus on the  modeling of their applications  Also important is the clear separation between the  model and the instance data  which ensures that the same model can be applied to  many instances without inducing additional work  Note that  in these languages   the solver is a black box that can only be accessed through a set of well defined  parameters        Copyright IBM Corp  1987  2011 1    Traditional modeling languages are particularly strong in mathematical  programming applications  e g   linear and integer programming  This is not  surprising since this is the area from where they emerged  In addition  these  problems are naturally expressed using traditional algebraic notations and effective  solvers are available to solve the resulting models     Mathematical programming    Defines linear programming  integer programming  and nonlinear programming  
86. del  Def  Cplex     0p12 addDataSource DataEIts     var Data2   new I1o0pIDataSource  publisherData dat      Op12 addDataSource Data2     DataElts 1b   5   Op12 generate     if  Cplex solve       Op12 postProcess       else  writeln  no solution       writeFromScript dat    1b 2     Chapter 3  IBM ILOG Script for OPL 101    DBConnection db  access   testDB mdb     result to DBUpdate  db  INSERT INTO writeOPL id  VALUES           publisherData dat would be   DBConnection db  access   testDB mdb     result to DBUpdate  db  INSERT INTO writeOPL id  VALUES           Modifying data from    main    scripting  Data elements can be modified and then used as a data source for another model     You can access and modify data in the data elements obtained from the current  OPL model  as follows     data capacity  flour     capFlour     Then  the value of the variable capacity  flour   is modified in the structure of  the data elements     Note  however  the following    1  Scalar data  whether in the  mod file or the  dat file  cannot be modified via  scripting    2  You can use data elements to add new elements  but only for scalar types     3  Only external data can be modified by script  If  in the  mod file  you have  for  example     int arr 1  3     1 2 3     you cannot modify the array arr  You need to declare it as   int arr 1  3       3   and initialize it externally     So you would need to create a  dat file that contains the data to update  except  for scalar data  The scala
87. e  displayed  and how to change a parameter value     Chapter 1  Introduction to OPL 9    How OPL expresses an LP problem  Describes a typical optimization problem     An optimization problem is typically specified by an objective function and a set of  constraints over some decision variables  A solution to the problem is an  assignment of values to the variables that satisfies the constraints and optimizes  the value of the objective function  The purpose of an OPL statement is thus to  express these two components for the application at hand     Note     In OPL 4 0 and later  the keyword dvar is used to note decision variables in the  OPL modeling language while the keyword var is used for IBM ILOG Script  variables     The production planning problem  Describes a linear programming problem     Consider a Belgian company Volsay  which specializes in producing ammoniac gas   NH3  and ammonium chloride  NH4Cl   Volsay has at its disposal 50 units of  nitrogen  N   180 units of hydrogen  H   and 40 units of chlorine  Cl   The  company makes a profit of 40 Euros for each sale of an ammoniac gas unit and 50  Euros for each sale of an ammonium chloride unit  Volsay would like a production  plan maximizing its profits given its available stocks     The OPL statement shown below formalizes this problem     A simple production problem  vol say  mod     dvar float  Gas   dvar float  Chloride     maximize  40   Gas   50   Chloride   subject to    ctMaxTotal   Gas   Chloride  lt   50 
88. e 105  CPLEX parameters  setting with script statements 89  cplex variable 99  CPLEX vectors  controlling through IBM ILOG  Script 112  CPLEX  truncating very big values 32  cutting stock problem  description 107  knapsack subproblem 126  step by step process 107    104  105    147    D    data  custom data sources 131  declaration 12    from output of a model solution 98    initialization 14   of blending problem 22   separated from model 1  13  data elements   definition and use 100  data files 13   declaring script functions in 132  data initialization  lazy 97  data sources   publishers 100  dataElements method   IloOplModel class 100  decision expressions   inCP 4  decision problems 2  decision variables   collected dynamically 25   discrete only in CP 4  9   domain in CP 4   for blending problem 23   integer  relaxing 54   memory usage 8   time tabling example 71  declaring   data 12  decomposition   in vellino problem 63  dexpr  OPL keyword   floating point expressions in CP 4  displaying   results 18    E    ECMA 262 standard 87  efficient models 27  67  order of search phases 119  pitfalls in script statements 97  ellipsis  as syntax for model data  separation 13  end  IloOplModel 111  end property 80  endBeforeStart constraint 78  ending objects 111  endOf  expression 79  environment variables  for calls to external functions 126  environment variables for Java  JAVA_HOME 129    ODMS_JVM_LIBRARY_OVERRIDE 129    execute  IBM ILOG Script block  changing CP parameters 
89. e instance data  OPL supports this clean separation  through the notion of projects     A project is the association of a model file  one or more data files  optional   and  one or more settings files  optional   associated in run configurations  A minimal  project has one run configuration containing only one model  Model files use the  file name extension mod while data files use the file name extension dat  The  model declares the data but does not initialize it  The data files contain the  initialization instructions for each declared data item  See Understanding OPL  projects in Quick Start     Here we do not describe the details of IBM ILOG OPL  but generally describe  applications by giving the model and the instance data separately     Chapter 1  Introduction to OPL 13    For instance  the model below  gas mod  and the instance data  gas dat  together  make up a project for the Volsay production planning problem  The model part is  essentially the same as the one presented earlier  except that it declares the data  but does not initialize it     The production model  gas  mod      string  Products      3    string  Components          float Demand Products  aaa a z  float Profit Products        float Stock Components            dvar float  Production Products       maximize  sum  p in Products    Profit p    Production p    subject to    forall  c in Components    ct   sum  p in Products    Demand p  c    Production p   lt   Stock c         A declaration of the form  
90. e linear functions leading to linear 2  The Memory Emphasis parameter in the IDE 140  programs                    62 3  How to calculate the tangency point        144       Copyright IBM Corp  1987  2011 v    vi OPL Language User   s Manual       Tables    9 N    ND Oe    Constraint programming vs  mathematical  programming s                6  A sparse data set for a transportation problem 28  Instance data for the warehouse location    problem  s  s s ere ao oe             OB  Prices for the blending problem            41  Octane and lead data for the blending problem 41  Sensitivity analysis on constraints           47  Instance data for the warehouse location   problem  a c    9  ws    amp   4            450       Copyright IBM Corp  1987  2011    9   10   Ti     12   13     House construction tasks                76  House construction task earliness costs 77  House construction task tardiness costs 77  Scripting  structures to manipulate models and  Gata  s se aa a a he a  9D  Files for the cutting stock example     107  IBM ILOG Script CP parameters     117  Vii    viii OPL Language User   s Manual       Language User   s Manual    Describes how to use OPL  the IBM ILOG Optimization Programming Language   The language is documented in two manuals  the Language User   s Manual and the  Language Reference Manual   both partly based on Pascal Van Hentenryck   s book   The OPL Optimization Programming Language  published by The MIT Press  1999   Cambridge  Massachusetts  Th
91. eating the master model  var masterOp    new Ilo0p Model  masterDef  masterCplex     masterOp  addDataSource masterData       We reuse the thisOp  Model variable because the master model corresponds to the  definition contained in the same file as the flow control script  At each iteration  a  new IloOpIModel instance is created from the newly modified data elements     Before you can solve  you need to generate the optimization model by calling   thisOp Model  generate      To solve the master model  call   if   masterCplex solve        master0p  postProcess     curr   masterCplex getObjValue     writeln     writeln  MASTER OBJECTIVE    curr      else    writeln  No solution to master problem      masterOp1 end     break          Updating the submodel  Provides the syntax     You need to update the reduced cost objective by setting the new dual values in  the submodel data     Here are the steps   1  Make the changes to the data elements taken from the initial submodel     var subData   new Ilo0p1DataElements      subData RollWidth   master0pl RollWidth    subData Size   masterOp1 Size    subData Duals   master0Op  Duals   It is easy to change the data to the new dual values from the variables of the  master model  To do so  you can use the    dual    property of those variables     Chapter 3  IBM ILOG Script for OPL 109    for var i in masterOp l Items     subData Duals i    masterOp  ctFill i  dual      2  Create a new submodel with the same definition file and the newly m
92. ective costs  Finally  the model has two types of constraints   The first set of constraints expresses the capacity constraints  the second set states  the demand constraints  The model is once again a linear programming problem     A solution to production mod    For the instance data given in Data for the production planning problem   production dat   OPL outputs the following solution     Final Solution with objective 372 0000   inside    40 0000 0 0000 0 0000    outside    60 0000 200 0000 300 0000      Although the model is simple  it is inconvenient in separating the data associated  with each product in different arrays  for instance  array demand stores the demand  for the products  while array insideCost stores their inside costs  This technique   sometimes called parallel arrays  may be error prone and less readable for more  complicated models  Tuples provide a simple way to cluster related data and  impose more structure on a model  This is illustrated in the revisited example  below  product mod  and the revised data product dat  which exhibit an alternative  model for the production planning problem     The production planning problem revisited  product  mod      string  Products      3   string  Resources      3  tuple productData    float demand   float insideCost   float outsideCost   float consumption Resources        productData Product Products          float Capacity Resources       3    dvar floatt  Inside Products     dvar float  Outside Products      e
93. eduling can express several types of constraint on and between interval  variables     e to limit the possible positions of an interval variable  forbidden start end values  or extent values      e to specify precedence relations between two interval variables     e to relate the position of an interval variable with one of a set of interval  variables  spanning  synchronization  alternative      Compatibility or incompatibility constraints  For instance  the following is a concise model of the knight problem     The knight problem  using CP     dvar int x K  in R   dvar int y K  in R     dvar int used R  R  in 0  1   constraints      forall ordered k1 k2 in K     forbiddenAssignments              lt il jl il jl gt    il j1 in R    union     lt i1 jl i2 j2 gt  l il j1 i2 j2 in R   i2  i1 1  amp  amp  j2  j1 2   union     lt i1 j1 i2 j2 gt  l il j1 i2 j2 in R   i2  i1 1  amp  amp  j2  j1 2   union     lt i1 j1 i2 j2 gt  l il j1 i2 j2 in R   i2  i1 1  amp  amp  j2  j1 2   union     lt i1 j1 i2 j2 gt  l il j1 i2 j2 in R   i2  i1 1  amp  amp  j2  j1 2   union     lt i1 j1 i2 j2 gt    i11 j1 i12 j2 in R   i2  i1 2  amp  amp  j2  j1 1   union     lt i1 jl i2 j2 gt  l il j1 i2 j2 in R   i2  i1 2  amp  amp  j2  j1 1   union     lt i1 j1 i2 j2 gt  l il j1 i2 j2 in R   i2  i1 2  amp  amp  j2  j1 1   union     lt i1 j1 i2 j2 gt  l il j1 i2 j2 in R   i2  i1 2  amp  amp  j2  jl 1         x k1   y k1   x k2   y k2        Chapter 1  Introduction to OPL 7         forall k in K     used x k  
94. eger data  See for instance Combinatorial  Optimization  Algorithms and Complexity by C H  Papadimitriou and K  Steiglitz for a  discussion of total unimodularity  see the Bibliography      A solution to sailco mod    For the instance data given in    Data for the simple inventory model  sailco dat        OPL returns the optimal solution  Final Solution with objective 78450 0000    regulBoat    40 0000 40 0000 40 0000 25 0000     extraBoat    0 0000 10 0000 35 0000 0 0000     inv    10 0000 10 0000 0 0000 0 0000 0 0000      Note     It is interesting to observe that the model does not preclude producing extra boats  even if the production of regular boats does not reach its full capacity  This is not    58 OPL Language User   s Manual    an issue in this model  since the extra boats are more expensive and thus are not  produced in an optimal solution  It would become an issue  of course  if the cost of  the extra boats is less than the regular price  because of  say  economies of scale    This case is discussed in    Piecewise linear vs  linear        A piecewise linear model for this application is given in A piecewise linear model  for the simple inventory problem  sail copw mod      A piecewise linear model for the simple inventory problem  sail copw mod     int NbPeriods  range Periods    1  NbPeriods     float Demand Periods       3  float RegularCost      3  float ExtraCost          float Capacity          float Inventory          float InventoryCost           dvar floa
95. el    The model for common definitions  The model vellinocommon mod contains  definitions that are common to all the models  For example  the tuple definition   tuple Bin     key int id    string color    int n Components      j   is used to represent configurations that are passed between the different models     The set of available configurations is given by    Bin  Bins      3    This model is included in other models that use these definitions as follows     include  vellinocommon mod      The generation model  The generation model vellinogenBin mod starts with the  statement     using CP   which means that it is solved by the CP Optimizer engine     The decision variables are     dvar int color in RColors   dvar int n Components  in 0  maxCapacity     The decision variable color indicates the color of the generated configuration   Colors are represented by integer values and each n c  indicates how many  components of type c are included in the bin configuration  Then  all the  compatibility constraints are easily written     subject to    1  lt   sum c in Components  n c    sum c in Components  n c   lt   capacity_int_idx color    color    ord Colors   red     gt   n  plastic      0  amp  amp  n  steel      0  amp  amp  n  wood    lt   1   color    ord Colors   blue     gt   n  plastic      0  amp  amp  n  wood      0   color    ord Colors   green     gt   n  glass      0  amp  amp  n  steel      0  amp  amp  n  wood    lt   2     n  wood    gt   1   gt  n  plastic    
96. em   mul prod  dat     Products     kluski capellini fettucine     Resources flour eggs     NbPeriods       3     Consumption          0 5  0 4  0 3       0 2  0 4  0 6      Is   Capacity     20  40     Demand         10 100 50       20 200 100      50 100 100    1    Inventory     0 a  InvCost     0 1 0 2 0 1    InsideCost     ae    0 6  0 1     OutsideCost     0 8  0 9  0 4       Most of the model generalizes smoothly  For instance  the capacity constraints  stated for all resources and all periods become  forall  r in Resources  t in Periods    ctCapacity   sum  p in Products    Consumption r   p    Inside p  t   lt   Capacity r      The most novel part of the statement is the constraint linking the demand  the  inventory  and the production   forall  p in Products   t in Periods      ctDemand   Inv p  t 1    Inside p  t    Outside p  t     Demand p  t    Inv p  t      The constraint states that  for each product p and each period t  the inventory of  period t 1 added to the production of period t is equated to the demand of period  t plus the inventory of period t  Of course  the fact that the variables inv p   t   are constrained to be nonnegative is critical to satisfying the demand and to  disallow back orders  The objective function is also generalized to add the  inventory costs     Note also the type declaration    tuple plan    float inside   float outside   float inv        and the display instructions  plan Plan p in Products  t in Periods     lt Inside p t  Outs
97. en   0000 1  gt   0   lt 15  green   0000 2  gt   0   lt 16  green   0 0 0 0 3  gt   0   lt 17  green   0000 4  gt   1   lt 18  green   0 101 0  gt   0   lt 19  green   0201 0  gt   0   lt 20  green   03 01 0  gt   0   lt 21  green   0 10 2 O  gt   2   lt 22  green   02 02 0  gt   1    The car sequencing example    Demonstrates how to use the pack constraint and search phases to improve the  efficiency of a sequencing model     What to do and where to find the files    Introduces you to the example     You will enhance the initial model using search phases to ease the sequencing  process and the pack constraint for better propagation     The car sequencing project  the carseq example  includes the following files   e carseq mod  the initial model  e carseq dat  the data file     They can be found in  lt Install_dir gt  op1 examples op1 models Car    where  lt Instal1_dir gt  is your installation directory     The car sequencing problem  Describes the problem     Consider the following problem  A car assembly line is set up to build cars on a  production line divided into cells  Five cells that install options on cars require  more than one task time to perform the operation  Their limitation is defined by  the number of cars they can process in a period of time  There are seven different  car configurations  or types   and the number of cars to build is derived from the  demand for each configuration  The objective of the model is to compute a  sequence of cars that the cells
98. en found  you can use the start and end properties of the  interval variables to access the assigned intervals  The code for displaying the  solution has been provided for you     execute    writeln  Masonry      writeln  Carpentry     writeln  Plumbing      writeln  Ceiling      writeln  Roofing      writeln  Painting      writeln  Windows      writeln  Facade      writeln  Garden     writeln  Moving             masonry end     carpentry end     plumbing end     ceiling end    roofing end     painting end    windows end     facade end    garden end     moving end       masonry start  carpentry start  plumbing start  ceiling start  roofing start  painting start  windows start  facade start  garden start  moving start    t  eteteteetst  t  tetetett                  Step 7  Run the model    Run the model  You should get the following results     OBJECTIVE  5000   Masonry   20  55  Carpentry  75  90  Plumbing   55  95    80 OPL Language User   s Manual    Ceiling   75  90   Roofing   90  95   Painting   90  100  Windows   95  100  Facade   95  105  Garden   95  100  Moving   105  110    As you can see  the overall cost is 5000 and moving will be completed by day 110     You can also view the complete program online in the  lt Install_dir gt  op1   examples opl sched_time sched_time mod file        Quadratic programming    Defines quadratic programming  QP   including quadratically constrained  programming  QCP   mixed integer quadratic programming  MIQP   and  mixed integer quad
99. ensures that course  numbers  for a given requirement  appear in chronological order   forall i  j in InstanceSet    i id  lt  j id   amp  amp  i requirementId    j requirementId   Start i   lt  Start j      Minimizing the makespans  With a constraint  or a surrogate constraint     About this task    In the distributed school time tabling example  the makespan of the solution can be  minimized so that everybody can leave the school early at the end of the week     Procedure    To minimize the makespan   1  Add the following constraint   makespan    max r in InstanceSet  End r    where the variable makespan is declared with   dvar int makespan in Time     ending date of last course  and the Time range corresponds to the time table period  that is  a week      int HalfDayDuration   DayDuration div 2   int MaxTime   DayDuration Number0fDaysPerPeriod   range Time   0  MaxTime 1     2  Optionally  to help proving optimality  add a surrogate constraint   makespan  gt   max c in Class  sum r in InstanceSet   r Class    c  r Duration     Customizing the search  By writing an execute block     Before writing constraints  you can customize the CP Optimizer search strategy by  writing an execute block  In this time tabling problem  this is done by selecting  variables by increasing the domain size  and by selecting random values  The  method consisting in selecting random values helps the search process to distribute  the courses homogeneously over the scheduling period    var f   cp fa
100. enting the  IloOpIModel instance is available by default  This variable links to the model  definition that contains the main block currently executed and to the associated   dat files  if they exist  to run the model  The model definition uses  IloOpIModelSource instance that is initialized with the model name  There is also a  variable called cplex which corresponds to an already created instance of the  CPLEX algorithm     Chapter 3  IBM ILOG Script for OPL 99    If you want to run another model and or use other data  you may create your  own IloOplModel instance  like this   var src   new I100p1 ModelSource  cutstock_sub mod        var def   new I 00p ModelDefinition src    var opl2   new I100p1Model  def cplex       To create a new data source using a different  dat file  you can write   var data   new I o00p DataSource  mulprod dat      Then  to link the IloOplModel instance to a new data source  write   op12 addDataSource  data      In the mulprod_main example  you don t need to create all these structures since  you want to use the already defined thisOp  Model instance which corresponds to  the model included in the mulprod_main mod file     Generating the optimization model  Presents the generate   function     When your I100p1Model instance is created  you can generate the optimization  model and feed it to your CPLEX algorithm by calling the generate   function  In  the mulprod_main example  it is called on the thisOp1Model instance     thisOp Model  generate     
101. eory  and the artificial intelligence  efforts of the 1980s  Recent progress in the development of tunable and robust  black box search for constraint programming engines have turned this technology  into a powerful and easy to use optimization technology     Constraint programming has proven very efficient for solving scheduling  problems  Getting Started with Scheduling in CPLEX Studio    is an introductory tutorial on the use of constraint programming based scheduling  in OPL  The    Language Reference Manual    provides more information     Constraint programming is also an efficient approach to solving and optimizing  problems that are too irregular for mathematical optimization  This includes time    tabling problems  sequencing problems  and allocation or rostering problems     Chapter 1  Introduction to OPL 3    The reasons for these irregularities that make the problem difficult to solve for  mathematical optimization can be     e Constraints that are nonlinear in nature  e Anon convex solution space that contains many locally optimal solutions    e Multiple disjunctions  which result in poor information returned by a linear  relaxation of the problem    Read    Constraint programming versus mathematical programming    on page 5 for  a detailed comparison     OPL CP Optimizer in a nutshell    Provides the basics of using constraint programming in an OPL model     A CP model must be declared as such  It uses only discrete decision variables for  which you must define 
102. ers and results    and    Creation of  the Java Virtual Machine  JVM     on page 129     Importing Java classes   The function   IloOplImportJava  lt directory or path to jar file gt      imports the classes into the given directory or JAR file in IBM ILOG Script  so that  they can be called  The path can be either absolute or relative to the directory of  the model file    Calling Java    The function     lt Script object or Java object gt  NoOp CallJava  lt class name gt  or  lt Java  object gt   lt method name gt    lt method signature gt  or       lt parameters gt            enables you to call static methods  constructors  and instance methods     The method signature is only needed when there is an ambiguity  method  overloading   that is when several methods have the same name but different  signatures  It is a string with the JNI signature  something like       Lilog opl loOpIModel ILjava lang String  V   for a method taking an IloOp Model instance and a String as parameters     Therefore  you can call      static method   var result 1100p1CallJava  mypackage MyClass    myStaticMethod     15         create instance   var myObject I100p1CallJava  mypackage MyClass    lt init gt       init param          call method on instance  two syntaxes are possible    var mySubObject 1100p1CallJava myObject  getSubObject          or  var mySubObject myObject getSub0bject       The classes are looked for in the JAR files or on the paths specified by the  IloOplImportJava instance  
103. es    int use Resources           clusters all data related to a product  its profit  the set of machines it requires  and  the way it uses the resources  Note also the constraint  forall  p in Products   m in Product p  machines    ctMaxProd p   m     Produce p   lt   MaxProduction   Rent m      which features a forall statement that quantifies over each product and over each  machine used by the product     Integer relaxation  Presents a model that shows how to relax integer constraints then undo the  relaxation     OPL allows relaxation of integer constraints on decision variables  With OPL  there  is a simple way to relax all integer decision variables at once and to convert a MIP  problem to an LP problem  just call the method NoOplModel convertAllIntVars as  shown in the model below  convert_example mod     The inverse operation is also available  To undo integer relaxation  call the method  TloOp IModel unconvertAllIntVars     Relaxing an integer constraint and undoing relaxation   convert_examp e mod     dvar int x in 0  10     minimize x   subject to    Ct  lt   x  gt   1 2        main     var status   0    thisOp Model generate      if  cplex solve       writeln  Integer Model     writeln  OBJECTIVE    cplex getObjValue      if  cplex getObjValue      1      status    1             54 OPL Language User   s Manual    Mixed    thisOp Model convertAllIntVars     if  cplex solve       writeln  Relaxed Model     writeln  OBJECTIVE    cplex getObjValue      if  cplex getO
104. es  you can fine tune  search strategies     10  Search phases  The engine parameters modify the search behavior in a global  way  The impact of the parameter is the same on all parts of the model   Sometimes  a useful knowledge of some part of the model can be used to  modify how the search should be performed on a limited part of the model   In that case  search modifiers can be used to apply some kind of local search  settings on this limited part  They are applied by specifying which modifiers  are to be used on which variables at each phase  You can specify as many  phases as you want     See    Using IBM ILOG Script in constraint programming    on page 116   Related information  Scheduling with IBM ILOG CPLEX Studio  Introduces the basic building blocks of a scheduling model   Scheduling  Describes how to model scheduling problems in OPL   Constraints  Specifies the constraints supported by OPL and discusses various subclasses of    constraints to illustrate the support available for modeling combinatorial  optimization applications     Constraint programming versus mathematical programming    Explains why it makes sense to compare CP and MP  and provides details on the  salient features of each approach     Why a comparison   Summarizes the differences between CP and MP     CP works with the same concepts as mathematical programming  decision  variables  objective function  and constraints  However  there are some differences  between CP models and MP models     In sho
105. es to  process  By default  the size is equal to the length  which is the difference between  the end and the start of the interval  In general  the size is a lower bound on the  length     An interval variable may be optional  Whether an interval is present in the solution  or not is represented by a decision variable  If an interval is not present in the  solution  this means that any constraint on this interval acts like the interval is    not  there     Exact semantics will depend on the specific constraint     Logical relations can be expressed between the presence statuses of interval  variables  allowing  for instance  to state that whenever the interval variable a is  present then the interval variable b must also be present     In your model  you first declare the interval variables  one for each task  Each  variable represents the unknown information  the scheduled interval for each  activity  After the model is executed  the values assigned to these interval variables  will represent the solution to the problem     For example  to create an interval with size 35 in OPL     dvar interval masonry size 35   Step 3  Declare the interval variables    Add the following code after the comment   Declare the interval variables     dvar interval masonry size 35   dvar interval carpentry size 15   dvar interval plumbing size 40   dvar interval ceiling size 15   dvar interval roofing size 5     78 OPL Language User   s Manual    dvar interval painting size 10     dvar interval
106. essing order    After the declarations  all the data sources are processed  Preprocessing is done  before modeling  Postprocessing is available after a solution is found  However   some postprocessing instructions are not triggered unless the postProcess method  is explicitly called on the model object     Note    When the    Force element usage    option is turned off  the default value   all the  declared elements are instantiated    on demand     that is  when they are first used  and the interpreter issues warnings for unused elements  When you turn this  option on  all elements are used and no warning message is issued    Data initialization   If you declare the data of your project internally in the model file  as opposed to    externally in a data file   you cannot access it later by means of a script statement  such as     myData myArray_inMod 1    2   Otherwise  OPL throws an error message because data elements only hold external  data elements declared using the       ellipsis  syntax and read from a  dat file  or other data source     Control on the solve operation    The solve operation is performed by the flow control in a main block  via the  oplrun command  or in the IDE     A specific API is provided to enable advanced users to control these tasks  Please  refer to the op  runsample cpp example  This file is at the following location      lt Install_dir gt  op  examples op _interfaces cpp src  where  lt Instal1_dir gt  is your installation directory   Ending o
107. ew to produce a more pleasing  representation of the results     The example covering dat shows data for an instance of this model     Instance data for the set covering model  covering  dat     NbWorkers   32    Tasks     masonry  carpentry  plumbing  ceiling   electricity  heating  insulation  roofing   painting  windows  facade  garden   garage  driveway  moving      Qualified       919 22 25 28 31       12 15 19 21 23 27 29 30 31 32       10 19 24 26 30 32       4 21 25 28 32       11 16 22 23 27 31       6 20 24 26 30 32       12 17 25 30 31       8 17 20 22 23       9 13 14 26 29 30 31                                 NOOB WDNYE    10 21 25 31 32     14 15 18 23 24 27 3  18 19 22 24 26 29 3  11 20 25 28 30 32    16 19 23 31     9 18 26 28 31 32      0 32    1      1   Cost   11111111222222233334444555666789      A solution to covering mod    For the instance data given in covering dat  OPL returns the solution    Optimal solution found with objective  14  crew   23 25 26     Warehouse location  Describes the problem and presents the model and data files     Warehouse location is another typical integer programming problem  Suppose a  company that is considering a number of locations for building warehouses to  supply its existing stores  Each possible warehouse has a fixed maintenance cost  and a maximum capacity specifying how many stores it can support  In addition   each store can be supplied by only one warehouse and the supply cost to the store  differs according to
108. example also uses an instance of IloOplCplexBasis to pass the basis  from one optimization model to another  Using a basis  you can pass information  from one optimization model to another and accelerate the search     Note     The basis structure is currently limited to pass basis information between two  optimization models that have the same structure  same number of variables and  rows   as is the case for the mulprod_main example     Procedure    To pass information to another model    1  Create a basis structure   var basis   new Ilo0p CplexBasis      2  Load the structure with the basis contained in a cplex instance   basis getBasis cplex    3  Fill another instance with the basis   basis setBasis cplex     Writing an output file    How to use script statements to write an output file   About this task    The distributed example mulprod_main also illustrates how to use script statements  to write an output file  To do so  you use the IloOplOutputFile class     Opening a file   Procedure    To open a file   1  Write the following code     Chapter 3  IBM ILOG Script for OPL 103    var ofile   new I1o0pl0utputFile  mulprod_main txt     2  Then you can write statements such as   ofile writeln  Objective with capFlour      capFlour    is    curr      Closing the file   Procedure    To close the file     Write the following code   ofile close       Modifying the CPLEX matrix incrementally  How to change the bounds of a CPLEX constraint or variable  How to change the  coeffic
109. float profit Products            declares the array profit and specifies that its initialization is given in a data file   The data file simply associates an initialization with each non initialized piece of  data     Instance data for the production model  gas  dat     Products      gas   chloride      Components      nitrogen   hydrogen   chlorine        Demand      1 3 0   1 4 1      Profit    30 40    Stock    50 180 40      Data initialization  OPL offers a variety of ways of initializing data  One  particularly useful feature is the possibility of associating indices with values to  avoid various kinds of errors  The instance data below  gasn dat  illustrates this  feature on the instance data for the Volsay production model     Instance data with indices for the production model  gasn dat     Products      gas    chloride      Components      nitrogen    hydrogen    chlorine        Profit      gas  30   chloride  40     Stock      nitrogen  50     hydrogen  180   chlorine  40     Demand        gas       nitrogen  1  hydrogen  3  chlorine  0       chloride       nitrogen  1  hydrogen  4  chlorine  1            The initialization  profit      gas  30  chloride   40       describes the initialization of array profit by associating the value 30 with index  gas and the value 40 with index chloride   Of course  the order of the pairs has no    14 OPL Language User   s Manual    importance in these initializations   When using index value pairs  the delimiters     and    must
110. formation might be useful    1  The environment variable JAVA_HOME need to be defined  OPL will load a JVM  from JAVA_HOME for the external Java function calls  When the models are solved  by a Java Application  the JVM for the Java application and the JVM for the  external Java functions calls must be the same version     Chapter 4  Advanced features 129    2  AJVM might have multiple modes  such as client  server  etc  When the models  are solved by a Java Application  the JVM for the Java application and the JVM  for the external Java functions calls must also be in the same mode  The default  mode of JVM OPL chooses to load for external Java function calls will be  printed to standard output when a model with external Java function calls is  solved by oplrun  OPL 5 x  or oplrunjava  OPL 6 x     3  If you want to use a different mode of JVM other than the default mode  you  will need to use the environment variable ODMS_JVM_LIBRARY_OVERRIDE to  override the default selection  The value of ODMS_JVM_LIBRARY_OVERRIDE should  be the relative path of libjvm so from the JRE root path  For example  defining  ODMS_JVM_LIBRARY_OVERRIDE as  1i1b i386 server libjvm so will cause OPL to  load a 32 bit server JVM     Using IBM ILOG Script classes to make clean and reusable code  Explains how to use IBM ILOG Script classes to wrap the calls to external  functions     About this task    As shown in this knapsack example  you can wrap the calls to external functions  into user defined IBM
111. g custom Java code using Eclipse    Explains how to use the popular Eclipse IDE to debug your code when calling  external Java code from OPL script statements     Procedure summary  Indicates the main steps of the debugging procedure     132 OPL Language User   s Manual    Procedure    To debug custom Java code using Eclipse   1  Create an Eclipse project  You create an Eclipse project for your custom code     2  Create a run configuration  You create an Eclipse Remote Debug run  configuration for this project     3  Start the CPLEX Studio IDE with Java in debug mode   4  Set breakpoints and debug     You set breakpoints  run the Eclipse Debug run configuration  then run your  model as many times as necessary     Results    You can easily follow similar instructions in other IDEs  Read the documentation of  your favorite IDE about remote debugging     Creating an Eclipse project  The steps to create the Eclipse project     Procedure    To create the Eclipse project     1  Choose New Project  gt  Java Project to open the Eclipse wizard for Java project  creation     2  Give it the directory name where your Java source code is stored     If the project uses OPL Java APIs  it must reference the file oplall jar from   lt OPL_HOME gt  1ib to be able to compile     Creating a run configuration  The steps to create a run configuration     Procedure    To create the run configuration   1  Choose Run  gt  Debug to open the wizard for run configuration creation   2  Add anew Run Config
112. gCost     200 150 100     Product        lt 6  shirtM   3 4   gt     lt 4  shortM    2 3    gt     lt 7  pantM    6 4   gt    l      The integer program for this model uses two sets of variables  production variables  and rental variables  A production variable produce p  describes the production of  product p  a rental variable rent m  is a 0 1 variable representing whether machine  m is rented  Most of the constraints are similar to traditional production problems  and pose few difficulties  The most delicate aspect of the modeling is expressing  that a product can be produced only if its equipment is rented     It is not possible to use the same idea as in the warehouse location problem  e g   a  constraint    produce p   lt   rent m     is not correct  since produce p  is not a Boolean variable in this model  One might  be tempted to write    produce p   lt   produce p    rent  m     Chapter 2  The application areas 53    but this constraint is not linear  The solution adopted in the model is to use an  integer representing the maximal production of any product     int MaxProduction   max r in Resources  Capacity r      and write  produce p   lt   MaxProduction   rent m     If machine m is rented  then the constraint is redundant  since MaxProduction is  chosen to be larger than produce p   Otherwise  the right hand side is zero and  product p cannot be manufactured  Note the data representation in this model  the  type  tuple productType     int profit     string  machin
113. gt   1   n  glass      0    n  copper      0   n  copper      0    n  plastic      0     k    Some are just a direct expression of the problem description  For example  this  constraint   n  wood    gt   1   gt  n  plastic    gt   1     means that if there is at least one wood component  there needs to be at least one  plastic component     Others use intermediate structures  For example  this constraint     64 OPL Language User   s Manual    sum c in Components  n c   lt   capacity_int_idx color      states that the total number of components must not exceed the capacity   depending on the color  For this  a preprocessed calculated structure has been  created to go from the capacity indexed by strings to the capacity given by color  indexes     int capacity_int_idx RColors     ord Colors c    capacity c    c in Colors      The selection model  The selection model vellinochooseBin mod is also a very  simple CPLEX model     A variable is created for each available configuration given as input  by means of  the tuple structure Bin and given in the tuple set Bins     dvar int produce Bins  in 0  maxDemand     The objective is to minimize the number of bins produced   minimize  sum b in Bins  produce b    The only constraint is to cover the demand in terms of number of components     subject to    forall c in Components   demandCt  sum b in Bins  b n c    produce b     demand c          The flow control script  The flow control script defined in vellino mod links the  other model
114. guage Reference Manual    Cache results for find   lookup    Calculate iteration sets for conditional blocks    Declare local script variables using the keyword var  See Declaration of script  variables in the Language Reference Manual    In CP models with customized search strategies  consider the order of search  phases  See    Multiple search phases    on page 119 in the Language User   s Manual   Constraint labels may have a significant performance and memory cost  See  Constraint labels in the Language Reference Manual    To improve the performance of a model from the IDE  use the Tune Model  button  See Using the performance tuning tool in IDE Tutorials    Using sorted versus ordered sets affects the memory consumption and the speed  of execution but the effect is different depending on what operations are carried  out on the sets  It is therefore not possible to give general recommendations on  when to use sorted sets rather than ordered sets    Using slicing rather than if statements usually saves time and memory  For  example  in the following code lines   int n 1000     dvar int x 1  n  1  n     subject to   ctl forall i in 1  n j in 1  n i  4  amp  amp  j  5  x i  j   5   ct2 forall i in 1  n j in 1  n  if  i  4  if  j  5  x i   j   5             Copyright IBM Corp  1987  2011 137    the ct1 constraint is 60 times faster and lighter in memory than ct2     To write efficient models  see also    Modeling tips    on page 27 in the Language  User   s Manual     To cont
115. h  In addition  all of these  products can be manufactured only by renting an appropriate machine  The profit  on the products  excluding the cost of renting the equipment  are also known  The  company would like to maximize its profit        A fixed charge model  fixed mod     on page 53 shows a model for fixed charge    problems  while    Data for the fixed charge model  fixed dat     on page 53 gives  some instance data     52 OPL Language User   s Manual    A fixed charge model  fixed mod     cry     string  Machines     string  Products      3    string  Resources      3   int Capacity Resources           int MaxProduction   max r in Resources  Capacity r    int RentingCost Machines            tuple productType    int profit    string  machines   int use Resources      productType Product Products            dvar boolean Rent Machines    dvar int Produce Products  in    MaxProduction     constraint ctMaxProd Products   Machines      maximize  sum  p in Products    Product p  profit   Produce p     sum  m in Machines    RentingCost m    Rent m      subject to    forall  r in Resources    ctCapacity   sum  p in Products    Product p  use r    Produce p   lt   Capacity r    forall  p in Products   m in Product p  machines    ctMaxProd p   m     Produce p   lt   MaxProduction   Rent m            Data for the fixed charge model  fixed  dat     Machines     shirtM shortM pantM     Products     shirt shorts pants     Resources     labor cloth     Capacity     150 160     Rentin
116. hat  resource  Finally  we need to know the consumption of resources by the different  products     This is a general outline of an optimization problem  The production example  illustrates a specific pasta manufacturing problem  The project contains a model   product mod  shown in the example below  which states the problem to be solved   The data to be used by the model is also shown below  in the fileproduct dat     A pasta manufacturing problem  product  mod      string  Products      3   string  Resources      3  tuple productData    float demand   float insideCost   float outsideCost   float consumption Resources        productData Product Products          float Capacity Resources       3    dvar float  Inside Products     dvar float  Outside Products      execute CPX_PARAM    cplex preind   0   cplex simdisplay   2             Copyright IBM Corp  1987  2011 33    minimize  sum  p in Products     Product p  insideCost   Inside p     Product p  outsideCost   Outside p      subject to    forall  r in Resources    ctInside   sum  p in Products    Product p  consumption r    Inside p   lt   Capacity r    forall  p in Products    ctDemand   Inside p    Outside p   gt   Product  p   demand        Data for the pasta manufacturing problem  product  dat     Products      kluski    capellini    fettucine      Resources      flour    eggs      Product         kluski    lt  100  0 6  0 8    0 5  0 2    gt    capellini    lt  200  0 8  0 9    0 4  0 4   gt    fettucine    lt  300  
117. hat the  engine must start instantiating the where variables   execute     var f   cp factory    cp setSearchPhases f searchPhase where             In each phase  you can use search modifiers to apply specific settings that will be  local to the search phase  To this effect  you specify which ones are used on which  variables at each phase     The syntax to apply search modifiers in a phase is     var phasel   searchPhase variable_array_from_model   variable selector   value_selector      You can have as many phases as you want  You tell the CP Optimizer engine the  phases to use with the syntax     cp setSearchPhases phasel  phase2      See    Using IBM ILOG Script in constraint programming    on page 116 and  Understanding solving statistics and progress  CP models         Modeling tips    Describes a few recommended practices to help you write more efficient models     Efficient models    In the sense of    running as efficiently as possible        An application can often be described by various models that may exhibit  fundamentally different performances in terms of memory and computing time   This is particularly important for large scale models     In this context     running as efficiently as possible    applies to the part of the  execution that is related to modeling  NOT to model design itself  In other words   this section does not explain how to write a better model that finds an optimal  solution faster  Refer also to Chapter 5     Performance and memory usage 
118. he relaxation is  minimal        15    This status occurs only with the parameter  feasoptmode set to 1 on a continuous  problem  A relaxation was successfully  found and a feasible solution for the  problem   if relaxed according to that  relaxation  was installed  The relaxation is  optimal        16    This status occurs only with the parameter  feasoptmode set to 2 on a continuous  problem  A relaxation was successfully  found and a feasible solution for the  problem   if relaxed according to that  relaxation  was installed  The relaxation is  minimal        17    This status occurs only with the parameter  feasoptmode set to 3 on a continuous  problem  A relaxation was successfully  found and a feasible solution for the  problem   if relaxed according to that  relaxation  was installed  The relaxation is  optimal        18          This status occurs only with the parameter  feasoptmode set to 4 on a continuous  problem  A relaxation was successfully  found and a feasible solution for the  problem   if relaxed according to that  relaxation  was installed  The relaxation is  minimal        90 OPL Language User   s Manual          Code number    Solution status       19    This status occurs only with the parameter  feasoptmode set to 5 on a continuous  problem  A relaxation was successfully  found and a feasible solution for the  problem   if relaxed according to that  relaxation  was installed  The relaxation is  optimal                                                   
119. he requirements for modeling in  optimization  that is  expressing constraints on decision variables  However  an  optimization application might also need functionality for manipulating data  This     non modeling    expressiveness of the OPL language is called scripting  and is  available as IBM ILOG Script  a scripting language for combining OPL models and  interacting with them  IBM ILOG Script an implementation of the ECMA 262  standard  also known as ECMAScript or JavaScript      You can use OPL functions  except and and or  within IBM ILOG Script blocks by  specifying the OPL namespace       Opl xxx      Important     IBM ILOG Script for OPL manipulates script variables which are denoted by  means of the keyword var and are different from OPL modeling decision variables   denoted by means of the keyword dvar     Scripting is used in three different situations  as described in the following  sections     e Preprocessing and postprocessing to prepare data and work on solutions  e Flow control to orchestrate model  model data  and solving    e A few tips  additional information on how the language interpreter works and  on data declaration    e Common pitfalls  common errors you should avoid when writing script  statements in your OPL models    See also the Reference Manual of IBM ILOG Script Extensions for OPL for an  overview and a detailed description of the IBM ILOG Script API        Copyright IBM Corp  1987  2011 87    Preprocessing and postprocessing    Use preproce
120. he system  If    140 OPL Language User   s Manual    your model requires more than 2GB of memory  consider moving to a 64 bit  architecture  which has a substantially higher limit     Using 4GT tuning  To raise the addressable space from 2GB to 3GB     If you are using 32 bit OPL on Windows  consider using 4GT tuning     In some Windows servers  it is possible to modify the underlying kernel and  applications to raise the addressable space from 2GB to 3GB  This procedure  requires several steps  but it can be useful in limited situations  This approach is  further discussed in an FAQ that you can read from the IBM ILOG web site at  http    www 01 ibm com support docview wss rs 0   amp context SSCMS4U   amp uid swg21401500 amp loc en_US amp cs utf 8 amp cc us amp lang all      Scaling down the size of the model    For the model to be solved more easily     Lastly  if none of these techniques are viable  then it may be that the model is too  large to be solved easily on the target machine  For these remaining situations  you  may need to make the model smaller  in terms of the data and constraints  in order  to get it to run under the available memory        Multi threading    An example is provided to illustrate how to use multi threading to solve models  more quickly     A typical problem to solve    The problem is to calculate the tangency portfolio for a given set of possible  investment assets     This example calculates the tangency portfolio for a given set of possible  
121. his API is documented in the IBM ILOG Script Extensions  Reference Manual  See also mulprod_main mod for an example     Reduced cost or opportunity cost    The reduced cost provides the rate of change in the objective for each nonbasic  variable as it moves from the bound at which it resides  The most common type of  variable has a lower bound of 0 and an infinite upper bound  In this case  the  reduced cost indicates the rate of change in the objective as the variable moves to a  nonzero value     If v is a decision variable  call   v reducedCost    See also    Displaying results    on page 18    Information on constraints   For constraints  the dual variable measures the rate of change in the objective as  the right hand side of the constraint changes  For example  with a capacity  constraint  the dual variable measures the improvement in the objective per unit of    additional capacity     Table 1 summarizes what information you can get on a constraint c     Table 6  Sensitivity analysis on constraints             To get Call  the value of the associated dual variable c dual  the slack c slack  the lower bound c LB  the upper bound c UB                This API is documented in the IBM ILOG Script Extensions Reference Manual  You  can also read this information in the Problem Browser of the IDE by clicking on a  constraint label after a run configuration has been executed     Integer programming  Defines integer programming and describes a set covering problem  a warehouse 
122. how to build a school timetable  given a set of room specifications  teacher  skills  and educational requirements     What to do and where to find the files    Introduces you to the example     In this tutorial  you work on the following      The data model   e Decision variables   e Core constraints   e Side constraints   e Minimizing the makespans   e Customizing the search   e Postprocessing the solution    You will work with thetimetabling example  supplied at the following location    lt Install_dir gt  op  examples op1 timetabling    where  lt Instal1_dir gt  is your installation directory     The data model    Explains how the data is organized     The data model specifies basically   e The set of educational requirements named RequirementSet  modeled by a set of    tuples   tuple Requirement    string Class     a set of pupils  string discipline     what will be taught  int Duration     course duration  int repetition     how many time the course is repeated    70 OPL Language User   s Manual    e A set of teacher skills TeacherDisciplineSet  modeled as a set of  lt teacher   discipline gt  pairs    e A set of dedicated rooms DedicatedRoomSet  modeled as a set of  lt room   discipline gt  pairs    e A set of available rooms Room  modeled as a set of strings     For each educational requirement  the model specifies a course repetition  parameter  The actual entities to be scheduled are instances of courses that fulfill  the requirements  They are described with the fo
123. how to solve a model iteratively   About this task    More precisely  let us assume that you want to solve the original model  then  increase the capacity for the flour ingredient  then solve again  You want to do this  as many times as possible  Doing so  you will obtain the optimal value for this  problem for each possible value of flour capacity  When the flour capacity is too  high and no solution is found  you will stop the experience     Procedure    To solve a model iteratively     1  Define a    main    block to indicate that you want do flow control scripting to  manipulate different models and or searches     2  Load the necessary structures  the model definition  the initial model data  and  the IloOplModel instance that creates the link between them     3  Generate the optimization model from the initial data    4  Solve the current optimization model with the current data   e if there is no solution  then quit  e if there is a solution  print the objective value   5  Get the data elements from an IloOp Model instance    6  Modify some of the data elements  modify the data element for the flour  capacity    7  Create a new OPL model with the modified data  use the model definition and  modified data elements and create a new IloOplModel instance to link them     98 OPL Language User   s Manual    8  Complete model  generate the new current optimization model   Results    You can see the complete model in mulprod_main mod  It iterates on the last items  as long as 
124. ical constraints are automatically transformed in OPL as based  on the CPLEX solving engine     You have already seen how to represent the logical constraints of this problem in     What are the constraints     on page 84  However  they deserve a second glance  because they illustrate an important point about logical constraints and automatic  transformation in OPL as based on the CPLEX solving engine   forall  m in Months         Using some constraints as boolean expressions to state that at least     2 of the given 5 constraints must be true   ctUse7    Use m    v1      0     Use m   v2      0     Use m    ol    Use m    02      0     Use m   03      0   gt            0     23       Using the  or  operator  set each Use variable to be     zero or greather than 20   forall  p in Products    ctUse8    Use m   p     6      Use m   p   gt   20         Using  or  and  implication  operator  set that if one of 2 given products    Chapter 2  The application areas 85       is used more than 20 then a third one must be used more than 20 too   ctUse9    Use m    v1    gt   20      Use m   v2    gt   20    gt  Use m   03    gt   20     Consider  for example  the constraint that the blended product cannot use more  than three oils in a batch  Given that constraint  many programmers might  naturally write the following statement  or something similar      use i   v1     0     use i  v2     0     use i  o1     0     use i   02     0     use i   03     0      lt   3                 That s
125. ide p t  Inv p t  gt    execute DISPLAY    writeln  plan   Plan          which were added to produce a visually pleasing display   A solution to mulprod mod    For example  on the instance data depicted in Figure 1 on page 62  OPL produces  the optimal solution    40 OPL Language User   s Manual    Optimal solution found with objective  457   plan       lt 10 0000 0 0000 0 0000 gt   lt 0 0000 100 0000 0 0000 gt   lt 0 0000 50 0000 0 0000 gt      lt 0 0000 20 0000 0 0000 gt   lt 0 0000 200 0000 0 0000 gt   lt 0 0000 100 0000 0 0000 gt      lt 50 0000 0 0000 0 0000 gt   lt 66 6667 33 3333 0 0000 gt   lt 66 6667 33 3333 0 0000 gt       A blending problem  Presents the problem of calculating different blends of gasoline according to  specific quality criteria     Blending problems are another typical application of linear programming  Consider  the following problem  An oil company manufactures three types of gasoline   super  regular  and diesel  Each type of gasoline is produced by blending three  types of crude oil  crudel  crude2  and crude3  Table 1 below depicts the sales price  and the purchase price per barrel of the various products  The gasoline must  satisfy some quality criteria with respect to their lead content and their octane  ratings  thus constraining the possible blendings     Table 4  Prices for the blending problem                            Sales Price Purchase Price  super  70 crudel  45  regular  60 crude2  35  diesel  50 crude3  25       Table 2 describes
126. ient of a variable     In this tutorial  you have learned how to solve a sequence of modified OPL models  by changing data in OPL  This is a useful technique  however you need to generate  the CPLEX model again after each modification  Sometimes  when the number of  iterations is high and generating the new iteration takes a long time compared to  solving it  you may prefer to have a direct interaction with the generated  optimization model and be able to work incrementally on the result of the  previous iteration  You can do so by taking advantage of the API of IBM   ILOG Script extensions for OPL     The mul prod production planning example illustrates how to change the bounds of  a CPLEX constraint     You can also   e change the bounds of a variable    e change the coefficient of a variable in a CPLEX constraint or in the CPLEX  objective    Changing bounds   Of a CPLEX constraint    To change the bound of a constraint  you can directly change the LB and UB  properties on the IloConstraint class     It is important to understand what happens when these methods are used  the  optimization model is directly modified but the OPL model is not  Therefore  the  solution given by CPLEX corresponds to the modified optimization model  but not  to the original OPL model any more  On the other hand  the advantage is that the  CPLEX matrix is directly modified  not rebuilt from scratch  and any new search  can take advantage of the previous ones     You can see in the mulprod_change_
127. in an execute block  float Cost Routes     execute INITIALIZE    for  var t in TableRoutes      Cost  Routes get t p Connections get t o t d      t cost        The get method throws an exception on non existing tuples to allow you to use  the result directly and continue processing instead of checking for non null values     Note     88 OPL Language User   s Manual    You don t need to initialize your array elements to zero as OPL does that for you  by default     Changing option values  Use execute blocks to change CPLEX parameters  CP parameters  and OPL  settings     You can also use execute blocks to change CPLEX parameters  CP parameters  and  OPL settings within an OPL model     The code examples are available at the following location    lt Install_dir gt  op1 examples op1   where  lt Instal1_dir gt  is your installation directory    Changing CPLEX parameters  Any CPLEX parameter can be set from a script  statement in an execute block  In case of conflict  if a different value has been set  from the IDE for the same parameter  the value set in the script statement takes    precedence     Changing CPLEX parameters via scripting  product  mod  shows how to switch off  CPLEX presolve and enable simplex logging in the product mod model     Changing CPLEX parameters via scripting  product  mod     execute CPX_PARAM    cplex preind   0   cplex simdisplay   2          In Preprocessing script statement setting a parameter  transp4 mod   the script  named PARAMS sets a time lim
128. ince OPL retrieves the product from the routes in an  efficient way when the connection is known  The complete model is shown in    A  sparse multi product transportation model  transp3 mod     on page 44     Assume now that part of the user data is given by a relational table that contains  tuples of the form  lt o d p c gt  indicating that a connection between cities o and d  transports product p at cost c  This data can be transformed into the representation  used in    A sparse multi product transportation model  transp3 mod     on page 44   The routes can be obtained as     Route  Routes      lt   lt o d gt  p gt     lt p o d c gt  in TableRoutes       and the costs as  float Cost Routes       lt t p  lt t o t d gt  gt  t cost   t in TableRoutes       Both preprocessing instructions are linear in the size of the table     Sensitivity analysis  Explains how to obtain sensitivity information on variables and constraints     Finding the optimal solution to a linear programming model is important  but very    often you need to know what happens when data values are changed  You need  sensitivity information such as the reduced cost  or the basis status for variables     46 OPL Language User   s Manual    Some types of sensitivity information are made available by IBM ILOG OPL   e Basis status   e Reduced cost or opportunity cost   e Information on constraints    Basis status    You can get the basis status by calling the method getBasisStatus on a  IloOplCplexBasis object  T
129. ing solution to warm start the CPLEX search   float values i in r     i  5   10   0     The second part of the main block illustrates how to use it        Setting initial solution  writeln  Setting initial solution      var cplex2   new IloCplex      var opl2   new Ilo0plModel  def  cplex2    opl2 generate      var vectors   new Ilo0p CplexVectors       Chapter 3  IBM ILOG Script for OPL 113       We attach the values  defined as data  as starting solution     for the variables x    vectors attach opl2 x opl2 values      vectors setVectors  cplex2      cplex2 solve      writeln op12 printSolution        The solution is then     Setting an initial solution  x   0000100000 0    y  1234567 89 10      The CPLEX log reports   MIP start values provide initial solution with objective 65 0000    Conclusion  Concludes on setting an initial solution for the CPLEX engine     By attaching pairs of constraint arrays and value arrays  you can determine both     e to which part of the model an initial solution will be set  use the setVectors  method     e from which part of the model the solution will be saved  use the getVectors  method     The mechanism is the same  only the method signature is different  Moreover  you  can apply the same mechanism to the CPLEX basis using the setBasisStatus and  getBasisStatus methods of the class IloOplCplexBasis     Setting preferences on the search for conflicts and relaxations    Uses the conflictIterator example and its model conflictIterator mod to
130. ints     112 OPL Language User   s Manual    Variables    range r   1  10   dvar int  x r    dvar int  y r      Constraints  minimize  sum  i in r   x i    sum  j in r   y j    subject to   ctSum   sum  i in r   x i   gt   10   forall  j inr   ctEqual   yli     4     This model has a lot of different possible solutions with the same objective  The  purpose of the example is to show that the solution returned by CPLEX can be  influenced by the initial solution you pass to the solving engine     Default behavior  Provides the code and the solution     The following code from the flow control part of the model  the main block  shows  what the default behavior would be        Default behaviour   writeln  Default Behaviour      var cplexl   new IloCplex      var opll   new Ilo0plModel  def  cplex1    opll generate      cplexl solve     writeln opll printSolution        The solution is     Default Behaviour  x   10000000000    y  123456789 10      CPLEX calculates the first variable from the array such as to satisfy the sum  constraint     Setting the initial solution  Shows how to use a value array     The class that enables you to pass an initial solution to the CPLEX MIP algorithm  is IloOplCplexVectors  You can control the part of the model to be set with an  initial solution by attaching a pair of elements made up of a constraint array and a  value array  The value array is defined in the model       The following array of values  defined as data  will be used as       a start
131. investment assets     What is the efficient frontier     You need to find the efficient frontier of a given set of investment assets  You can  find an article on this subject here  http   en wikipedia org  wiki   Modern_portfolio_theory The_efficient_frontier     Let I be a given set of investment assets  indexed by i 1  I  The ROI vector for  those investments is a random variable vector R  The random variable for  investment asset 7 is R i   The expected values are E R i   r i  and the covariance  matrix for R is COV  For each investment  we assume we know its expected return  r i   and we also know COV the covariance of R  So for each i j investment   COV i j  is the covariance of R i  with R j   and COV i i  is the variance of R i      An investor is interested in investing her wealth  100  by mixing the various assets  and obtaining a portfolio whose risk is lower than any of the individual  investment assets  She does this by playing on the negative covariance of the  combined assets  This mix is represented by the vector  X1      Xi    XI      Chapter 5  Performance and memory usage 141    i I    Xaxi   100    i 1    The investor wants to maximize the expected value of the total return on investment    TR   Yan  i 1    but she also wants to minimize the risk  represented by    i 1 JHI  EA  i 1 j 1    X  X  COV i j     Unfortunately  the two objectives are contradictory  because maximize TR also  maximizes TV and vice versa  So the idea is to find a compromise p  and ma
132. involved in building a house in a way that minimizes an objective  Here  the objective is the cost associated with performing specific tasks before a preferred  earliest start date or after a preferred latest end date  Some tasks must necessarily  take place before other tasks  and each task has a given duration  To find a  solution to this problem using OPL  you will use the three stage method  describe   model  and solve     Describe   The problem consists of assigning start dates to tasks in such a way that the  resulting schedule satisfies precedence constraints and minimizes a criterion  The  criterion for this problem is to minimize the earliness costs associated with starting  certain tasks earlier than a given date and tardiness costs associated with  completing certain tasks later than a given date     For each task in the house building project  the following table shows the duration   measured in days  of the task along with the tasks that must finish before the task  can start     Table 8  House construction tasks                                  Task Duration Preceding tasks   masonry 35   carpentry 15 masonry   plumbing 40 masonry   ceiling 15 masonry   roofing 5 carpentry   painting 10 ceiling   windows 5 roofing   facade 10 roofing  plumbing   garden 5 roofing  plumbing   moving 5 windows  facade  garden   painting                   76 OPL Language User   s Manual    The other information for the problem includes the earliness and tardiness costs  associated w
133. ion and management  ending objects 111  memory consumption  decision variables in CP 8  min  OPL keyword  inCP 8  mixed integer linear programming   MILP  21 55  model decomposition  column generation 106  step by step process 107  model files 13  model data separation 1  13  ellipsis 13  modeling  definition 10  modeling languages and mathematical  programming 1  modeling tips  arrays 31  labeling constraints 32  order of indexers 31  order of search phases 119  sparsity 27  modeling scripting separation 9  models  blending 21  41  changing settings via scripting 89  cutting stock 107  defining for CP 24  efficiency 27  67  script statements 97  fixed charges 52  genericity 11  12  13  instantiating via scripting 108  inventory 57  knapsack 19  multiperiod production planning 39  passing info from one to another 103  product mix 33  production planning 10  38  in MILP 55  set covering 48  solving several in sequence 1  98  transportation 27  43  vellino 62  warehouse location 35  49  writing to an output file 103  modifying data from    main     scripting 102  mulprod production example 98  multicommodity flow 43  multiknapsack problem 19  multiperiod production planning  problem 39    N    nonlinear constraints  inCP 6   nonlinear programming 3   NP complete 3    O    objective function  and mathematical programming 2  and order of execute blocks 88  feasible vs  final solution 21  objects  ending 111  ODMROOT environment variable 129  ODMS_JAVA_ARGS environment  variable 1
134. ion areas 57    InventoryCost      sum t in Periods   Inv t        subject to    ctinits   Inv 0     Inventory   forall  t in Periods    ctCapacity   RegulBoat t   lt   Capacity   forall  t in Periods    ctBoat   RegulBoat t    ExtraBoat t    Inv t 1     Inv t    Demand t         Data for the simple inventory model  sailco dat   NbPeriods   4    Demand     40  60  75  25      RegularCost   400    ExtraCost   450    Capacity   40    Inventory   10    InventoryCost   20     The key idea underlying this model is to use two sets of variables for describing  the production  variables regulBoat t  represent the number of boats built at the  regular price   400 in the instance data  for period t  while extraBoat t    represents the number of extra boats  i e   boats built at the higher price  The model  also contains inventory variables  Most of the constraints are typical for inventory  problems     In addition  the constraint  forall  t in Periods    ctCapacity   RegulBoat t   lt   Capacity     states that there is a capacity constraint on the regular boats  This constraint could  be expressed directly as a bound but this is not of concern since it will disappear  in the next model  Note also that all the variables will be given integral values for  this application  although they are of type float  This is due to the problem  structure  not to chance     The constraint matrix of this problem is totally unimodular  which guarantees that  the optimum has only integer values for int
135. ion was found  to be feasible after phase 1 of FeasOpt  A  feasible solution is available  This status is  also used in the status field of solution and  mipstart files for solutions from the solution  pool        128 This status occurs only after a call to the  method populate on a MIP problem  The  limit on mixed integer solutions generated  by populate  as specified by the parameter  populatelim  has been reached        129 This status occurs only after a call to the  method populate on a MIP problem   Populate has completed the enumeration of  all solutions it could enumerate        130 This status occurs only after a call to the  method populate on a MIP problem   Populate has completed the enumeration of  all solutions it could enumerate whose  objective value fit the tolerance specified by  the parameters solnpoolagap and  solnpoolgap                 For more information    See the description of class IloCplex in the Reference Manual of IBM ILOG Script  Extensions for OPL  You can also find the complete reference documentation of  CPLEX parameters in the CPLEX Optimizer documentation  Parameters of IBM  ILOG CPLEX Optimizer  Parameter Table      Changing CP parameters  You can set any constraint programming parameter  from a script statement in an execute block  In case of conflict  if a different value  has been set from the IDE for the same parameter  the value set in the script  statement takes precedence     Chapter 3  IBM ILOG Script for OPL 93    Changing CP par
136. is Language User   s Manual is composed mostly of  tutorials for both OPL and IBM ILOG Script for OPL        Copyright IBM Corp  1987  2011 ix    X OPL Language User   s Manual       Chapter 1  Introduction to OPL    Introduces modeling languages in general  then gives a short tour of the OPL  modeling language  discusses some modeling issues  and finally illustrates  optimization modeling with two examples        Language overview    Explains why modeling languages were created  presents and compares math  programming and constraint programming  and provides a brief introduction to  scripting with references for more information     Modeling languages    Provides a general introduction to modeling languages     Modeling languages were motivated by the desire to simplify the solving of  mathematical programming problems  The fundamental insight underlying  traditional modeling languages is the recognition that many mathematical  programming problems can be expressed in a computer language whose syntax is  close to the standard presentation of these problems in textbooks and scientific  papers  These languages typically provide a number of data types such as arrays  and sets  as well as computer language equivalents to traditional algebraic  notations     For instance  in AMPL  an expression such as    1  NV ajXi         i  1  can be written as    sum  i in 1  n  a i    x i     In addition  some of these languages provide a clean separation between the model  and the instance 
137. is case  model decomposition consists in  breaking down the model into several smaller models and defining a sequence to  solve those smaller models so as to lead to a solution that is also a solution to the  big original model     Column generation techniques use a decomposition into two models called the  master model and the submodel  Column generation techniques are the most  famous among the model decomposition techniques  The process to solve a cutting  stock problem includes one initial step to prepare the submodel  then a series of  iterative steps     The cutting stock problem    Describes the example and tells you where to find the files     106 OPL Language User   s Manual    What you are going to do    In this tutorial  you are going to solve the cutting stock problem described in  Cutting stock problems in the Samples manual  Here is a summary     The problem consists of cutting big wooden boards into small shelves to meet  customer demands while minimizing the number of boards used  A given instance  specifies the length of the boards  the length of the shelves  and the demand for  each shelf type  These variables are expressed as integers  it is therefore an integer  programming problem     In the context of column generation  the two models lend themselves to  interpretation     e The submodel consists of finding possible new patterns  i e  ways of cutting the  items     e The master model consists of deciding how many of each of the already existing  patterns
138. iscrete problems are in general much harder to solve than linear programs     A typical integer program  the knapsack problem  Presents the model and data files     A typical example of integer programs is the knapsack problem  which can be  intuitively understood as follows  We have a knapsack with a fixed capacity  an  integer  and a number of items  Each item has an associated weight  an integer   and an associated value  another integer   The problem consists of filling the  knapsack without exceeding its capacity  while maximizing the overall value of its  contents  A multi knapsack problem is similar to the knapsack problem  except that  there are multiple features for the object  e g   weight and volume  and multiple  capacity constraints  The example below  knapsack mod  depicts a model for the  multi knapsack problem  while    Data for the multi knapsack problem   knapsack dat     on page 20 describes an instance of the problem     A multi knapsack model  knapsack mod     int NbItems      3   int NbResources      3   range Items   1  NbItems    range Resources   1  NbResources    int Capacity Resources       3   int Value Items           int Use Resources   Items           int MaxValue   max r in Resources  Capacity r         dvar int Take Items  in 0  MaxValue     maximize  sum i in Items  Value i     Take i      subject to    forall  r in Resources      Chapter 1  Introduction to OPL 19    ct   sum  i in Items    Use r   i    Take i   lt   Capacity r         This m
139. it easier  for instance  to  accommodate new products in the future     The Volsay production planning model can be rewritten using arrays as     The volsay production model with arrays     string  Products     gas   chloride     dvar float production Products     maximize  40   production  gas     50   production  chloride      subject to      Chapter 1  Introduction to OPL 11    production  gas     production  chloride    lt   50   3   production  gas     4   production  chloride    lt   180   production  chloride    lt   40          This new statement illustrates several features of the language  First  the  instruction     string  Products     gas   chloride       declares a set of strings Products that represents the set of products of the  company  The declaration    dvar float production Products       declares an array of two decision variables  production  gas   and  production  chloride    to represent the optimal production of ammoniac gas and  ammonium chloride  These decision variables are used in the rest of the statement   which remains essentially the same as in    A simple production problem   volsay mod     on page 10  As will become clear subsequently  one of the novel  features of OPL is the generality of its arrays  OPL arrays can have an arbitrary  number of dimensions and their index sets can be arbitrary finite sets  possibly  involving complex data structures     Data declarations  A second fundamental step towards more genericity in the  model amount
140. it on each call to the optimizer     Preprocessing script statement setting a parameter  transp4 mod   execute PARAMS      cplex tilim   100        You can find the product mod and transp4 mod models at the following location  respectively      lt Install_dir gt  op  examples op1 production   lt Install_dir gt  op  examples op1 transp   where  lt Instal1_dir gt  is your installation directory   CPLEX solution status    This table lists the status values for solutions to LP  QP  or MIP problems  The  status value is returned by IloCplex status or IloCplex getCplexStatus           Code number Solution status  1 Optimal solution is available   2 Problem has an unbounded ray                 Chapter 3  IBM ILOG Script for OPL 89       Code number    Solution status       Problem has been proven infeasible        Problem has been proven either infeasible or  unbounded        Optimal solution is available  but with  infeasibilities after unscaling        Solution is available  but not proved  optimal  due to numeric difficulties during  optimization        10    Stopped due to limit on number of  iterations        11    Stopped due to a time limit        12    Stopped due to an objective limit        13    Stopped due to a request from the user        14    This status occurs only with the parameter  feasoptmode set to 0 on a continuous  problem  A relaxation was successfully  found and a feasible solution for the  problem   if relaxed according to that  relaxation  was installed  T
141. ith some tasks     Table 9  House construction task earliness costs                Cost per day for starting  Task Preferred earliest start date   early  masonry 25 200 0  carpentry 75 300 0  ceiling 75 100 0                   Table 10  House construction task tardiness costs       Task Preferred latest end date Cost per day for ending late  moving 100 400 0                   Solving the problem consists of identifying starting dates for the tasks such that  the cost  determined by the earliness and lateness costs  is minimized     Note     In OPL  the unit of time represented by an interval variable is not defined  As a  result  the size of the masonry task in this problem could be 35 hours or 35 weeks  or 35 months     Step 1  Describe the problem    The first step in modeling and solving the problem is to write a natural language  description of the problem  identifying the decision variables and the constraints  on these variables     Write a natural language description of this problem  Answer these questions   e What is the known information in this problem    e What are the decision variables or unknowns in this problem    e What are the constraints on these variables    e What is the objective     Discussion    What is the known information in this problem     e There are ten house building tasks  each with a given duration  For each task   there is a list of tasks that must be completed before the task can start  Some  tasks also have costs associated with an early s
142. l  functions calls 126  updatelnputs  method of the Java  knapsack algorithm 127  user defined preferences  on order of constraints  in flow control  scripting 115    V    value arrays 113  value choosers  for CP search  phases 121  value evaluators  for CP search  phases 121  variable choosers  for CP search  phases 120  variable evaluators  for CP search  phases 120  variables  changing bounds and coefficients  using IBM ILOG Script 104  declaration 97  scope in scripting 96  thisOplModel 99  109  vellino problem  decomposition and column  generation 63  description 62  the models 63  the results 66  vellino production example 63  82    W    warehouse location problem 35  49  with  IBM ILOG Script keyword 88    Index 151    152 OPL Language User   s Manual       Printed in USA    
143. later use  The price for storage of raw oils is 5 monetary  units per ton  Refined oil cannot be stored  The blended product cannot be stored  either     The rest of the oil  that is  any not available in storage  must be bought in  quantities to meet the blending requirements  The price of each kind of oil varies  over the six month period  The two categories of oil cannot be refined on the same  production line     82 OPL Language User   s Manual    There is a limit on how much oil of each category  vegetable or non vegetable  can  be refined in a given month     e Not more than 200 tons of vegetable oil can be refined per month   e Not more than 250 tons of non vegetable oil can be refined per month     There are constraints on the blending of oils   e The product cannot blend more than three oils     e When a given type of oil is blended into the product  at least 20 tons of that  type must be used     e If either vegetable oil 1  v1  or vegetable oil 2  v2  is blended in the product   then non vegetable oil 3  03  must also be blended in that product     The final product  refined and blended  sells for a known price  150 monetary  units per ton     The aim of the six month plan is to minimize production and storage costs while  maximizing profit     What you are going to do    The example used is a standard industrial problem of food manufacturing as  formulated by H P  Williams  food manufacturing 2 in Model Building in  Mathematical Programming   The aim of the proble
144. les you to manipulate complex data  preprocessing   results   postprocessing   and models  flow control   However  IBM ILOG Script is not as  powerful  complete  and efficient as a programming language  As its purpose is to  be simple and accessible for non progammers  more complex software engineering  parts are not supported and should be kept outside of OPL     However  OPL offers a way to interact with external code written in other  programming languages  This external functionality can be plugged into OPL in an  easy to use and reuse manner     This feature allows you to     e write a complex dedicated OR algorithm  such as a shortest path or flow  algorithm  to be used as one step of a decomposed application    e connect your OPL model or data to other external tools such as tools for  statistical analysis  to modify your input data or report your results    e connect your OPL data to other sources or destinations that are currently not  supported as default sources by the language    e connect CPLEX callbacks to your search  not described in this tutorial        Copyright IBM Corp  1987  2011 125    All this is possible by calling external functions from OPL  In OPL 5 1 and later   you can call functions written in the Java programming language  Note that the  Java language itself also offers ways to interact with other programming  languages     Environment prerequisites  Lists what software you need to use external functions     To call Java code  you need to have a
145. llowing tuple   tuple Instance     string Class    string discipline    int Duration    int repetition    int id    int requirementId     i    where the id and requirement parameters indicate the sequential number of the  course specified by the requirement of index requirementId  All these instances are  generated by means of the following OPL construct    Instance  InstanceSet       lt c d t r i z gt  l  lt c d t r gt  in RequirementSet   gt  Z in ord RequirementSet  lt c d t r gt      ord RequirementSet  lt c d t r gt    eal An Lect    F    Decision variables  Presents the decision variables used in the example     The instance set is used to index the decision variable arrays used for the search   as follows  the start date of each course  the room in which the course is held  the  teacher in charge of the course     dvar int Start InstanceSet  in Time     the course starting point  dvar int room InstanceSet  in RoomId     the room in which the course is held  dvar int teacher InstanceSet  in TeacherId     the teacher in charge of the course    Writing the core constraints  How to write constraints that model the interactions between the various  components of the problem     About this task    To produce a valid time table using constraint programming  you must write  constraints that model the interactions between the various components of the  model  course time intervals  teachers  classes and rooms     Procedure    To write the core constraints   1  Define the time i
146. lue to 1e 20     See the note in Examining the results and the data for more information     32 OPL Language User   s Manual       Chapter 2  The application areas    Describes applications of linear and integer programming  constraint programming   quadratic programming  and CPLEX logical constraints     Some examples    Demonstrates how OPL is used in linear programming  product mix problem  and  integer programming  warehouse location problem      Linear programming  a product mix problem  Describes the problem and presents the model and data files     As a first example  let   s consider a simple mathematical programming  MP   problem to determine an optimal production mix     To meet the demands of its customers  a company manufactures its products in its  own factories  inside production  or buys them from other companies  outside  production   Inside production is subject to some resource constraints  each product  consumes a certain amount of each resource  In contrast  outside production is  theoretically unlimited  The problem is to determine how much of each product  should be produced inside the company and how much outside  while minimizing  the overall production cost  meeting the demand  and not exceeding the resource  constraints     The statement of the problem must specify the set of products and the set of  resources  For each product  we need to know the inside and outside production  costs  and for each resource we need to know the available capacity of t
147. m and     Instance data for the set covering model  covering dat     on page 49 below shows  some instance data     A set covering model  covering mod     int NbWorkers Sais  range Workers   1  NbWorkers    string  Tasks          int  Qualified Tasks          assert   forall  t in Tasks   i in Qualified t    i in asSet Workers       alternate formulation   assert   forall  t in Tasks     card Qualified t  inter asSet Workers     card Qualified t       int Cost Workers       3  dvar boolean Hire Workers       minimize  sum c in Workers  Cost c    Hire c    subject to    forall j in Tasks   ct   sum  c in Qualified j     Hire c   gt   1      int  Crew    c   c in Workers   Hire c     1     execute DISPLAY    writeln  Crew   Crew            The first instruction in the model declares a number of workers as an integer  a  range for the workers  and a string type for the tasks  The instruction     int  Qualified Tasks            declares the workers qualified to perform a given task  Therefore   Qualified Tasks  is the set of workers able to perform task t     The problem variables  dvar boolean Hire Workers       indicate whether a worker is hired for the project     48 OPL Language User   s Manual    The constraints    forall j in Tasks   ct   sum  c in Qualified j     Hire c   gt   1     make sure that each task is covered by at least one worker     Note also the declaration   int  Crew     c   c in Workers   Hire c     1       which collects all the hired workers in the set cr
148. m is to blend a number of oils  cost effectively in monthly batches  In this form of the problem  the number of  ingredients in a blend must be limited  and extra conditions are added to govern  which oils can be blended     Where to find the files    The food manufacturing example is supplied as the foodmanufact example at the  following location      lt Install_dir gt  op1  examples op1 foodmanufact    where  lt Instal1_dir gt  is your installation directory     Representing the data    Describes the elements that are necessary to represent the problem accurately     What is known   Describes how known facts are represented in the data file     In this particular example  the planning period is six months  and there are five  kinds of oil to be blended  Those details are expressed as constants  like this      string  Products      3    int NbMonths         range Months   1  NbMonths     represented in the foodmanufact dat data file as   Products     mya  wyg  0 topt   93        NbMonths   63    Chapter 2  The application areas 83    The varying price of the five kinds of oil over the six month planning period is  expressed like this     float Cost Months   Products            represented in the foodmanufact dat data file as the following numeric matrix     Cost     110 0  120 0  130 0  110 0  115 0     130 0  130 0  110 0  90 0  115 0     110 0  140 0  130 0  100 0  95 0     120 0  110 0  120 0  120 0  125 0     100 0  120 0  150 0  110 0  105 0     90 0  100 0  140 0  80 0
149. main mod file how the example can be modified  to change the optimization model directly  In particular  the important line is the  one that changes the bound of a constraint     Changing the bound of a CPLEX constraint    for var t in thisOp Model Periods   thisOp Model ctCapacity  flour   t  UB   capFlour     104 OPL Language User   s Manual    Of a variable    To change the bound of a variable  you can directly change the lower bound  LB   and upper bound  UB  properties on the IloNumVar class  This does not change the  bound of the variable in the OPL model but only in the CPLEX matrix  This  change is taken into account incrementally by the CPLEX engine     Changing the coefficient of a variable  You can use the method  IloConstraint setCoef to change the coefficient of a variable in the invoking  constraint and the method IoObjective setCoef to change the coefficient of a  variable in the invoking objective  The coefficient is changed only in the CPLEX  matrix and in the Concert extracted model  The OPL model is not affected  On the  other hand  the change is taken into account incrementally by the CPLEX engine     Note     The method IloCplex setCoef is available for all CPLEX linear constraints  It  changes the engine representation directly without going through Concert     Basic flow control script    Presents two templates to help you write flow control scripts   To help you write flow control scripts  here are two templates you can start from        Flow control s
150. modeling constraints  For example  in the steel mill  example  there is a packing constraint     subject to    packCt  pack load  where  weight      This pack constraint is a simple but powerful one dimensional packing constraint   It constrains the way coils are associated with slabs with respect to the weights of  the coils and the capacity of the slabs  More precisely  the decision variable  where i  states with which slab coil i is to be associated  The decision variable  load j  represents the total weight of all the coils associated with slab j  using the  values from the array weights as data  In this case  the loads are constrained by the  maximum value of maxLoad which is used as upper bound to create the load  variables     The  all  syntax    In the steel mill example  the arrays of values and decision variables used in the  specialized constraint are modeling arrays  They make sense as a whole and have  been named in the model  Sometimes  you will want to apply a specialized  constraint to a set of variables that is not defined as a named array of variables   but that is made of dynamically collected variables  The all keyword is the syntax  that enables you to collect variables dynamically in an array  This syntax is  important for CP models  It is not illustrated in the steel mill example  See all in  the Language Quick Reference for a complete description     Aggregate and or  The other constraint of the model illustrates how to use the  aggregate or constraint
151. n 250 tons of non vegetable oil can be refined     ctUse2   Use m    01     Use m    02     Use m    03    lt   250     e A blend cannot use more than three oils  or equivalently  of the five oils  two  cannot be used in a given blend     84 OPL Language User   s Manual    ctUse7    Use m    v1      0     Use m   v2      0     Use m   o01      0      Use m    0o2      0     Use m    03      0   gt   2   e Blends composed of vegetable oil 1  v1  or vegetable oil 2  v2  must also include  non vegetable oil 3  03    ctUse9    Use m    v1    gt   20      Use m   v2    gt   20    gt  Use m   03    gt   20      The constraint that if an oil is used at all in a blend  at least 20 tons of it must be  used is expressed like this   ctUse8    Use m  p     0      Use m  p   gt   20    e The fact that a limited amount of raw oil can be stored for later use is expressed  like this   forall  p in Products      ctUse6   if  m       500   Buy m   p     Use m   p    Store m   p      else    Store m 1  p    Buy m   p     Use m  p    Store m   p      What is the objective   Describes how to represent the profit on a monthly basis     On a monthly basis  the profit can be represented as the sale price per ton  150   multiplied by the amount produced minus the cost of production and storage  like  this   maximize  sum  m in Months     150   Produce m     sum  p in Products      Cost m   p    Buy m   p     5   sum  p in Products      Store  m   p       Using logical constraints    Describes how log
152. n MP engine  a decision variable is stored as one more column in a matrix   For a CP engine  it may require much more memory  because the CP engine stores  domain information in the variable  Therefore  a CP engine scales apparently less  than an MP engine  in term of the number of variables and of constraints     8 OPL Language User   s Manual    However  since the set of constraints of a CP engine enables often a more compact  formulation of a problem  there is no direct connection between this property and  the size of problems that either engine can address     Only discrete decision variables    IBM ILOG CP Optimizer engine handles only discrete decision variables  You can  use continuous expressions to define costs or intermediate expressions  but these  continuous expressions must be computed only from discrete decision variables     No gap measure    Because the CP Optimizer engine addresses problems that are potentially non  convex or too irregular for mathematical optimization  it cannot compute valuable  relaxed solutions of a problem  and does not have gap information between the  best found solution and a theoretical bound that an MP engine can provide for a  linear problem     Scripting    Defines scripting languages in general and IBM   ILOG   Script in particular     Modeling languages are sometimes extended by a command language that makes  it possible to interact with models  to solve several instances of the same model  or  to solve sequences of models  IBM
153. n Products   o in Orig p     ctSupply p   0     sum   lt o d gt  in CPs p     Trans  lt  p  lt o d gt   gt      Supply  lt p o gt     forall  p in Products   d in Dest p     ctDemand p   d     sum   lt o d gt  in CPs p     Trans  lt  p  lt o d gt   gt      Demand  lt p d gt     forall c in Connections   ctCapacity   sum   lt p c gt  in Routes    Trans  lt p c gt    lt   Capacity          This is a classic transportation problem with the addition of a capacity constraint  on the inter cities connections  The model is  of course  not appropriate for  large scale transportation problems  where only a fraction of the cities are  connected and a fraction of the products are sent along the connections  This  section discusses how to exploit the sparsity of large scale problems  OPL offers  more support than other modeling languages in this respect  because it can use    44 OPL Language User   s Manual    tuples and arrays indexed by arbitrary finite sets  The methodology for exploiting  sparsity in OPL consists of mirroring  in the model  the structure of the application   This structure can be inferred from the objective function and the constraints of the  application  For instance  the capacity constraint for the transportation application  can be phrased as       The products sent along any given connection may not exceed the given  capacity        This constraint helps identify two main concepts in the application  The first is the  connection between two cities  which can be 
154. n at most two wooden components   Wood requires plastic    Glass excludes copper     ON Ooo  BO NS    Copper excludes plastic   Decomposition and column generation    To solve this problem  the technique used is known as column generation   Basically  the problem is a linear set covering problem where each decision variable  corresponds to a possible configuration  An auxiliary problem is to generate all the  possible configurations  Constraint programming is used to solve this configuration  generation problem  as most of the compatibility constraints are logical constraints  for which the CP Optimizer engine offers good support     The models  Presents the four different model files used in the vellino example     In the distributed project  you can see that there are four different model files  described in the following sections     e The model for common definitions  vel  inocommon mod contains the declaration  of data common to all other models     e The generation model  vellinogenBin mod is the model to generate the possible  configurations for bins  This is a CP model     e The selection model  vellinochooseBin mod selects a subset of configurations   This is a CPLEX model     Chapter 2  The application areas 63    e The flow control script  vellino mod is only a flow control script that executes  the two other models in the right order and transfers information from one to  the other     e Selection of the bins to use  passing the generated bins to the selection mod
155. neWarehouse   sum  w in Warehouses    Supply s   w     1     states that a store must be supplied by exactly one warehouse     The constraints  forall  w in Warehouses  s in Stores    ctUseOpenWarehouses   Supply s  w   lt   Open w    forall  w in Warehouses    ctMaxUseOfWarehouse   sum  s in Stores    Supply s  w   lt   Capacity w       express the capacity constraints for the warehouses and make sure that a  warehouse supplies a store only if the warehouse is open     A solution to warehouse mod    For the instance data depicted in the table Table 3 on page 35  OPL returns the  following optimal solution     Final Solution with objective 383 0000   open    1 1 1 0 1      supply     0 000 1    01000    00001    10000    00001    01000    01000    00100    01000    0 0 1 0 0          Applications of linear and integer programming    Studies the application of OPL to linear programming  integer programming   mixed integer linear programming  and piecewise linear programming     Linear programming    Defines linear programming and describes a simple production planning problem   a multiperiod production planning problem  a blending problem  and sensitivity  analysis     What is linear programming   Linear programming  LP  consists in optimizing a linear function subject to linear  constraints over real variables     In LP  the model of a problem is expressed through numeric variables combined in    linear constraints and governed by a linear objective function and by bounds on 
156. nterval corresponding to each course     forall r in InstanceSet   End r     r Duration   Start r      2  Ensure that each resource is not used more that once at any moment  they are  unary resources     One way to do so consists in defining an array of variables that model the  demand at any moment  like this     Chapter 2  The application areas 71    dvar demand t in Time  in 0  1     demand t in Time    sum i in Instance   t  gt   start i   amp  amp  t  lt  end i      However  it makes sense to create fewer variables  what we need is the points  in time when the courses start and  therefore  need the resources  or  in other  words  the demand on resources when each activity  course  starts  This is why   in the distributed time tabling example  the choice was made not to model each  possible point of time with a variable  Each course start time is considered as a  point in time at which the resource usage uniqueness must be preserved     3  Ensure that a teacher works with one class only at a time     When he is teaching  there is no other teaching demand for him at the same  time   forall r in InstanceSet  x in Teacher     if r discipline in PossibleTeacherDiscipline x      sum o in InstanceSet    r discipline in PossibleTeacherDiscipline x      Start o   gt   Start r      Start o   lt  End r      teacher o     ord Teacher x     lt  2      4  Ensure that a room is occupied by one class only  with similar constraints   forall r in InstanceSet  x in Room     if PossibleRoom
157. nts the model and data files  and a solution to the problem     Consider how to upgrade the production planning problem presented in    Tuples     on page 15 to include a fixed charge for the products  The example below  prodmilp mod describes the new model and prodmilp dat describes the instance  data     Chapter 2  The application areas 55    A fixed charge production model  prodmi1p mod      string  Products      3   string  Resources      3   string  Machines      3    float MaxProduction           tuple typeProductData    float demand   float incost   float outcost   float use Resources    string machine         typeProductData Product Products       3  float Capacity Resources       3   float RentCost Machines       3    dvar boolean Rent Machines    dvar float  Inside Products     dvar float  Outside Products      minimize  sum  p in Products      Product p  incost   Inside p     Product p  outcost   Outside p       sum  m in Machines    RentCost m    Rent m      subject to    forall  r in Resources    ctCapacity   sum  p in Products    Product p  use r    Inside p   lt   Capacity r      forall  p in Products    ctDemand   Inside p    Outside p   gt   Product  p   demand     forall  p in Products    ctMaxProd   Inside p   lt   MaxProduction   Rent Product p   machine            Data for the fixed charge production model  prodmi1p dat     Products      kluski   capellini   fettucine      Resources      flour   eggs       Machines     ml m2 m3      RentCost     20 10 5  
158. o  you will reuse the two functions described in     Calling Java    on page 128 to call Java functions  as shown in the following code  extract     1100p1ImportJava    classes          Create a new model using this model definition and cplex   var opl   new I100p1Model  thisOp1Model  modelDefinition cplex    op  addDataSource new I1o00p1DataSource  externaldataread dat           Create the custom data source   var customDataSource   I100p1CallJava  externaldataread ExternalDataRead      lt init gt      Lilog op  I100p Model  V   opl         Pass it to the model  notice that you can do this from a script because the custom data sour     was converted to a script data source upon return of the Java call    op  addDataSource customDataSource       Now the custom data source is attached to the OPL model  When the model is  generated  using the generate method  the data will be filled from that custom data  source  In this example  you can see this effect in the way element a is given a  value  This element is defined as     int a   suss    and filled from the custom data source by means of the customRead method   public void customRead         I1lo0p1DataHandler handler   getDataHandler       Chapter 4  Advanced features 131    handler startElement   a     handler addIntItem 1    handler endElement           Using IBM ILOG Script in data files    Discusses the use of script statements in data files as a way to load data   Another custom way to load data is to use script statemen
159. ocessing     Integer solution    The model presented in this tutorial only solves the relaxed problem  which is  obviously not realistic  Even if this does not ensure an optimal solution  the usual  technique consists in solving the integer version of the problem when all the new  patterns are generated  This is done in another version of the model   cutstock_int_main mod     In that version  the final solution is output as follows     masterOp    new Ilo0p1Model  masterDef  masterCplex     masterOp1 addDataSource masterData     master0p  generate       Executing postprocessing    When a model is used from flow control  the postprocessing part is only executed  on demand     In this cutting stock example  the following postprocessing elements are defined   e a structure to keep a pattern along with a float value     e a computed set to be filled with the patterns that are used in the solution and  their values     e and a script to print out this set     Here are the corresponding code lines     tuple r    pattern p   float cut     Chapter 3  IBM ILOG Script for OPL 111    i   r  Result     lt p Cut p  gt    p in Patterns   Cut p   gt  le 3      This postprocessing part is not executed by default  This is useful because there are  frequent situations where you won   t want the postprocessing instructions to be  executed  This is the case here  in the cutting stock example  because of the  intermediate iterations     When you do want to execute postprocessing  call   masterOp1
160. odel has several novel features  It represents items and resources not by  string sets but rather by integers  In other words  the items  respectively the  resources  are represented by successive integers starting at 1  The instructions  int NbItems          int NbResources      3   range Items   1  NbItems    range Resources   1  NbResources     declare the number of items and the number of resources  as well as two ranges   Items and Resources  to represent the set of items and the set of resources     The next three instructions    int Capacity Resources       3  int Value Items       3  int Use Resources   Items            are similar to the data declarations presented in    Data declarations    on page 12  and the subsequent sections  The array capacity represents the capacity of the  resources  the array value the value of each item  and use r   i  the use of  resource r by item i     The next instruction    int MaxValue   max r in Resources  Capacity r      is more interesting  It declares an integer maxValue whose value is given by an  expression  OPL and IBM ILOG Script have many features for computing and   preprocessing data  since this is fundamental in simplifying and improving the  efficiency of many models     The instruction  dvar int Take Items  in 0  MaxValue     declares the problem variables  take Items  represents the number of times item i  is selected in the solution  The variable is of type integer and is restricted to range  in 0  maxValue     The re
161. odified  data elements     sub0pl   new I100p1Model  subDef  subCplex     sub0p1  addDataSource subData       3  Generate the optimization model   sub0p  generate       Solving the submodel  Provides the syntax     1  Write the writeln statement     if   subCplex solve    amp  amp   subCplex getObjValue    lt    RC_EPS     writeln     writeln  SUB OBJECTIVE    subCplex getObjValue        else    writeln  No new good pattern  stop      subData end     sub0p1 end     break        2  Check the objective     if  subCplex getObjValue    gt   RC_EPS     break          If the objective is not favorable  you stop the process  Remember that the objective  represents the reduced cost of the new candidate pattern     Updating the master model  Provides the syntax     If a solution has been found in the submodel  then a new pattern can be added to  the master model  That pattern is represented by the values of the Use variable  arrays in the submodel  In the master model  the patterns are represented by the  Patterns tuple set  Therefore  you need to move the solution values of the Use  variables from the submodel to a new tuple in the Patterns tuple set form the  master model     1  Modify the data elements obtained from the current master model   var masterData   thisOpIModel dataElements     2  Simply add a new tuple in the Patterns tuple set using the array of values Use  from the submodel     masterData Patterns add masterData Patterns size 1 sub0p  Use solutionValue       Preparing
162. on page 133  The IDE connects to the  JVM created and appears    3  Run your model in CPLEX Studio IDE    The Java Debugger remains connected to the CPLEX Studio IDE until it is  closed  so that you can run your project several times     Chapter 4  Advanced features 135    136 OPL Language User   s Manual       Chapter 5  Performance and memory usage    You can improve the modeling and the solving time of your models  and the  ability to find satisfactory solutions to a problem expressed in a model     Performance tips    Contains a checklist of modeling best practices     Here is a check list for quick reference     Use the profiler to detect execute blocks that run for a long time during the  preprocessing phase  See Profiling the execution of a model in IDE Tutorials    If you observe that the execution of a model is slow because the main scripting  block loads many engine instances or submodels  you can improve this by  turning off the OPL Language option Update charts and statistics in main  See  OPL language options in IDE Reference    In pre  or postprocessing script statements  do not initialize array elements to  zero  OPL does that for you  See the note in    Initializing arrays    on page 88 in  the Language User s Manual    To initialize arrays  prefer generic index arrays rather than an execute  INITIALIZE block  See As generic indexed arrays in the Language Reference  Manual    Avoid dummy formal parameters for tuple components  See Formal parameters  in the Lan
163. oration 1987  2011   US Government Users Restricted Rights     Use  duplication or disclosure restricted by GSA ADP Schedule Contract  with IBM Corp        Contents  Figures     ak dom ee a ee eV  Tables    1 ww ew we ee ee ee VEF    Language User   s Manual            ix    Chapter 1  Introduction to OPL  1  Language overview   a    Modeling languages   1  Mathematical programming z2  Constraint programming MEE   Constraint programming versus mathematical  programming   Bm Bd Bok  we  amp  Eo 25  Scripting      Ls 4 ad ee ee a a a  A short tour of OPL  Eo ue i P a   Linear programming  a production planning  example      en  Integer programming  the knapsack problem    19  Mixed integer linear programming  a blending  problemi            21  Constraint programming  an inventory matching  problem    c soe a e   Ga oa 2 of 2 5 24  Modeling tips  Jcs   4 i  2 2   a   2    27  Efficient models                         27  Sparsity    c 6 6 4 4   4 a 24   h   27  About arrays    ge ee a Re Re wk e te oe BLL  Other modeling tips be on  Be Be ee ae ee    Chapter 2  The application areas       33    Some examples          38  Linear programming  a product mix ix problem      33  Integer programming  a warehouse location  problem          35   Applications of linear md integer programming     37  Linear programming  gt      s v    c e     37  Integer programming                    47  Mixed integer linear programming           55  Piecewise linear programming               57   Applic
164. orithm written in Java from an OPL main column generation script  This is an  extension of the distributed example cutstock_main  which uses CPLEX to solve  the subproblem consisting of a simple knapsack constraint  For this type of  constraint  powerful specific algorithms  with a polynomial complexity  are  provided  The same kind of mechanism could be used to solve shortest path  problems  flow in graph problems  or any other subproblem in which dedicated  efficient algorithms can be implemented in Java     Where to find the files    Reminds you of where code sample files are located   These files are at the following location      lt Install_dir gt  op  examples op _interfaces java javaknapsack    126 OPL Language User   s Manual    where  lt Instal1_dir gt  is your installation directory     Procedure summary  Lists the main steps of the knapsack algorithm tutorial     Before you begin    The tutorial assumes that you can write and compile Java code and that you know  how to work with projects in the IDE  If this is not the case  read Getting Started  with the IDE first     Procedure    To use the external knapsack algorithm    1  Write the Java code    2  Use the Java code from OPL    3  Use IBM ILOG Script classes to make clean and reusable code     Writing the Java code  Lists the public methods of the Java knapsack algorithm you can use     The Java algorithm can be found in     lt Install_dir gt  op  examples op _interfaces java javaknapsack src   javaknapsack Knaps
165. overing problem 48  vellino 63  setBasisStatus method  IloOplCplexBasis class 114  setCoef method  IloConstraint class 105  IloCplex class 105  IloObjective class 105  settings files 108  setVectors method  IloOplCplexVectors class 114  shortest path algorithm 125  SOCP  Second Order Cone Programming   problems 5  solution access in postprocessing 122  solution status values 89  solutions  blending mod 23  covering mod 49  displaying 18  knapsack mod 21  mulprod mod 40  oilmod 43  passing an initial solution to  CPLEX 113  postprocessing in time tabling  example 75  prodmilp mod 57  production mod 16  38  sailco mod 58  volsay mod 11  warehouse mod 37  52  solve  method of the Java knapsack  algorithm 127  solving engine  specifying 25  sparsity 27  43  specialized constraints  in inventory matching problem 25  start property 80  steelmill production example 24  submodel 106  107    T    thisOplModel variable 99  109  time limit 89  time tabling problem  tutorial 70  timetabling production example 70  tips for scripting 95  transportation problem 27  sparsity 43  tuples  as defined in OPL 15  no tuple syntax in script  statements 97  tuples of expressions  displaying  solutions 18  tuples of parameters  filtering 27  replaced by formal parameter  expression 32  tutorials  column generation 106  cutting stock 107  external functions 125  multiple models 98    U    unconvertAllIntVars method  IloOplModel class 54  universal quantifier 12  Unix  environment variables for externa
166. ow shows the two parts of the model for the blending  problem     A blending problem  part    blending mod     int NbMetals         int NbRaw         int NbScrap      3   int NbIngo       3    range Metals   1  NbMetals   range Raws   1  NbRaw   range Scraps   1  NbScrap     range Ingos   1  NbIngo     Chapter 1  Introduction to OPL 21    float CostMetal Metals           float CostRaw Raws       3   float CostScrap Scraps           float CostIngo Ingos           float Low Metals       3   float Up Metals       3   float PercRaw Metals   Raws          float PercScrap Metals  Scraps       3  float PercIngo Metals  Ingos            int Alloy      3    A blending problem  part II  blending mod     dvar floatt  p Metals     dvar floatt  r Raws     dvar float  s Scraps      dvar int  i Ingos     dvar float m j in Metals  in Low j    Alloy    Up j    Alloy     minimize  sum j in Metals  CostMetal j    p j     sum j in Raws  CostRaw j    r j     sum j in Scraps  CostScrap j    s j     sum j in Ingos  CostIngo j   gt    ilj      subject to    forall  j in Metals    ctl   m j     pli     sum  k in Raws    PercRaw j  k    r k     sum  k in Scraps   PercScrap j  k    s k     sum  k in Ingos   PercIngo j  k     i k    ct2   sum  j in Metals   m j     Alloy        Elements of the blending model  Presents the data file  decision variables and constraints     Problem data  The model is described in terms of a number of constants  specifying the various types of metals  raw materials  scrap  
167. pdate the submodel  prepare the data of the submodel to take into account  the result of the master model  and prepare the new subproblem and  regenerate its optimization model     4  Solve the submodel     e If no solution with a satisfactory reduced cost is found  the process is  finished     e If a new solution exists  the process continues     5  Update the master model  add the current solution of the submodel to the data  of the master model     6  Prepare the new master model and regenerating its optimization model and go  back to step 2     Detailed steps    Goes into more detail on each step of the procedure summary     Preparing the submodel  Either by using run configuration and project instances  or by using model and  data file instances     There are two ways of initializing all that is necessary for the submodel   e Using run configuration and project instances  e Using model and data file instances    Using run configuration and project instances  The quickest way of instantiating  the model consists in using the class 1100p1Project  An alternative method  not  used in the example is presented afterwards  using I100p RunConfi guration     IloOplProject    The class IloOplProject allows you to create an IloOplModel instance  This allows  you to handle settings files   ops  easily     These two classes are fully documented in the IBM ILOG Script Reference Manual     The I1l100plDataElements is created from scratch and initialized with data from the  master model
168. ple  The main novelty is the explicit representation of  connections and the fact that a route is now simply the association of a connection  and a product  Connections are also computed automatically from routes  The rest  of the model is generally similar but reflects the new data organization  The most  interesting change is the capacity constraint  which becomes    forall c in connections   sum  lt c p gt  in Routes  trans  lt c p gt    lt   capacity     This constraint is much more efficient than in the previous model presented in     Exploiting sparsity   a first attempt    on page 28  First  it iterates over the routes   not over all pairs of cities  Second  the aggregate operator sum uses parameter c to  index the set Routes  retrieving the relevant products effectively     A sparse transportation model  second attempt  transp3 mod      string  Cities         string  Products      3  float Capacity           tuple connection   string 0  string d     tuple route     string p    connection e         route  Routes          connection  Connections     c    lt p c gt  in Routes     tuple supply    string p   string 0       supply  Supplies      lt p c o gt     lt p c gt  in Routes     float Supply Supplies          tuple customer    string p   string d       customer  Customers      lt p c d gt     lt p c gt  in Routes     float Demand Customers       3  float Cost Routes           string  Orig p in Products      c o    lt p c gt  in Routes       30 OPL Language User   s M
169. pressing that a warehouse can supply a store  only when it is open  These constraints can be expressed by inequalities of the  form  forall  w in Warehouses  s in Stores    ctUseOpenWarehouses   Supply s   w   lt   Open w     forall  w in Warehouses    ctMaxUseOfWarehouse   sum  s in Stores    Supply s   w   lt   Capacity w      which ensures that when warehouse w is not open  it does not supply store s  This  follows from the fact that open w     0 implies supply w  s     0     As an alternative  you can write   forall c in Connections   ctCapacity   sum   lt p c gt  in Routes    Trans  lt p c gt    lt   Capacity     This formulation implies that a closed warehouse has no capacity      A warehouse location model  warehouse mod     on page 51 describes an integer    program for the warehouse location problem  and    Data for the  warehouse location model  warehouse dat     on page 51 depicts some instance data     50 OPL Language User   s Manual    A warehouse location model  warehouse mod     int Fixed      3    string  Warehouses      3   int NbStores      3   range Stores   0  NbStores 1    int Capacity Warehouses       3   int SupplyCost Stores   Warehouses          dvar boolean Open Warehouses      dvar boolean Supply Stores   Warehouses       minimize  sum  w in Warehouses    Fixed   Open w     sum  w in Warehouses   s in Stores    SupplyCost s  w    Supply s   w      subject to   forall  s in Stores    ctEachStoreHasOneWarehouse   sum  w in Warehouses    Supply s  w   
170. production example 67   classes  IloCp 93  IloCplex 89  IloCustomOp DataSource   subclassing 131  IloOplConflictIterator 112  114  115  IloOplCplexBasis 103  112  IloOplCplexVectors 112  113  IloOplModel 88  109  IloOplOutputFile 103  IloOplProject 108  IloOplRelaxationlterator 114  116  TloOplRunConfiguration 108  IloOplSettings 94   code samples  basic flow control script 105  blending dat 22  blending mod 21  convert_example mod 54  covering dat 48  covering mod 48  fixed dat 52  fixed mod 52  for model decomposition 109       Copyright IBM Corp  1987  2011    code samples  continued   gas dat 12  13  gas mod 13  gasl mod 12  gasn dat 14  knapsack dat 19  knapsack mod 19  mulprod dat 39  mulprod mod 39  oildat 41  oilmod 41  prodmilp dat 55  prodmilp mod 55  product dat 16  33  product mod 16  33  production 89  production dat 15  38  production mod 15  38  productn dat 18  reusing data source publishers 101  sailco dat 57  sailco mod 57  sailcopw mod 58  sailcopwg mod 60  sailcopwgl dat 60  sailcopwg2 dat 60  sailcopwg3 dat 60  steelmill 24  transpl mod 27  transp2 mod 29  transp3 mod 30  43  transp4 mod 88  89  volsay mod 10  using arrays 11  warehouse dat 49  warehouse mod 35  49  coefficient of variable  in CPLEX constraint or objective   changing using IBM ILOG  Script 105  column generation 106  step by step process 107  vellino problem 63  compatibility constraints in CP 7  Compile bat script 127  concave piecewise linear functions 61  conflicts  control by means of
171. programming where variables  are required to take integer values     2 OPL Language User   s Manual      es xi EN  minimize Jj  CjTj  subject to  y  agapak  1 Siami    jat  PA  l lt j  lt n   x  integer  L  lt 5 So      Unfortunately  these integrality constraints make the problem NP complete  Integer  programming has been investigated extensively in the past decades and good  solvers are now available for various classes of integer programs  However  many  integer programs remain challenging from a computational standpoint     Nonlinear programming  Defines nonlinear programming     Nonlinear programming is another generalization of linear programming that  amounts to minimizing a nonlinear function subject to nonlinear constraints     In other words    minimize g xl     xn    subject to fl xl     xn  2 0      fim  x1     xn    0    where g  f 1      fm are real functions of n variables  Nonlinear programs are  generally very challenging from a computational standpoint  local methods are  often used to solve them  sacrificing optimality for speed of execution  Note also  that integer programs can be recast as nonlinear programs     Constraint programming    Explains what leads to the development of constraint programming and briefly  presents OPL CP Optimizer     Why constraint programming   Describes the evolution of constraint programming     Constraint programming is a native satisfiability technology that takes its roots in  computer science   logic programming  graph th
172. pse between  the start of a and the end of b  It imposes the inequality startTime a    delay  lt    endTime b     e startBeforeStart a  b  delay  constrains at least the given delay to elapse between  the start of act1 and the start of act2  It imposes the inequality startTime a     delay  lt   startTime b     e startAtEnd a  b  delay  constrains the given delay to separate the start of a and  the end of b  It imposes the equality startTime a    delay    endTime b      e startAtStart a  b  delay  constrains the given delay to separate the start of a and  the start of b  It imposes the equality startTime a    delay    startTime b      If either interval a or b is not present in the solution  the constraint is automatically  satisfied  and it is as if the constraint was never imposed     Step 4  Add the precedence constraints    Add the following code after the comment   Add the precedence constraints     endBeforeStart  masonry  carpentry    endBeforeStart masonry  plumbing    endBeforeStart masonry  ceiling    endBeforeStart  carpentry  roofing    endBeforeStart ceiling  painting    endBeforeStart roofing  windows    endBeforeStart roofing  facade    endBeforeStart plumbing  facade    endBeforeStart roofing  garden    endBeforeStart plumbing  garden      Chapter 2  The application areas 79    endBeforeStart  windows  moving    endBeforeStart  facade  moving    endBeforeStart  garden  moving    endBeforeStart painting  moving      To model the cost for starting a task earlier 
173. pt  Preprocessing  Read  Tune  B  Simplex  General  Limits  Tolerances  B E Mixed Integer Programming  General  Strategy  Limits  Tolerances  Cuts  Solution pool  B E Barrier  General  Limits       Balance optimality and feasibility                                  Figure 2  The Memory Emphasis parameter in the IDE    Note     Changing this parameter value can help in tight memory situations  However  be  aware that it may significantly increase the runtime requirements     Using oplrun    Explains how to reduce overhead by using oplrun in command line mode   If you are using the CPLEX Studio IDE  consider working with oplrun     The IDE is very rich and full featured  but does impose a small  non trivial  overhead in terms of memory usage  If you need only a small amount in memory  savings  and do not require the specific IDE features  consider switching to the  command line oplrun executable  It has somewhat lower memory requirements   the savings may help in some limited cases     See oplrun Command Line Interface     Changing to a 64 bit platform    If your model requires more than 2GB of memory    If you are using 32 bit OPL  consider moving to a 64 bit architecture    A 32 bit application typically has a maximum addressable space of 2GB or 4GB  In  practice  this provides a maximum heap size of around 80 90  of the addressable    space  If your OPL model runs out of heap space  further optimization will  terminate  regardless of the total amount of memory available on t
174. pt statements to set parameters that control  propagation and search and to define search phases     Setting CP parameters    How to set a parameter value by adding script statements to the model     116 OPL Language User   s Manual    The preferred way to set CP parameters is from the IDE settings editor  However   it is sometimes convenient to set a parameter value by adding script statements to    the model     The IBM ILOG Script syntax to change a CP parameter is     cp param paramName    paramvalue     For example     cp param DefaultInferenceLevel    Low     or  from the model timetabling mod      var p   Cp param   p logPeriod   10000     p searchType    DepthFirst      p timeLimit   600     See Constraint programming options in Parameters and settings in OPL for a  detailed description of each parameter     Table 13  IBM ILOG Script CP parameters                                                                Parameter Possible Values Default Value   AllDiffInferenceLevel Default  Low  Basic  Medium    Default  Extended   AllMinDistanceInferenceLevel  Default  Low  Basic  Medium    Default  Extended   BranchLimit 2100000000   ChoicePointLimit 2100000000   ConstraintAgegregation On Off On   CountInferenceLevel Default  Low  Basic  Medium    Default  Extended   CumulFunctionInferenceLevel  Low  Basic  Medium  Basic  Extended   DefaultInferenceLevel Low  Basic  Medium  Basic  Extended   ElementInferenceLevel Default  Low  Basic  Medium    Default  Extended   FailLimit 21
175. r in Room  x in InstanceSet  n in x repetition  x repetition  p in Teacher  i in X id   X  td     t  gt   startOf courses x      amp  amp   t  lt  endOf courses x      amp  amp   x Class    c    amp  amp   roomRes x     ord Room r      amp  amp   ord Teacher p     teacherRes x     amp  amp   d    x discipline   bs  2  Write the postprocessing script which iterates over the solution derived course  set to pretty print  for each class  what will be the courses  the dedicated    teacher  and the assigned room     execute POST PROCESS    timetable   for var c in Class     writeln  Class    c    var day   0   for var t   0  t  lt  makespan  t       if t   DayDuration    0     day     writeln  Day    day       if t   DayDuration    HalfDayDuration   writeln  Lunch break     var activity   0   for var x in timetable t  c      activityt t   writeln  t   DayDuration  1    t    x room    t      Chapter 2  The application areas 75    x discipline    t     x id  wp   x repetition    t     x teacher    if activity    0     writeln  t   DayDuration  1    tFree time                Modeling and solving a simple problem  house building    Presents a simple problem of scheduling the tasks to build a house in such a  manner that minimizes an objective     In this section  you will learn how to    e use the dvar interval    e use the constraint endBeforeStart    e use the expressions startOf and endOf     You will learn how to model and solve a simple problem  a problem of scheduling  the tasks 
176. ratically constrained programming  MIQCP      OPL supports quadratic programming  QP   including quadratically constrained  programming  QCP   mixed integer quadratic programming  MIQP   and  mixed integer quadratically constrained programming  MIQCP      Conventionally  a quadratic program is formulated this way   Minimize 1 2 x Qx   c x   subject to Ax   b   with these bounds lb  lt  x  lt  ub    where the relation   may be any combination of equal to  less than or equal to   greater than or equal to  or range constraints  As in other problem formulations  1  indicates lower and u upper bounds  Q is a matrix of objective function  coefficients  That is  the elements Q jj are the coefficients of the quadratic terms  xj  2  and the elements Q ij and Q ji are summed to make the coefficient of the  term x i Xj     Here is an example of quadratic objective problem     A quadratic objective problem  qpex1 mod   dvar float x 0  2  in 0  40     maximize  x 0    2   x 1    3   x 2     0 5      33 x 0 42   22 x 1  2   11 x 2  2    12 x 0  x 1    23 x 1  x 2        subject to    ctl    x 0    x 1    x 2   lt   20   ct2  x 0    3   x 1    x 2   lt   30        Here is an example of quadratic constraint problem     Chapter 2  The application areas 81    A quadratic constraint problem  qcpex1 mod   dvar float x    2  in 0  40     maximize  x 0    2   x 1    3   x 2     0 5     33   x 0  2   22   x 1  2   11   x 2  2    12   x 0    x 1    23  x  1    x 2        subject to    ctl    x 0    
177. represented explicitly by a data type    tuple connection   string 0  string d       to manipulate connections as first class objects  The second fundamental concept is  the transportation of a product along a connection  called a route in this section   Once again  this concept can be represented explicitly by a data type  tuple route     string p    connection e          to manipulate routes directly  The supply and demand constraints exhibit two  other fundamental concepts  product suppliers  i e   the association of a product  and a city supplying it  and product consumers  i e   the association of a product  and a city consuming it   The data types   tuple Supply   string p  string o       tuple Customer   string p  string d        may be used to represent them     Once the concepts are identified  an appropriate data representation can be chosen  so that the model can generate constraints efficiently  Of course  the user data is  not necessarily expressed in this representation  but it is usually easy in OPL to  transform the user data into an appropriate representation     A good representation for this application consists of a set of connections  a set of  routes  the cost of the routes  and the demand and supply information  For  example      route  Routes          connection  Connections     c    lt p c gt  in Routes     tuple supply     string p    string 03     supply  Supplies      lt p c o gt     lt p c gt  in Routes     float Supply Supplies          tuple cus
178. rol memory consumption  See    Memory usage           Memory usage    Explains how OPL uses and allocates memory  and suggests actions to improve  memory usage  mostly for data structures  object termination  engine parameters   and oplrun     If your system runs out of memory  Indicates the various parts of IBM ILOG OPL that use memory     In IBM ILOG OPL  memory is used by several different modules   e by the CPLEX Studio IDE or the oplrun executable  e by the objects that each model declares    e by the optimization engine during the actual optimization process of an  individual model    e if you are using OPL Interfaces  by the application that invokes the OPL objects    If you are running out of memory  it is important to determine which parts are  using up the most memory  For instance  if memory is exhausted before the  underlying instance of the engine has started  then you should evaluate the  memory requirements of the earlier stages  System memory profilers  such as the  Windows Task Manager or the Unix command top  give a very rough gauge to  memory use but more accurate figures are provided by the IDE Profiler  see  Profiling the execution of a model in IDE Tutorials      There are several ways to avoid hitting the    out of memory    message  Basically   you need to lower the amount of memory used by the model  by reformulation   parameters  or smaller size   or raise the amount of memory available on the  system  by tuning or changing architectures      Note   
179. rom 0 to 1  by  increments of 1  N 1   That is     P   i  Po   y PeO N z5 1j  Calculating the tangency portfolio    The N optimal points resulting from the optimization problems stated above  and  noted  TVp TRp   are on the efficiency frontier     The tangency portfolio is of interest to the investor  Let RFR be the best risk free   investment asset known  This means that TV 0 for RFR  Point  0 RFR  can be   plotted on the diagram above  The tangency portfolio  TVt  TRt  is defined by the   intersection of the efficiency frontier with the tangent straight line including the  TR RFR    risk free point  This point has the best marginal gain ratio TV   0 of any  possible portfolio  TV TR  and will be chosen by our investor  It can be calculated  with precision N with our N points  TVp TRp     TRg RFR  We choose g in  1   N  such that TFg is maximal     All N optimization problems p are independent and thus can be treated in parallel     Chapter 5  Performance and memory usage 143         Portfolio mod  Portfolio dat  N    Create model           N parallel optimizations       2  AQ a aN   Optimize    gt  aiii Optimize   gt     gt   My     A  S iT  7   y  gt o S         Collect results    Calculate  Tangency point    Figure 3  How to calculate the tangency point    144 OPL Language User   s Manual    From the mathematical model to the OPL code    The tangency portfolio problem is expressed in OPL  Optimization Programming  Language      Converting the mathematical model above to 
180. rs that need to be updated would not be initialized in  the  mod  or ina  dat  but in a new instance of Op DataElements that you can  then add as a data source     float maxOfx         main      var data   new I1o0p DataSource  basicmodel dat     var opl   new I100p Model  def cplex      var data2   new I1o00p1DataElements     data2 max0fx 11    op  addDataSource  data     op  addDataSource data2      opl generate       j    Creating a new OPL model with the modified data  Explains how to generate a new model with the modified data     You can now     1  Reuse the model definition and use the modified data elements to create a new  OPL model     produce   new I100p1Model  def cplex    produce addDataSource  data      2  Generate the optimization model as before     102 OPL Language User   s Manual    Doing    produce generate       The cplex instance is filled with the new optimization model which corresponds to  the same model definition but uses the modified data elements     Note     The cplex instance that was also used for the original model does not contain the  original optimization model anymore     more with mulprod_main    Shows further work with the mulprod_main example  such as passing information  to another model  writing an output file  modifying the CPLEX matrix  incrementally     Passing information to another model  Using a basis you can pass information from one optimization model to another  and accelerate the search     About this task    The distributed 
181. rseq mod model in two ways   e Declare a search phase  e Use the pack constraint    Search phase    You can declare a search phase that  e Branches on the slot variables in sequence    e Allocates more complex cars first    The valueEval expression defines the cars that are hard to sequence  for the search  phases   The larger the value  the harder it is to sequence a car  For each car type   the measure is a combination of how difficult the option requirements are to  satisfy  and of the number of cars to build   int values i in 0  nbConfs    i   int valueEval i in 0  nbConfs    sum o in Options  option o max1 i 1      capacity o  u div capacity o  1   i  0     demand max1 i  1   nbConfs  i  0   div nbSlots    i  gt  0      The execute block defines the search phase     The selectSmallest function decides the type of car in the order of the sequence     Chapter 2  The application areas 69    The selectLargest function selects first the cars that are considered hard to  sequence   execute     var f   cp factory     var phasel f searchPhase slot     f selectSmallest f varIndex slot     f selectLargest f explicitValueEval values  valueEval  0        cp setSearchPhases phasel          The pack constraint    For more efficiency  you can also enhance the car sequencing model by modeling  the demandCt constraint as the specialized constraint pack  which expresses the  same constraint but propagates better     demandCt  pack demandV  slot  one      The time tabling example    Shows 
182. rt     e CP models have only discrete decision variables  integer or Boolean  while MP  models support both discrete and continuous decision variables     e CP models natively support logical constraints as well as a full range of  arithmetic expressions including modulo  integer division  or the element  expression which indexes an array of values by a decision variable  In contrast   MP models support only linear constraints  linearized logical constraints  or  quadratic convex constraints     e CP models have no limitation on the arithmetic constraints that can be set on  decision variables  while an MP engine is specific to a class of problems whose  solution space satisfies certain mathematical properties    See http   www 01 ibm com software integration  optimization  cplex   optimizer  for a list of problems supported by CPLEX    e Each optimization engine uses different techniques and algorithms to find  feasible solutions and optimize them     Chapter 1  Introduction to OPL    5    Table 1  Constraint programming vs  mathematical programming                   Feature MP CP  Relaxation Yes No  GAP measure Yes No  Optimality proof Yes Yes  Modeling limitations Quadratic problems are Discrete problems    limited to PSD  Positive Semi  Definite  problems and  Second Order Cone  Programming  SOCP              problems  Specialized constraints No Yes  Logical constraints Yes Yes  Theoretical grounds Algebra Graph theory and  algorithmic  Modeler support Yes Yes  Model and 
183. rtation problem exposed in the transp1 mod sample     The example below  transp3 mod  depicts the model of the transportation problem     known as a multicommodity flow problem on a bipartite graph  The instance data  is available in this file     Chapter 2  The application areas 43     lt Install_dir gt  op  examples op1 transp transp3 dat  which is too long to be shown here     A sparse multi product transportation model  transp3 mod      string  Cities         string  Products      3  float Capacity           tuple connection   string 0  string d     tuple route     string p    connection e         route  Routes          connection  Connections     c    lt p c gt  in Routes     tuple supply     string p    string 0       supply  Supplies      lt p c o gt     lt p c gt  in Routes     float Supply Supplies          tuple customer      string p   string d       customer  Customers      lt p c d gt     lt p c gt  in Routes     float Demand Customers       3  float Cost Routes                 lt p c gt  in Routes       string  Orig p in Products  Cug    c d    lt p c gt  in Routes       string  Dest p in Products      connection  CPs p in Products      c    lt p c gt  in Routes     assert forall p in Products   sum o in Orig p   Supply  lt p o gt      sum d in Dest p   Demand  lt p d gt       dvar float  Trans Routes      constraint ctSupply Products   Cities    constraint ctDemand Products   Cities      minimize  sum 1 in Routes   Cost 1    Trans 1    subject to    forall  p i
184. run Yes Yes                   Benefits of constraint programming   Constraint programming is a technology that solves time tabling problems and  sequencing problems  It can also be an alternative to mathematical programming  for allocation problems that have a slow convergence     Constraint programming has native support for    e    Nonlinear costs or constraints      e    Logical constraints and statements    on page 7   e    Constraints on and between interval variables    on page 7  e    Compatibility or incompatibility constraints    on page 7   e    More useful features    on page 8    Nonlinear costs or constraints  For example  a quadratic assignment problem can be modeled in CP as follows     A quadratic assignment problem  CP   using CP     int nbPerm      3  range r   1  nbPerm   int dist r   r  daw  int flow r  r           execute    cp param Workers   1   cp param timeLimit 30     dvar int perm 1  nbPerm  in r   dexpr int cost i in r  j in r    dist i  j  flow perm i    perm j       minimize sum i in r  j in r  cost i   ij    subject to      6 OPL Language User   s Manual    allDifferent  perm     s  Logical constraints and statements    For example  forall statements such as the following one are efficiently taken into  account by constraint programming     A forall statement in CP    forall s in 1  nbSlabs   colorCt  sum  c in 1  nbColors   or o in 1  nbOrders   colors o     c   where o     s    lt   2     Constraints on and between interval variables    CP sch
185. s     e The sum constraint  sum j in Metals  m j     alloy   makes sure that the various metals produced give the correct amount of alloy   The objective function in this model is rather simple  It consists of computing  the price of each source from its unit price  e g   costMetal  and the amount  produced  e g   p j       A solution to blending mod  For the instance data given in Instance data for the blending problem     blending dat   OPL returns the solution    Chapter 1  Introduction to OPL 23    Final Solution with objective 653 6100     p    0 0467 0 0000 0 0000       0 0000 0 0000    s    17 4167 30 3333    i    32    m    3 5500 24 8500 42 6000      Constraint programming  an inventory matching problem    Gives a short tour of constraint programming support in IBM ILOG OPL via an  inventory problem and its model elements  Does not contain an overview of more  basic modeling features such as arrays  data  aggregation  tuples  etc  For such  information  see Linear programming  a production planning example in this manual   For tutorials that introduce scheduling problems in OPL  see Getting Started with  Scheduling in CPLEX   Studio     The inventory problem  Describes the problem and gives the path to the files     The problem is to build steel coils from slabs that are available in a  work in progress inventory of semi finished products  The assumption is that there  is no limitation in the number of slabs that can be requested  but only a finite  number of slab si
186. s   Cities           float Demand Products   Cities           assert    forall p in Products   sum o in Cities  Supply p  o     sum d in Cities  Demand p   d     float Cost Products   Cities   Cities            dvar float  Trans Products   Cities   Cities      minimize  sum  p in Products   o   d in Cities    Cost p  o  d    Trans p  o   d      subject to    forall  p in Products   o in Cities    ctSupply   sum  d in Cities    Trans p   o   d     Supply p   0    forall  p in Products   d in Cities    ctDemand   sum  o in Cities    Trans p  o  d     Demand p   d    forall  o   d in Cities    ctCapacity   sum  p in Products    Trans  p   o   d   lt   Capacity        execute DISPLAY    writeln  trans     Trans           Table 2  A sparse data set for a transportation problem   lt  Godiva   Brussels   Paris  gt   lt  Godiva   Brussels   Bonn  gt   lt  Godiva   Amsterdam   London  gt    lt  Godiva   Amsterdam   Milan s  Godiva   Antwerpen   Madri amp  Ssodiva   Antwerpen    Bergen  gt     mor     lt  Neuhaus   Brussels   Milan  gt  lt  Neuhaus   Brussels   Bergen  Neuhaus   Amsterdam   Madrid  gt      un     lt  Neuhaus   Amsterdam   Cassis Neuhaus   Antwerpen   Paris lt  Neuhaus   Antwerpen   Bonn  gt      lt  Leonidas   Brussels   Bonn  gt   lt  Leonidas   Brussels   Milan  gt  lt  Leonidas   Amsterdam   Paris  gt    lt  Leonidas   Amsterdam   Cassis Leonidas   Antwerpen   Londoilleonidas   Antwerpen   Bergen  gt     The rest of this section explores how to exploit this sparsity
187. s  The decision variables specify how much of each source is  used in the alloy  the array p specifies the quantities of pure metals  array r  specifies the quantities of raw materials  array s specifies the quantities of scrap   array i specifies the number of ingots  All variables are of type float except  number of ingots  which are integers  The problem is thus a mixed integer linear  program  The instruction    dvar float m j in Metals  in low j    alloy    up j    alloy     is particularly interesting  since it shows how to specify the range of decision  variables in a generic fashion  More precisely  the range of variables m j  is given  by the expression     low j    alloy    up j    alloy    Note also that the model uses the variables in array m as intermediary variables to  represent the quantity of each metal produced     Constraints  There are two types of constraints in this problem   e The forall constraint    subject to    forall  j in Metals    ctl    m j       pli      sum  k in Raws   PercRaw j   k    r k     sum  k in Scraps   PercScrap j  k    s k     sum  k in Ingos   PercIngo j  k    i k      ct2   sum  j in Metals   m j     Alloy       makes sure that the right amounts of metal are produced  The amount m j  of  metal j must be equal to the amount of pure metal p j  added to the quantity  of metal j contained in the raw materials  the scrap  and the ingots  The correct  amount of metals are computed using the percentage of metals contained in the  source
188. s no  advantage to assigning unique preferences  but if you know something about your  model that suggests assigning an ordering to certain members  you can do so     Guidelines to your choice     e A preference of  1 means that the member is to be absolutely excluded from the  conflict     e A preference of 0  zero  means that the member is always to be included  and    e Preferences of positive value represent an ordering by which the conflict refiner  will give preference to the members  A group with a higher preference is more  likely to be included in the conflict  Preferences can thus help guide the  refinement process toward a more desirable minimal conflict     Procedure    To set user defined preferences   1  Define an array of preferences in the model  as shown in this code        Preferences are stated as data of the opl model      prefs i  will be used to represent the preference of seeing cts i  in the conflict   float prefs i in r    i     The value is smaller for higher values of i and the CPLEX conflict refinement  algorithm gives precedence to lower values     2  Pass these preferences to the iterator by attaching them to the array of affected  constraints as shown in this code        With user defined preferences   writeln  With user defined preferences      var opl2   new Ilo0plModel  def  cplex     op12 generate         We attach prefs  defined as data in the opl model  as preferences     for constraints cts for the conflict refinement   opl2 conflictItera
189. s to representing the problem data explicitly  In addition to the  products  the problem data obviously consists of the components  nitrogen   hydrogen  and chloride   the demand of each product for each component  the  profit of each product  and the stock available for each component  The example  below  gas dat  declares and initializes the data     Declaring and initializing data  gas  dat     Products      gas   chloride      Components      nitrogen   hydrogen   chlorine        Demand      1 3 0   1 4 1      Profit    30 40    Stock    50 180 40      The data element Components is a set of strings that defines the chemical  components necessary for the products  demand is a two dimensional array whose  element demand p   c  represents the demand of product p for component c  and  profit and stock are two arrays representing the profit of each product and the  stock available for each component  The rest of the statement can be obtained  easily by replacing the numbers by the relevant data items  For instance  the  objective function is simply written as   maximize    sum  p in Products    Profit p    Production p      Aggregate operators and quantifiers  It should be clear  however  that the  statement above contains much redundancy  All constraints  and all arithmetic  terms in these constraints and in the objective function  are similar  they differ only  in their indices     OPL has two features to factorize these commonalities  aggregate operators and  quantifiers  
190. s with each other     It works as follows     1  It solves the generation model as many times as necessary to find all the  possible solutions  This is easily done because the CP Optimizer engine can  iterate on the feasible solutions     2  For each solution  a new Bin is created and added to the current list     3  The selection model is created and it uses the set of Bins just generated as  input data     Generation of all the configurations    Generating all the possible configurations consists in   1  creating an instance of the vellinogenBin mod model using the common data  2  using the following methods of thelloCP class to iterate on the feasible  solutions   e startNewSearch  e next  e endSearch    At each solution  a new tuple is added to Bins from the current solution  You need  to call the method postProcess on the generation model to be able to use  postprocessing elements     var genBin   new I1o0p RunConfiguration  vellinogenBin mod      genBin op1Model  addDataSource  data    genBin op1Model  generate     genBin cp startNewSearch      while  genBin cp next       genBin op Model postProcess       Chapter 2  The application areas 65    data Bins add genBin op Model  newld   genBin op Model  colorStringValue   genBin opIModel n solutionValue          genBin cp endSearch     genBin end       Selection of the bins to use  As the generated bin configurations have been  added to the Bins data element  you can pass this data element object to the  selection model    v
191. see    Importing Java classes    above      Translation of parameters and results    Both the parameters and the results of the call are translated from IBM ILOG Script  to Java  and conversely  as needed     The rules are the following   e Simple data types  numbers  strings  Booleans  are translated back and forth     128 OPL Language User   s Manual      A Java method taking a string can be called with an IBM ILOG Script string     A Java method returning a string appears as returning an IBM ILOG Script  string   e Arrays are also translated back and forth between Java and IBM ILOG Script  arrays     e Some known types that have representations in both IBM ILOG Script and Java  are also translated back and forth  so that         A Java method taking an IloOplModel object can be called with an IBM ILOG  Script model such as thisOp1Model       A Java method returning a custom Java data source appears as returning an  IBM ILOG Script data source  which enables you to add it to the model using  regular script statements     e Unknown Java types  created by Java code  are represented as special JavaRef  objects in IBM ILOG Script so that you can call any methods on them and pass  them as parameters in subsequent calls       A Java method returning a Java object of class MyClass appears as returning a  special JavaRef object from IBM ILOG Script       You can call methods on that JavaRef object  syntax  myObject  myMethod     or  pass it as a parameter to other Java calls  which
192. setCoef method 105    IloCustomOplDataSource class  subclassing 131  IloNumVar class  lower and upper bounds 105  IloObjective class  setCoef method 105  IloOplConflictIterator class 112  114  115  IloOplCplexBasis class 103  112  getBasisStatus method 47  114  setBasisStatus method 114  IloOplCplexVectors class 112  113  getVectors method 114  setVectors method 114  IloOplModel class 88  109  convertAllIntVars method 54  dataElements method 100  end method 111  getting data elements from an  instance 100  postProcess method 96  unconvertAllIntVars method 54  IloOplOutputFile class 103  IloOplProject IBM ILOG Script class  creating a model instance 108  IloOplRelaxationIterator class 114  116  IloOplRunConfiguration IBM ILOG Script  class  creating a model instance 108  IloOplSettings class 94  incompatibility constraints  inCP 7  incrementality in scripting 104  index of arrays 11  indexers  order 31  infeasibility 60  infinity value for CPLEX 32  initial solution 113  initializing  arrays  modeling tips 31  data 14  integer decision variables  relaxation 54  integer programming 1  cutting stock 107  definition 3  47  described with an example 19  fixed charge problem 52  set covering 48  warehouse location 35  49  integer solutions 111  interval keyword 78  interval variable 78  end 79  length 78  optional 78  interval variable search phase 121  inventory  in production planning problem 57  matching problem 24  invoke  OPL keyword 132    J    Java  environment prerequisites
193. sing the  following instructions     1  a present returns a boolean describing whether or not interval a is present in the  solution     2  for a present interval  a start  a end and a size respectively return the start  end  and size value of interval a in the solution     An interval variable a in a solution can be displayed using writeln a   This  instruction displays a vector   lt  a present a start a end a size  gt      The value of a sequence variable p in a solution can be accessed using the  following instructions     122 OPL Language User   s Manual    1  p first   and p last   respectively return the interval variable that corresponds to  the first  resp  last  interval of the sequence  In case the sequence is empty the  returned value is null    2  p next a  and p prev a  respectively return the interval variable sequenced just  after a  resp  just before a  in the sequence  In case a is the last  resp  first  interval  in the sequence  the returned value is null    A sequence variable p in a solution can be displayed using writeln p   This  instruction displays the set of present interval variables in the sequence following  the total order specified by the sequence     In postprocessing  you can also access values of a cumulative function or a state  function in a solution with the following OPL functions     cumulFunctionValue  stateFunctionValue  segmentValue  numberOfSegments  segmentStart    segmentEnd    Chapter 3  IBM ILOG Script for OPL 123    124 OPL Lang
194. ssing instructions to prepare your data for modeling  transp4 mod  example  and postprocessing instructions to manipulate solutions  warehouse mod  example      General syntax  Discusses execute blocks     A block of statements for preprocessing or postprocessing is marked by the  keyword execute     execute  writeln  Hello World          Execute blocks can be named   execute HELLO  writeln  Hello World          CAUTION   No two execute blocks can have the same name within the same model     Any execute block placed before the objective or constraints declaration is part of  preprocessing  other blocks are part of postprocessing     The scripting context within an execute block corresponds to the model  declarations  You can think of the statements within an execute block being  embedded in an IBM ILOG Script block named with     with  thisOp Model   writeln  Hello World        where thisOp1IModel is the instance of IloOplModel representing the current OPL  model     Initializing arrays  The recommended method is to use a generic indexed array     In most cases  the recommended method for indexing a set of data within an array  is to use a generic indexed array  as shown in the example transp4 mod     Initializing data within a generic indexed array  transp4 mod   float Cost Routes       lt t p  lt t o t d gt  gt  t cost   t in TableRoutes       Alternatively  you can use IBM ILOG Script and write an execute block  as shown  in the following example     Initializing data with
195. st of the statement is rather standard and should raise no difficulty     Data  for the multi knapsack problem  knapsack dat     describes an instance of the  problem     Data for the multi knapsack problem  knapsack  dat     NbResources   73  NbItems   12   Capacity     18209  7692  1333  924  26638  61188  13360       Value     96  76  56  11  86  10  66  86  83  12  9  81      Use        19  1  10  1  1  14  152  11  1  Tye le Ls    0  A  535 0  0  80  0  4  5  0 0  0      4  660  35  0  30  0  3  0  4  90  0  O    L 7  0  18  6  770  330  7  0  QO  6  0  O      0  20  0  4  52  3  0  0  0  5  4  0      0  0  40  70  4  63  0  0  60  0  4  0l     0  32  0  0  0  5  0  3  0  660  0  9       20 OPL Language User   s Manual    Mixed    A solution to knapsack mod    For the instance of the problem specified in    Data for the multi knapsack problem   knapsack dat     on page 20  here are the final solution and the solutions that  satisfy all the constraints but are not the best with respect to the objective function     Feasible solution with objective 261890 0000   take    0 0 0 154 0 0 0 912 333 0 6505 1180      Feasible solution with objective 261922 0000   take    0 0 0 153 0 0 O 912 333 0 6499 1180      Final solution with objective 261922 0000   take    0 0 0 154 0 0 0 913 333 0 6499 1180      Although integer programs are  in general  substantially harder to solve than linear  programs  they have also been the topic of intensive investigation  OPL recognizes  when a sta
196. t     cp  factory 1localImpact      cp  factory  impactOfLastBranch      120 OPL Language User   s Manual    cp factory explicitVarEval dvar int    int     cp  factory varIndex dvar int      List of value choosers   selectSmallest  eval    selectLargest  eval    selectRandomValue     List of value evaluators   cp  factory value     cp  factory valueImpact     cp  factory valueSuccessRate    cp factory explicitValueEval int    int    double   cp  factory valueIndex int       For more information on choosers and evaluators  see  IDE and OPL  gt  OPL  Interfaces  gt  C   interface reference manual  gt  optim cpoptimizer  gt  Functions     Scheduling search phases  Describes the interval variable and sequence variable search phases available for  scheduling     Two types of search phases are available for scheduling  Search phases on interval  variables and search phases on sequence variables     Interval variable search phase   A search phase on interval variables works either on a unique interval variable or  on an array of interval variables  During this phase  CP Optimizer fixes the value  of the specified interval variable s   Each interval variable will be assigned a  presence status and for each present interval  a start and an end value  This search  phase fixes the start and end values of interval variables in an unidirectional  manner  starting to fix first the intervals that will be assigned a small start or end  value    The syntax    searchPhase a      searchPhase A 
197. t    forall  s in Stores    ctEachStoreHasOneWarehouse   sum  w in Warehouses    Supply s   w     1     states that a store must be supplied by exactly one warehouse     The constraint  forall  w in Warehouses  s in Stores    ctUseOpenWarehouses   Supply s  w   lt   Open w    forall  w in Warehouses    ctMaxUseOfWarehouse   sum  s in Stores    Supply s  w   lt   Capacity w      expresses the capacity constraints for the warehouses and makes sure that a  warehouse supplies a store only if the warehouse is open     A solution to warehouse mod    For the instance data shown in    Data for the warehouse location model   warehouse dat     on page 51  OPL returns the optimal solution   Optimal solution found with objective  383   open   1110 1    storesof    3   1 5 6 8   7 9      0 2 4      Fixed charge problems  Describes the problem and presents the model and data files     Fixed charge problems are another classic application of integer programs  see  Applications and Algorithms by W  Winston in the Bibliography   They resemble  some of the production problems seen previously but differ in two respects  the  production is an integer value  e g   a factory must produce bikes or toys   and the  factories need to rent  or acquire  some tools to produce some of the products   Consider the following problem  A company manufactures shirts  shorts  and  pants  Each product requires a number of hours of labor and a certain amount of  cloth  and the company has a limited capacity of bot
198. t  Boat Periods    dvar float  Inv Q  NbPeriods      minimize  sum t in Periods   piecewise  RegularCost   gt  Capacity   ExtraCost   Boat t     InventoryCost      sum t in Periods  Inv t       subject to    ctInventory   Inv 0     Inventory   forall t in Periods   ctDemand   Boat t    Inv t 1     Inv t    Demand t      The data description is similar in this model  What differs from the previous model  presented in    A simple inventory model  sailco mod     on page 57 is the choice of  variables  the objective function  and the constraints  There is only one type of  production variable in this model and hence there is no distinction between     regular    boats and    extra    boats  In this model  boat t  represents the total  production of boats during period t  Even more interesting is how the objective  function is described  it makes it explicit that the cost of building the boats is in  fact a piecewise linear function of the production    piecewise  RegularCost   gt  Capacity   ExtraCost   Boat t       OPL recognizes that this statement is in fact a linear program  applies a  transformation to obtain the same code as in    A simple inventory model   sailco mod     on page 57  and returns the same optimal solution     Piecewise linear vs  linear  Enforces a constraint that results in a mixed integer linear program     Note that not all piecewise linear programs are linear programs  Recall the Note  and assume that the cost of extra boats decreases to  350  for instan
199. t available for flow control is  close to that of OPL Interfaces in C    See Working with OPL interfaces in the  Interfaces User   s Manual for details     The IBM ILOG Script API available for solving is very limited compared to  IloCplex and IloCP in C     NET  or Java  See the Reference Manual of IBM ILOG  Script Extensions for OPL for a complete list of available properties and methods     In    Tutorial  Flow control and multiple searches    on page 98  you will work from  the mul prod_main example to learn how to solve several times the same model with  modified data     In    Tutorial  Flow control and column generation    on page 106  you will work  from the cutstock example to learn how to solve two different models one after  the other by using the output from the first one as data to the second one     See OPL language options in IDE Reference for performance aspects     A few tips    Comments on various characteristics of IBM ILOG Script for OPL of which you  should be aware when writing script statements     The OPL interpreter    The OPL interpreter performs the following tasks    e declarations  types  names for data and decision variables  e instantiation   e data sources  data given in files or other sources   e preprocessing  scripting blocks   e modeling  objective and constraints   e postprocessing    Chapter 3  IBM ILOG Script for OPL 95    Script variables    Script variables declared in one execute block are not visible in other execute  blocks     Proc
200. t of  lt discipline discipline  gt  tuples named NeedBreak     NeedBreak       lt  Maths   Physics  gt     lt  Biology   Physics  gt     lt  Economy    Biology  gt     lt  Geography    Economy  gt     lt  History    Geography  gt    j    5  Using this set  state exclusion constraints     forall ordered i  j in InstanceSet  a b in Discipline      lt b a gt  in NeedBreak     lt a b gt  in NeedBreak    amp  amp  i l  j   amp  amp  i Class    j Class   amp  amp    i discipline    a  amp  amp  j discipline    b      i discipline    b  amp  amp  j discipline    a        courses do not belong to the same day    Start i  div DayDuration      Start j  div DayDuration          courses do not belong to the same halfday    Start i  div HalfDayDuration      Start j  div HalfDayDuration          courses are separated by BreakDuration    Start i   gt  End j    Start i    End j       Start j   gt  End i    Start j    End i     gt   BreakDuration     6  Along the same line  make sure the same discipline is not taught more than  once a day     Chapter 2  The application areas 73    forall ordered i j in InstanceSet  i discipline    j discipline  amp  amp  i Class    j Class    Start i  div DayDuration      Start j  div DayDuration       7  State that a discipline  such as Sport  is preferably taught in the morning     forall d in MorningDiscipline  i in InstanceSet    i discipline    d    Start i    DayDuration   lt  HalfDayDuration     8  You can also add a symmetry breaking constraint which 
201. tart date or late end date     What are the decision variables or unknowns in this problem     e The unknowns are the date that each task will start  The cost is determined by  the assigned start dates     What are the constraints on these variables     e In this case  each constraint specifies that a particular task may not begin until  one or more given tasks have been completed     What is the objective     Chapter 2  The application areas 77    e The objective is to minimize the cost incurred through earliness and tardiness  costs     Model    After you have written a description of your problem  you can use OPL to model  and solve it     Step 2  Open the example file    e Still working with the scheduling tutorial project  open the sched_time mod file  in the IDE editing area     This file is an OPL model that is only partially completed  You will fill in the  blanks in each step in this lesson  At the end  you will have completed the OPL  model  IBM ILOG OPL gives you the means to represent the unknowns in this  problem  the interval in which each task will occur  as interval variables     Note   Interval variable  Tasks are represented by the decision variable type interval in OPL     An interval has a start  an end  a size and a length  An interval variable allows  these values to be variable in the model     The length of a present interval variable is equal to the difference between its end  time and its start time  The size is the actual amount of time the task tak
202. tatement expresses the same constraint without changing the set of solutions  to the problem  However  the formulations are different and can lead to different  running times and different amounts of memory used for the search tree  In other  words  given a logical English expression  there may be more than one logical  constraint for expressing it  and the different logical constraints may perform  differently in terms of computing time and memory     Logical constraints for CPLEX in the section Constraints of the Language Reference  Manual introduces overloaded logical operators that you can use to combine linear   or piecewise linear constraints in OPL  In this example  notice the logical operators       gt       that appear in these logical constraints     86 OPL Language User   s Manual       Chapter 3  IBM ILOG Script for OPL    After an introduction to scripting  provides tutorials for flow control and multiple  searches  flow control and column generation  and for changing default behaviors  in flow control        Introduction to scripting    Defines IBM ILOG Script as a scripting language and describes the situations in  which it is used  preprocessing  postprocessing  and flow control  Also provides  programming tips and warns you of pitfalls to avoid     What is IBM ILOG Script     Describes the scripting language for combining OPL models and interacting with  them     IBM ILOG Script is an implementation of JavaScript     The OPL language described so far covers t
203. ted with Scheduling in CPLEX Studio     The vellino example  column generation     Demonstrates how OPL not only supports constraint programming  but also  cooperative uses of mathematical and constraint programming     Description of the problem  Tells you what to do and where to find the files     What you are going to do    You will solve a configuration problem using a decomposition schema known as  column generation     You will use     62 OPL Language User   s Manual    e the CP Optimizer engine to solve the problem of generating new possible  configurations  and    e the CPLEX engine to solve the problem of selecting which is the best  combination of configurations     This configuration problem involves placing objects of different materials  glass   plastic  steel  wood  and copper  into bins of various types  red  blue  green    subject to capacity  each bin type has a maximum  and compatibility constraints   All objects must be placed into a bin and the total number of bins must be  minimized     Where to find the files   You will work with the vellino example at the following location    lt Install_dir gt  op1  examples op1 vellino   where  lt Instal1_dir gt  is your installation directory   Compatibility constraints    The compatibility constraints are the following    Red bins cannot contain plastic or steel    Blue bins cannot contain wood or plastic    Green bins cannot contain steel or glass    Red bins contain at most one wooden component   Green bins contai
204. tement is an integer programming model and uses CPLEX algorithms to  solve it     integer linear programming  a blending problem  Presents OPL and MILP and describes a blending problem     OPL and MILP    Discusses how OPL solves mixed integer linear programs   Mixed integer linear programs include both integer and real variables     OPL can also solve models that include both integer and real variables  generally  known as mixed integer linear programs  MILP   OPL approaches them in  essentially the same way as integer programs  A branch and bound algorithm can  exploit the linear relaxation except  of course  that branching takes place only on  integer variables     The blending problem    Describes the problem and presents the model     The following blending problem is taken from W  Winston   s book  see the  Bibliography   Consider the following application involving mixing some metals  into an alloy  The metal may come from several sources  in pure form or from raw  materials  scraps from previous mixes  or ingots  The alloy must contain a certain  amount of the various metals  as expressed by a production constraint specifying  lower and upper bounds for the quantity of each metal in the alloy  Each source  also has a cost and the problem consists of blending the sources into the alloy  while minimizing the cost and satisfying the production constraints  Similar  problems arise in other domains  e g   the oil  paint  and the food processing  industries  The example bel
205. than the preferred starting date  you  use the expression startOf that represents the start time of an interval variable as  an integer expression     For each task that has an earliest preferred start date  you determine how many  days before the preferred date it is scheduled to start using the expression startOf   this expression can be negative if the task starts after the preferred date  By taking  the maximum of this value and 0 using maxl  you determine how many days early  the task is scheduled to start  Weighting this value with the cost per day of starting  early  you determine the cost associated with the task     The cost for ending a task later than the preferred date is modeled in a similar  manner using the expression endOf  The earliness and lateness costs can be  summed to determine the total cost     Step 5  Add the objective    Add the following code after the comment   Add the objective     minimize 400   maxl endOf moving    100  0     200   max1 25   startOf masonry   0     300   max1 75   startOf carpentry   0     100   max1 75   startOf ceiling   0      Solve   Solving a problem consists of finding a value for each decision variable so that all  constraints are satisfied  You may not always know beforehand whether there is a  solution that satisfies all the constraints of the problem  In some cases  there may  be no solution  In other cases  there may be many solutions to a problem     Step 6  Execute and display the solution    After a solution has be
206. tomer    string p   string d       customer  Customers      lt p c d gt     lt p c gt  in Routes     float Demand Customers          float Cost Routes            Note that the connections  suppliers  and customers are derived automatically from    the routes  It is also useful to derive the following data to simplify the constraint  statement     Chapter 2  The application areas 45       lt p c gt  in Routes       string  Orig p in Products  c 0    c d    lt p c gt  in Routes       string  Dest p in Products      connection  CPs p in Products      c    lt p c gt  in Routes       The objective function and the constraints can now be stated naturally  The  objective function       minimize the transportation costs along all routes       is expressed elegantly as  minimize  sum 1 in Routes   Cost 1    Trans 1      The supply constraint  which can be phrased as       for every product and every city shipping the product  the summation of all  transportations from that city to a city where the product is in demand is equal to  the supply of the product at the supplying city       is formalized by    forall  p in Products   o in Orig p       ctSupply p   0     sum   lt o d gt  in CP p     Trans  lt  p  lt o d gt   gt      Supply  lt p o gt       The demand constraints are stated in a similar way  The capacity constraints are  stated elegantly as  forall c in Connections   ctCapacity   sum   lt p c gt  in Routes    Trans  lt p c gt    lt   Capacity     This statement is efficient  s
207. tor attach opl2 cts  opl2 prefs    writeln opl2 printConflict       opl2 end       Chapter 3  IBM ILOG Script for OPL 115    Results    The output is then     With user defined preferences  cts 10  at 9 0 10 17 E  op l conflictIterator mod  is in conflict     Conclusion  Concludes on setting preferences on the search for conflicts and relaxations     By attaching pairs of constraint arrays and preference arrays  you can control the  way in which the CPLEX solving engine refines the conflict returned by the  conflict iterator  You can apply the same mechanism to the CPLEX relaxation  algorithm by using the  loOp Relaxationlterator class        Searching for relaxation and conflicts    Explains how to write scripting statements to search for relaxation and conflicts in  a model     To search for relaxations and conflicts in an infeasible model  you can use the IDE  as explained in Relaxing infeasible models in IDE Tutorials but you can also use  the IBM ILOG Script methods printRelaxation and printConflict on the  IloOplModel instance  For example     dvar int x in 0  10     subject to       ctl  x lt  4   ct2  x gt  6        main    thisOp1Model generate     writeln thisOp Model printRelaxation      writeln thisOp Model printConflict            gives out    ctl at 11 7 12  relax   infinity 4  to   infinity 6  value is 6    ctl at 11 7 12  is in conflict    ct2 at 12 7 12  is in conflict        Using IBM ILOG Script in constraint programming    Explains how to use IBM ILOG Scri
208. ts in data files     It is possible to declare some script functions in a  dat file using a prepare    block  If you do so  at each initialization of an element  you can invoke one of  these functions using the invoke keyword     In the function  two properties are be defined   e name  the name of the element being initialized   e element  the element being initialized     You can then use these constructs along with some Java external functions to do  some custom reading of data  The example used in this tutorial reads in a file  called externaldatasource txt that uses a format where all the elements of a sets  are separated with commas        For this case  a simple parser has been written   SimpleTextReader  java   It has mainly two public methods     public SimpleTextReader  String fileName  String token   public void fillOplElement IloOplElement element  throws IOException    The parser is used as follows     prepare    function read element  name     var customDataSource    1100p1CallJava  externaldatasource SimpleTextReader      lt init gt      Ljava lang String Ljava lang String  V     C  1LOG OPL examples op1 externaldatasource txt          customDataSource  fill0p1Element  element    return true           strings     vall   invoke read   Results    Running the example  you can see that   e the OPL element a takes the value 1    e the string set strings contains not only val1 as defined in the  dat file  but also  two more values added from the text file     Debuggin
209. ts using an execute block     1  Add the following IBM ILOG Script execute block to the product mod file  see  The production planning problem revisited  product  mod      tuple R   float x  float y       R  Result      lt Inside p  Outside p  gt    p in Products     execute   writeln  Result   Result        You see the following output     Optimal solution found with objective  372  result    lt 40 0000 60 0000 gt   lt 0 0000 200 0000 gt   lt 0 0000 300 0000 gt      2  Run the product model with the productn dat data file shown in Named data  for the revised production planning problem  productn  dat      You can visualize the inside and outside productions of a product  simultaneously     Final Solution with objective 372 0000   inside    40 0000 0 0000 0 0000    outside    60 0000 200 0000 300 0000      Named data for the revised production planning problem  productn  dat     Products      kluski    capellini    fettucine      Resources      flour    eggs        Product       kluski      lt  demand  100  insideCost 0 6  outsideCost 0 8  consumption  0 5 0 2    gt     capellini      lt  demand 200  insideCost 0 8  outsideCost 0 9  consumption   0 4 0 4    gt     fettucine      lt  demand 300  insideCost 0 3  outsideCost 0 4  consumption   0 3 0 6    gt    I     Capacity     20  40     3  Add the following IBM ILOG Script postprocessing lines to the product  mod file    execute    for p in Products   writeln  inside   p    reducedCost      inside p  reducedCost            Yo
210. u can see both the inside production of a product and its reduced cost     18 OPL Language User   s Manual    Optimal solution found with objective  372  inside kluski  reducedCost   0  inside capellini   reducedCost  inside fettucine   reducedCost    06000000000000005      0     0 02000000000000002    Integer programming  the knapsack problem    Explains what integer programming is and describes the knapsack problem     What is integer programming   Integer programming expresses the optimization of a linear function subject to a  set of linear constraints over integer variables     The statements presented in    Linear programming  a production planning  example    on page 9 are all linear programming models  However  linear programs  with very large numbers of variables and constraints can be solved efficiently   Unfortunately  this is no longer true when the variables are required to take integer  values  Integer programming is the class of problems that can be expressed as the  optimization of a linear function subject to a set of linear constraints over integer  variables  It is in fact NP hard  More important  perhaps  is the fact that the integer  programs that can be solved to provable optimality in reasonable time are much  smaller in size than their linear programming counterparts  There are exceptions   of course  and this documentation describes several important classes of integer  programs that can be solved efficiently  but users of OPL should be warned that  d
211. uage User   s Manual       Chapter 4  Advanced features    A tutorial on external functions        Tutorial  External functions    Exposes the purpose and the context of external functions in OPL  and explains  how to use an external knapsack algorithm  how to use other data sources  and  how to debug custom Java code using Eclipse     Context of external functions  Specifies the purpose of external functions and the environment prerequisites     Limitations of the language  Explains how limitations of OPL lead to developing external functions     The purpose of external functions is to provide alternatives to some limitations of  OPL as a language     Note     1  For external Java function calls to work on AIX   platforms  you must set the  LIBPATH variable to point to the 1ibjava a and libjvm a libraries     2  Calling external functions is not possible if the application is statically linked  with the OPL libraries  like op  runsample   This is because the Java OPL library  uses the shared library version of OPL  op1xx d11  so  which cannot be mixed  with the static version  You can use an external call to Java in the CPLEX  Studio IDE  in oplrun  and in custom OPL or ODM Enterprise applications  launched from Java     The Optimization Programming Language  OPL  is a powerful language to write  optimization models  It offers powerful aggregate constructs and slicing filters to  describe complex problems in a compact form  Moreover  because it supports  JavaScript  OPL enab
212. uration under Remote Java Application     Give it the same name as your project and keep the default settings  socket  attach  localhost  port 8000      Starting the OPL model  Explains how to start the OPL model either with the command line or with the  IDE     With the command line executable  oplrun    Procedure    1  Define the environment variable     Set ODMS_JAVA_ARGS to  Xdebug    Xrunjdwp  transport dt_socket server y address 8000  This specifies that the  Java Virtual Machine launched by CPLEX Studio will be in debug mode and  will listen for debugger connections on port 8000 of the current machine     2  Start oplrun as usual     Chapter 4  Advanced features 133    oplrun exe    p   lt Install_dir gt   op1  examples  op1_interfaces  java  javaknapsack  cutstock_ext_main mod   lt Install_dir gt   op1  examples  opl_interfaces  java  javaknapsack  cutstock dat    The run does not start until a debugger connection is received  You see a  message such as      lt  lt  lt  setup  Listening for transport dt_socket at address  8000    With the CPLEX Studio IDE   Procedure    1  Start the IDE  or oplrun  as usual   2  With the command Run  gt  Run Configurations  open the Run Configurations       window   3  Select a run configuration and specify the debug parameters for the Virtual  Machine   Run Configurations xi  Create  manage  and run configurations  Specify and launch an OPL run configuration Q                G JF   Gis xl o  Name    cutstock Fixed number of patterns 
213. ve    The objective function of the car sequencing model is to compute a sequence of  cars that the cells can process while minimizing the number of empty cars to insert  to respect the load of the cells     minimize lastSlot   nbCars   The constraints    The mode defines four constraints written as forall statements    e to satisfy the demand    e to define the options that are used for each car in the sequence   e to define the length of the sequence    subject to       Cardinality of configurations  count slot  0     nbBlanks   forall  c in Confs   count slot  c     demand c         Capacity of gliding windows    68 OPL Language User   s Manual    forall o in Options  s in Slots   s   capacity o  u   1  lt   nbSlots   sum j in s    s   capacity o  u   1  all0ptions o  slot j    lt   capacity o  1        Last slot  forall  s in nbCars   1    nbSlots    s  gt  lastSlot    gt  slot s     0   bs    The data    The data for the car sequencing problem is initialized externally in the data file   carseq dat  below     Instance data for the car sequencing problem  carseq  dat   nbConfs   7    nbOptions   5    demand    5  5  10  10  10  10  5      option        1  0  0  0  1  1  0      0  0  1  1  0  1  0      1  0  0  0  1  0  0     1  1  0  1  0  0  Ols    0  0  1  0  0  0  0   1   capacity       lt 1 2 gt     lt 2 3 gt     lt 1 3 gt     lt 2 5 gt     lt 1 5 gt     K    Enhancing the model  Shows how to declare a search phase or use the pack constraint     You can enhance the ca
214. ventory cost associated with storing the additional  production  The example below  mulprod mod  depicts the new model and  mulprod dat describes the instance data     A multi period production planning problem  mul prod mod      string  Products      3   string  Resources      3  int NbPeriods     range Periods    1  NbPeriods     float Consumption Resources   Products       3  float Capacity Resources       3   float Denand  Products   Periods       i   float InsideCost Products    3   float OutsideCost Products       3   float Inventory Products       3   float InvCost Products            dvar float  Inside Products   Periods    dvar float  Outside Products   Periods    dvar float  Inv Products   0  NbPeriods       minimize  sum  p in Products  t in Periods     InsideCost p  Inside p   t     OutsideCost p  Outside p   t     InvCost p  Inv p   t       subject to    forall  r in Resources  t in Periods    ctCapacity   sum  p in Products    Consumption r  p    Inside p  t   lt   Capacity r    forall  p in Products   t in Periods    ctDemand   Inv p  t 1    Inside p  t    Outside p  t     Demand p  t    Inv p  t    forall  p in Products    ctInventory   Inv p   0     Inventory p          3  tuple plan     float inside    float outside    float inv      plan Plan p in Products  t in Periods     lt Inside p t  Outside p t   Inv p t  gt    execute DISPLAY     writeln  plan   Plan       Chapter 2  The application areas 39    Instance data for multi period production planning probl
215. x 1    x 2   lt   20   ct2  x 0    3    x 1    x 2   lt   30   ct3  x 0  2   x 1  2   x 2  2  lt   1 0        Quadratic programming is described in detail in the IBM ILOG CPLEX Optimizer  User s Manual     Refer to the sections    e Solving Problems with a Quadratic Objective  QP    e Solving Problems with Quadratic Constraints  QCP   e Solving Mixed Integer Programming Problems  MIP     for information on MIQP and MIQCP        Tutorial  Using CPLEX logical constraints    Demonstrates how to use logical constraints in an application     What are logical constraints     A CPLEX logical constraints is a particular kind of discrete or numerical constraint  that transforms parts of your problem automatically for you     See Logical constraints for CPLEX in the Constraints section of the Language Reference  Manual for more conceptual information  This tutorial explains how to use logical  constraints based on a blending problem     Description of the problem    Includes what to do and where to find the files     The problem is to plan the blending of five kinds of oil  organized in two  categories  two kinds of vegetable oils and three kinds of non vegetable oils  into  batches of blended products over six months     Some of the oil is already available in storage  There is an initial stock of oil of 500  tons of each raw type when planning begins  An equal stock should exist in  storage at the end of the plan  Up to 1000 tons of each type of raw oil can be  stored each month for 
216. xecute CPX_PARAM    cplex preind   0   cplex simdisplay   2          minimize  sum  p in Products     Product p  insideCost   Inside p     Product p  outsideCost   Qutside p      subject to    forall  r in Resources    ctInside   sum  p in Products    Product p  consumption r    Inside p   lt   Capacity r      16 OPL Language User   s Manual    forall  p in Products    ctDemand   Inside p    Outside p   gt   Product  p   demand        Data for the revised production planning problem  product  dat     Products      kluski    capellini    fettucine      Resources      flour    eggs      Product         kluski    lt  100  0 6  0 8    0 5  0 2    gt    capellini    lt  200  0 8  0 9    0 4  0 4   gt    fettucine    lt  300  0 3  0 4    0 3  0 6    gt          Capacity     20  40       The instruction    tuple productData    float demand   float insideCost   float outsideCost   float consumption Resources            declares a tuple type with four fields  The first three fields  of type float  are used  to represent the demand and costs of a product  the last field is an array  representing the resource consumptions of the product  These fields are intended to  hold all the data related to a given product     The instruction  ProductData product Products       3    declares an array of these tuples  one for each product  The initialization  Product         kluski    lt  100  0 6  0 8    0 5  0 2    gt    capellini    lt  200  0 8  0 9    0 4  0 4   gt    fettucine    lt  300  0 3 
217. ximize  TR  p 2  TV     When p 0  it means that the investor is not concerned about risk  when p 1  it  means that both objectives are equally important  The   coefficient is a  normalization factor  Beyond p 1  it means that minimizing the risk is more  important than maximizing the return on investment  In this problem  we are only  interested in p in  0 1      r represents the variance penalty    In modern portfolio theory  the set of all possible  TV TR  for a given investment  asset set I is called the    possible portfolio set     The upper edge of this region of  space  TV TR  is more interesting than any point below because it allows better    expected return on investment for a given risk TV  so any investor would want to  choose a point on this frontier     Efficient Frontier    Tangency Portfolio    xpected Re turn       g    F    risk free rate       Standard Deviation     The graph is from the article http    en wikipedia org wiki   Modern_portfolio_theory The_efficient_frontier      142 OPL Language User   s Manual    When we maximize TR pTV for a given p  under the constraints expressed by the  equations above  we indeed obtain a point on the efficient frontier  Note that TV is  a quadratic term  and TV is convex because COV is a semi positive  as defined by  a covariance matrix  all Xi are in  0 100    So quadratic programming addresses this  problem     Calculating the efficient frontier    In order to calculate N points on the efficient frontier  we vary p f
218. ze  sum  g in Gasolines   o in Oils     Gas g  price   O0il o  price   ProdCost    Blend o   g     sum g in Gasolines  a g    subject to    forall  g in Gasolines    ctDemand   sum  o in Oils    Blend o  g     Gas g  demand   10 a g    forall  o in Oils    ctCapacity   sum  g in Gasolines    Blend o   g   lt   0il o  capacity   ctMaxProd   sum  o in Oils   g in Gasolines    Blend o   g   lt   MaxProduction   forall  g in Gasolines    ctOctane   sum  o in Oils     Oil o  octane   Gas g  octane    Blend o  g   gt   0   forall  g in Gasolines    ctLead   sum  o in Oils     Oil o  lead   Gas g  lead     Blend o  g   lt   0        execute DISPLAY REDUCED_COSTS   for  var g in Gasolines      writeln  a   g    reducedCost     a g  reducedCost             Data for the oil blending planning problem  oi1 dat     Gasolines      Super    Regular    Diesel      Oils      Crudel    Crude2    Crude3        Gas      lt 3000  70  10  1 gt     lt 2000  60  8  2 gt     lt 1000  50  6  1 gt        Oil      lt 5000  45  12  0 5 gt     lt 5000  35  6  2 gt       lt 5000  25  8  3 gt       MaxProduction   14000   ProdCost   4     42 OPL Language User   s Manual    The model uses two sets of variables  Variable a Gasolines  represents the amount  spent in advertising gasoline g  Variable blend 0ils   Gasolines  represents the  number of barrels of crude oil 0 used to produced gasoline g  The demand  constraints  forall  g in Gasolines    ctDemand   sum  o in Oils    Blend o  g     Gas g  demand   10
219. zes is available  sizes 12  14  17  18  19  20  23  24  25  26  27  28   29  30  32  35  39  42  43  44      The problem is to select a number of slabs to build  the coil orders  and to satisfy the following constraints     e Each coil order requires a specific process to be built from a slab  This process is  encoded by a color     e A coil order can be built from only one slab     e Several coil orders can be built from the same slab  But a slab can be used to  produce at most two different    colors    of coils     e The sum of the sizes of each coil order built from a slab must not exceed the  slab size     Where to find the files    You will work with the steel mill example  supplied as the steelmil1 example at  the following location      lt Install_dir gt  op  examples op  steelmil   where  lt Instal1_dir gt  is your installation directory   Data for the model steelmil  mod is contained in the file steelmil1 dat     Modeling elements of the inventory problem  Examines some modeling aspects specific to constraint programming and discusses  the CP Optimizer     This section    e examines some modeling aspects that are specific to constraint programming       specialized constraints      aggregate or  and    e focuses on the search for solutions and how the CP Optimizer engine can be  tuned to find better and faster solutions       changing constraint programming parameters    24 OPL Language User   s Manual        using search phases to describe a more specific search   
    
Download Pdf Manuals
 
 
    
Related Search
    
Related Contents
  インストールガイド  Consulter  LCD1402 mode d`emploi  USER MANUAL  Epson Duet Ultra Portable Projector Screen Start Here Guide  ASUS A88X-PLUS F8563 User's Manual  Bedienungsanleitung  Internship Report A System Analysis in the Basis of Corporate  SB3000E User's Manual    Copyright © All rights reserved. 
   Failed to retrieve file