| /********************************************************
  Xpress-BCL C++ Example Problems
  ===============================
  file xbcoco1.cxx
  ````````````````
  Coco Problem Phase 1. 
  Initial formulation: data, variables and 
  constraints fixed.
  (c) 2008 Fair Isaac Corporation
      author: S.Heipcke, Jan. 2000, rev. Mar. 2011
********************************************************/
#include 
#include "xprb_cpp.h"
using namespace std;
using namespace ::dashoptimization;
int main(int argc, char **argv)
{
 XPRBvar make11,make21,make12,make22;
 XPRBprob p("Coco1");         /* Initialize a new problem in BCL */
/****VARIABLES****/
 make11 = p.newVar("make11"); /* Amount of prod. 1 to make at factory 1 */
 make21 = p.newVar("make21"); /* Amount of prod. 2 to make at factory 1 */
 make12 = p.newVar("make12"); /* Amount of prod. 1 to make at factory 2 */
 make22 = p.newVar("make22"); /* Amount of prod. 2 to make at factory 2 */
/****OBJECTIVE****/
              /* Define & set objective function: maximize total profit */ 
 p.setObj(p.newCtr("OBJ", 50*make11 + 125*make21 + 47*make12 + 132*make22));
/****CONSTRAINTS****/
 p.newCtr("MxMake1", make11+make21 <= 400);  /* Capacity limit at factory 1 */
 p.newCtr("MxMake2", make12+make22 <= 500);  /* Capacity limit at factory 2 */
 p.newCtr("MxSell1", make11+make12 <= 650);  /* Limit on the amount of 
                                                prod. 1 to be sold */
 p.newCtr("MxSell2", make21+make22 <= 600);  /* Limit on the amount of 
                                                prod. 2 to be sold */
/****SOLVING + OUTPUT****/
 p.setSense(XPRB_MAXIM);      /* Choose the sense of the optimization */
 p.lpOptimize("");            /* Solve the LP-problem */
 cout << "Objective: " << p.getObjVal() << endl;   /* Get objective value */
               /* Print out the solution values for all variables */
 cout << make11.getName() << ": " << make11.getSol() << endl;
 cout << make21.getName() << ": " << make21.getSol() << endl;
 cout << make12.getName() << ": " << make12.getSol() << endl;
 cout << make22.getName() << ": " << make22.getSol() << endl;
 
 return 0;
} 
 | 
| /********************************************************
  Xpress-BCL C++ Example Problems
  ===============================
  file xbcoco3.cxx
  `````````````````
  Coco Problem Phase 3. 
  Introduce time periods and inventory.
  (c) 2008 Fair Isaac Corporation
      author: S.Heipcke, Jan. 2000, rev. Mar. 2011
********************************************************/
#include 
#include 
#include "xprb_cpp.h"
using namespace std;
using namespace ::dashoptimization;
#define NP 2           /* Number of products (p) */
#define NF 2           /* Factories (f) */
#define NR 2           /* Raw materials (r) */
#define NT 4           /* Time periods (t) */
#define REVFILE     XPRBDATAPATH "/coco/revt.dat"
#define CMAKEFILE   XPRBDATAPATH "/coco/cmake.dat"
#define CBUYFILE    XPRBDATAPATH "/coco/cbuyt.dat"
#define REQFILE     XPRBDATAPATH "/coco/req.dat"
#define MXSELLFILE  XPRBDATAPATH "/coco/maxsellt.dat"
#define MXMAKEFILE  XPRBDATAPATH "/coco/mxmake.dat"
#define PSTOCK0FILE XPRBDATAPATH "/coco/pstock0.dat"
#define RSTOCK0FILE XPRBDATAPATH "/coco/rstock0.dat"
/****TABLES****/
double REV[NP][NT];     /* Unit selling price of product p in period t */
double CMAK[NP][NF];    /* Unit cost to make product p at factory f */
double CBUY[NR][NT];    /* Unit cost to buy raw material r in period t */
double REQ[NP][NR];     /* Requirement by unit of prod. p for raw material r */
double MXSELL[NP][NT];  /* Max. amount of p that can be sold in period t */
double MXMAKE[NF];      /* Max. amount factory f can make over all products */
double PSTOCK0[NP][NF]; /* Initial product p stock level at factory f */
double RSTOCK0[NR][NF]; /* Initial raw material r stock level at factory f*/
/****DATA****/
double CPSTOCK = 2.0;   /* Unit cost to store any product p */
double CRSTOCK = 1.0;   /* Unit cost to store any raw material r */
double MXRSTOCK = 300;  /* Max. amount of r that can be stored each f and t */
XPRBprob pb("Coco3");   /* Initialize a new problem in BCL */
 
/***********************************************************************/
void modCoco3()
{
 XPRBvar make[NP][NF][NT], sell[NP][NF][NT], pstock[NP][NF][NT+1],
       buy[NR][NF][NT], rstock[NR][NF][NT+1];
 XPRBexpr lobj, lc;
 int p,f,r,t;
 
/****VARIABLES****/
 for(p=0;p | 
| /********************************************************
  Xpress-BCL C++ Example Problems
  ===============================
  file xbcoco.cxx
  ```````````````
  Complete Coco Problem. 
  Specify phase by PHASE parameter.
  Data input in the model, not via data files.
  (c) 2008 Fair Isaac Corporation
      author: S.Heipcke, Jan. 2000, rev. Mar. 2011
********************************************************/
#include 
#include "xprb_cpp.h"
using namespace std;
using namespace ::dashoptimization;
#define PHASE 5
/* Phase = 3: Multi-period parameterised model; mines always open
 * Phase = 4: Mines may open/closed freely; when closed save 20000 per month
 * Phase = 5: Once closed always closed; larger saving */
 
#define NP 2            /* Number of products (p) */
#define NF 2            /*           factories (f) */
#define NR 2            /*           raw materials (r) */
#define NT 4            /*           time periods (t) */
/****DATA****/
double REV[][NT] =      /* Unit selling price of product p in period t */
        {{400, 380, 405, 350},
         {410, 397, 412, 397}};
double CMAK[][NF] =     /* Unit cost to make product p at factory f */
        {{150, 153},
         { 75,  68}};
double CBUY[][NT] =     /* Unit cost to buy raw material r in period t */
        {{100,  98,  97, 100},
         {200, 195, 198, 200}};
double COPEN[] =        /* Fixed cost of factory f being open for one period */
        {50000, 63000};
double CPSTOCK = 2.0;   /* Unit cost to store any product p */
double CRSTOCK = 1.0;   /* Unit cost to store any raw material r */
double REQ[][NR] =      /* Requirement by unit of prod. p for raw material r */
        {{1.0, 0.5},
         {1.3, 0.4}};
double MXSELL[][NT] =   /* Max. amount of p that can be sold in period t */
        {{650, 600, 500, 400},
         {600, 500, 300, 250}};
double MXMAKE[] =       /* Max. amount factory f can make over all products */
        {400, 500};
double MXRSTOCK = 300;  /* Max. amount of r that can be stored each f and t */
double PSTOCK0[][NF] =  /* Initial product p stock level at factory f */
        {{50, 100},
         {50,  50}};
double RSTOCK0[][NF] =  /* Initial raw material r stock level at factory f*/
        {{100, 150},
         { 50, 100}};
 
/***********************************************************************/
int main(int argc, char **argv)
{
 XPRBvar make[NP][NF][NT], sell[NP][NF][NT], pstock[NP][NF][NT+1],
       buy[NR][NF][NT], rstock[NR][NF][NT+1], openm[NF][NT];
 XPRBexpr lobj, lc;
 int p,f,r,t; 
 XPRBprob pb("Coco");   /* Initialize a new problem in BCL */
/****VARIABLES****/
 for(p=0;p |