/********************************************************
Xpress-BCL Java Example Problems
================================
file xbcoco1.java
`````````````````
Coco Problem Phase 1.
Initial formulation: data, variables and constraints fixed.
(c) 2008 Fair Isaac Corporation
author: S.Heipcke, Jan. 2000, rev. Mar. 2011
********************************************************/
import com.dashoptimization.*;
public class xbcoco1
{
public static void main(String[] args)
{
XPRB bcl;
XPRBvar make11,make21,make12,make22;
XPRBprob p;
bcl = new XPRB(); /* Initialize BCL */
p = bcl.newProb("Coco1"); /* Create 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(make11.mul(50).add(make21.mul(125)).add(make12.mul(47))
.add(make22.mul(132)) );
/****CONSTRAINTS****/
p.newCtr("MxMake1", make11.add(make21).lEql(400) );
/* Capacity limit at factory 1 */
p.newCtr("MxMake2", make12.add(make22).lEql(500) );
/* Capacity limit at factory 2 */
p.newCtr("MxSell1", make11.add(make12).lEql(650) );
/* Limit on the amount of prod. 1 to be sold */
p.newCtr("MxSell2", make21.add(make22).lEql(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 */
System.out.println("Objective: " + p.getObjVal()); /* Get objective value */
/* Print out the solution values for all variables */
System.out.println(make11.getName() +": " + make11.getSol());
System.out.println(make21.getName() +": " + make21.getSol());
System.out.println(make12.getName() +": " + make12.getSol());
System.out.println(make22.getName() +": " + make22.getSol());
}
}
|
/********************************************************
Xpress-BCL Java Example Problems
================================
file xbcoco3.java
`````````````````
Coco Problem Phase 3.
Introduce time periods and inventory.
(c) 2008 Fair Isaac Corporation
author: S.Heipcke, Jan. 2000, rev. Mar. 2011
********************************************************/
import java.io.*;
import com.dashoptimization.*;
public class xbcoco3
{
static final int NP = 2; /* Number of products (p) */
static final int NF = 2; /* factories (f) */
static final int NR = 2; /* raw materials (r) */
static final int NT = 4; /* time periods (t) */
static final String REVFILE = System.getProperty("XPRBDATA") +
"/coco/revt.dat";
static final String CMAKEFILE = System.getProperty("XPRBDATA") +
"/coco/cmake.dat";
static final String CBUYFILE = System.getProperty("XPRBDATA") +
"/coco/cbuyt.dat";
static final String REQFILE = System.getProperty("XPRBDATA") +
"/coco/req.dat";
static final String MXSELLFILE = System.getProperty("XPRBDATA") +
"/coco/maxsellt.dat";
static final String MXMAKEFILE = System.getProperty("XPRBDATA") +
"/coco/mxmake.dat";
static final String PSTOCK0FILE = System.getProperty("XPRBDATA") +
"/coco/pstock0.dat";
static final String RSTOCK0FILE = System.getProperty("XPRBDATA") +
"/coco/rstock0.dat";
/****TABLES****/
static double[][] REV; /* Unit selling price of product p in period t */
static double[][] CMAK; /* Unit cost to make product p at factory f */
static double[][] CBUY; /* Unit cost to buy raw material r in period t */
static double[][] REQ; /* Requirement by unit of prod. p for raw mat. r */
static double[][] MXSELL; /* Max. amount of p that can be sold in period t */
static double[] MXMAKE; /* Max. amount factory f can make over all prod.s */
static double[][] PSTOCK0; /* Initial product p stock level at factory f */
static double[][] RSTOCK0; /* Initial raw material r stock level at factory f*/
/****DATA****/
static final double CPSTOCK = 2.0; /* Unit cost to store any product p */
static final double CRSTOCK = 1.0; /* Unit cost to store any raw mat. r */
static final double MXRSTOCK = 300; /* Max. amount of r that can be stored
each f and t */
static XPRBprob pb;
/***********************************************************************/
static void modCoco3()
{
XPRB bcl;
XPRBvar[][][] make, sell, pstock, buy, rstock;
XPRBexpr lobj, lc;
int p,f,r,t;
bcl = new XPRB(); /* Initialize BCL */
pb = bcl.newProb("Coco3"); /* Create a new problem in BCL */
/****VARIABLES****/
make = new XPRBvar[NP][NF][NT];
sell = new XPRBvar[NP][NF][NT];
pstock = new XPRBvar[NP][NF][NT+1];
buy = new XPRBvar[NR][NF][NT];
rstock = new XPRBvar[NR][NF][NT+1];
for(p=0;p |
/********************************************************
Xpress-BCL Java Example Problems
================================
file xbcoco.java
````````````````
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
********************************************************/
import com.dashoptimization.*;
public class xbcoco
{
static final int 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 */
static final int NP = 2; /* Number of products (p) */
static final int NF = 2; /* factories (f) */
static final int NR = 2; /* raw materials (r) */
static final int NT = 4; /* time periods (t) */
/****DATA****/
static final double[][] REV =
{{400, 380, 405, 350},
{410, 397, 412, 397}};
/* Unit selling price of prod. p in period t */
static final double[][] CMAK =
{{150, 153},
{ 75, 68}}; /* Unit cost to make product p at factory f */
static final double[][] CBUY =
{{100, 98, 97, 100},
{200, 195, 198, 200}};
/* Unit cost to buy raw material r in period t */
static final double[] COPEN = {50000, 63000};
/* Fixed cost of factory f being open for one period */
static final double CPSTOCK = 2.0; /* Unit cost to store any product p */
static final double CRSTOCK = 1.0; /* Unit cost to store any raw material r */
static final double[][] REQ =
{{1.0, 0.5},
{1.3, 0.4}}; /* Requirement by unit of prod. p for raw material r */
static final double[][] MXSELL =
{{650, 600, 500, 400},
{600, 500, 300, 250}};
/* Max. amount of p that can be sold in period t */
static final double[] MXMAKE = {400, 500};
/* Max. amount factory f can make over all products */
static final double MXRSTOCK = 300;
/* Max. amount of r that can be stored each f and t */
static final double[][] PSTOCK0 =
{{50, 100},
{50, 50}}; /* Initial product p stock level at factory f */
static final double[][] RSTOCK0 =
{{100, 150},
{ 50, 100}}; /* Initial raw material r stock level at factory f*/
/***********************************************************************/
public static void main(String[] args)
{
XPRB bcl;
XPRBvar[][][] make, sell, pstock, buy, rstock;
XPRBvar[][] openm;
XPRBexpr lobj, lc;
int p,f,r,t;
XPRBprob pb;
bcl = new XPRB(); /* Initialize BCL */
pb = bcl.newProb("Coco"); /* Create a new problem in BCL */
/****VARIABLES****/
make = new XPRBvar[NP][NF][NT];
sell = new XPRBvar[NP][NF][NT];
pstock = new XPRBvar[NP][NF][NT+1];
buy = new XPRBvar[NR][NF][NT];
rstock = new XPRBvar[NR][NF][NT+1];
openm = new XPRBvar[NF][NT];
for(p=0;p |