UG - Examples from 'BCL Reference Manual'
|
|
|
| Type: | Programming |
| Rating: | 3 |
| Description: | The following examples are discussed in detail in the 'BCL User Guide and Reference Manual':
|
| File(s): | xbexpl1.java, xbexpl1i.java, xbexpl3.java, xbexpl2.java, xbcutex.java, xbqpr12.java, xbairport.java, xbcontr1.java, xbcontr2.java, xbcontr2s.java |
| Data file(s): | durations.dat |
|
|
|
| xbexpl1.java |
/********************************************************
Xpress-BCL Java Example Problems
================================
file xbexpl1.java
`````````````````
BCL user guide example.
Definition of variables and constraints,
variable arrays and SOS, followed by file output,
solving and printing of solutions.
(c) 2008 Fair Isaac Corporation
author: S.Heipcke, Jan. 2000, rev. Dec. 2011
********************************************************/
import java.io.*;
import com.dashoptimization.*;
public class xbexpl1
{
/**************************************************************************/
/* Expl 1: This example corresponds to the one printed in the */
/* BCL User Guide. It shows how to define variables and */
/* constraints, and Special Ordered Sets, followed by file output, */
/* solving and printing of solutions. */
/* Set the following parameter to true to try out a problem formulation */
/* using Special Ordered Sets: */
static final boolean SOS = false;
/**************************************************************************/
static final int NJ = 4; /* Number of jobs */
static final int NT = 10; /* Time limit */
/**** DATA ****/
static final double[] DUR = {3,4,2,2}; /* Durations of jobs */
static XPRBvar[] start; /* Start times of jobs */
static XPRBvar[][] delta; /* Binaries for start times */
static XPRBvar z; /* Maximum completion time (makespan) */
static XPRBsos[] set; /* Sets regrouping start times for jobs */
static XPRB bcl;
static XPRBprob p;
/*************************************************************************/
static void jobsModel() throws IOException
{
XPRBexpr le;
int j,t;
/****VARIABLES****/
start = new XPRBvar[NJ]; /* Create start time variables */
for(j=0;j |
| xbexpl1i.java |
/********************************************************
Xpress-BCL Java Example Problems
================================
file xbexpl1i.java
``````````````````
BCL user guide example.
Version using index sets.
(c) 2008 Fair Isaac Corporation
author: S.Heipcke, 2003, rev. Dec. 2011
********************************************************/
import java.io.*;
import com.dashoptimization.*;
public class xbexpl1i
{
static final String DATAFILE = System.getProperty("XPRBDATA") +
"/jobs/durations.dat";
static final int MAXNJ = 4; /* Max. number of jobs */
static final int NT = 10; /* Time limit */
/**** DATA ****/
static int NJ = 0; /* Number of jobs read in */
static double[] DUR; /* Durations of jobs */
static XPRBindexSet Jobs; /* Job names */
static XPRBvar[] start; /* Start times of jobs */
static XPRBvar[][] delta; /* Binaries for start times */
static XPRBvar z; /* Maximum completion time (makespan) */
static XPRB bcl;
static XPRBprob p;
/*************************************************************************/
/**** Initialize the stream tokenizer ****/
static StreamTokenizer initST(FileReader file)
{
StreamTokenizer st=null;
st= new StreamTokenizer(file); /* Initialize the stream tokenizer */
st.commentChar('!'); /* Use the character '!' for comments */
st.eolIsSignificant(true); /* Return end-of-line character */
st.ordinaryChar(','); /* Use ',' as separator */
st.parseNumbers(); /* Read numbers as numbers (not strings)*/
return st;
}
/**** Read data from files ****/
static void readData() throws IOException
{
FileReader datafile=null;
StreamTokenizer st;
int i;
/* Create a new index set */
Jobs = p.newIndexSet("Jobs", MAXNJ);
DUR = new double[MAXNJ];
/* Read the durations data file */
datafile = new FileReader(DATAFILE);
st = initST(datafile);
do
{
do
{
st.nextToken();
} while(st.ttype==st.TT_EOL); /* Skip empty lines */
if(st.ttype != st.TT_WORD) break;
i=Jobs.addElement(st.sval);
if(st.nextToken() != ',') break;
if(st.nextToken() != st.TT_NUMBER) break;
DUR[i] = st.nval;
NJ+=1;
} while( st.nextToken() == st.TT_EOL && NJ |
| xbexpl3.java |
/********************************************************
Xpress-BCL Java Example Problems
================================
file xbexpl3.java
`````````````````
Error handling and output redirection.
(c) 2008 Fair Isaac Corporation
author: S.Heipcke, 2005, rev. Jan. 2012
********************************************************/
import java.io.*;
import com.dashoptimization.*;
/* This small, infeasible example shows how all printed messages can
be intercepted by the user's program. */
public class xbexpl3
{
static XPRB bcl;
/***********************************************************************/
public static void modexpl3(XPRBprob prob) throws XPRBerror
{
XPRBvar[] x;
XPRBexpr cobj;
int i;
x = new XPRBvar[3]; /* Create the variables */
for(i=0;i<2;i++) x[i] = prob.newVar("x_"+i, XPRB.UI, 0, 100);
/* Create the constraints:
C1: 2x0 + 3x1 >= 41
C2: x0 + 2x1 = 13 */
prob.newCtr("C1", x[0].mul(2).add(x[1].mul(3)) .gEql(41));
prob.newCtr("C2", x[0].add(x[1].mul(2)) .eql(13));
/* Uncomment the following line to cause an error in the model that
triggers the error handling: */
// x[2] = prob.newVar("x_2", XPRB.UI, 10, 1);
/* Objective: minimize x0+x1 */
cobj = new XPRBexpr();
for(i=0;i<2;i++) cobj.add(x[i]);
prob.setObj(cobj); /* Select objective function */
prob.setSense(XPRB.MINIM); /* Set objective sense to minimization */
prob.print(); /* Print current problem definition */
prob.lpOptimize(""); /* Solve the LP */
System.out.println("Problem status: " + prob.getProbStat() +
" LP status: " + prob.getLPStat() +
" MIP status: " + prob.getMIPStat());
/* This problem is infeasible, that means the following command will fail.
It prints a warning if the message level is at least 2 */
System.out.println("Objective: " + prob.getObjVal());
for(i=0;i<2;i++) /* Print solution values */
System.out.print(x[i].getName() + ":" + x[i].getSol() + ", ");
System.out.println();
}
/***********************************************************************/
public static void main(String[] args)
{
FileWriter f;
XPRBprob prob;
try
{
bcl = new XPRB(); /* Initialize BCL */
}
catch(XPRBlicenseError e)
{
System.err.println("BCL error "+ e.getErrorCode() + ": " + e.getMessage());
System.exit(1);
}
bcl.setMsgLevel(2); /* Set the printing flag. Try other values:
0 - no printed output,
2 - print warnings, 3 - all messages */
try
{
f=new FileWriter("expl3out.txt");
bcl.setOutputStream(f); /* Redirect all output from BCL to a file */
prob = bcl.newProb("Expl3"); /* Create a new problem */
prob.setOutputStream(); /* Output for this prob. on standard output */
modexpl3(prob); /* Formulate and solve the problem */
prob.setOutputStream(f); /* Redirect problem output to file */
prob.print(); /* Write to the output file */
prob.setOutputStream(); /* Re-establish standard output for prob */
bcl.setOutputStream(); /* Re-establish standard output for BCL */
f.close();
prob.finalize(); /* Delete the problem */
prob=null;
bcl.finalize(); /* Release license */
bcl=null;
System.gc(); /* Force garbage collection */
System.runFinalization();
System.err.flush();
}
catch(IOException e)
{
System.err.println(e.getMessage());
System.exit(1);
}
catch(XPRBerror e)
{
System.err.println("BCL error "+ e.getErrorCode() + ": " + e.getMessage());
System.exit(1);
}
}
}
|
| xbexpl2.java |
/********************************************************
Xpress-BCL Java Example Problems
================================
file xbexpl2.java
`````````````````
Transportation model demonstrating use of index sets.
(c) 2008 Fair Isaac Corporation
author: S.Heipcke, Jan. 2000, rev. Dec. 2011
********************************************************/
import java.io.*;
import com.dashoptimization.*;
public class xbexpl2
{
static final int MaxSuppliers = 100; /* Max. number of suppliers */
static final int MaxCustomers = 1000;/* Max. number of customers */
static final int MaxArcs = 10000; /* Max. number of non-zero cost values */
static final String DEMANDFILE = System.getProperty("XPRBDATA") +
"/trans/ex2dem1.dat";
/* Demand data file (comma-separated format) */
static final String AVAILFILE = System.getProperty("XPRBDATA") +
"/trans/ex2avail.dat";
/* Supply data file (comma-separated format) */
static final String COSTFILE = System.getProperty("XPRBDATA") +
"/trans/ex2cost.dat";
/* Cost data file (comma-separated format) */
static XPRBindexSet Suppliers; /* Set of suppliers */
static XPRBindexSet Customers; /* Set of customers */
static double[] AVAIL; /* Availability of products */
static double[] DEMAND; /* Demand by customers */
static class TData {
int suppl;
int custm;
double value;
};
static TData[] COST = new TData[MaxArcs]; /* Cost per supplier-customer pair*/
static int NSuppl=0, NCustom=0, NArc=0; /* Actual numbers of suppliers,
customers, and arcs */
static XPRB bcl;
static XPRBprob p;
/***********************************************************************/
static void modTrans() throws IOException
{
XPRBexpr lobj, av[], de[];
int s,c,a;
XPRBvar[] x;
/****VARIABLES****/
x = new XPRBvar[NArc];
for(a=0; a |
| xbcutex.java |
/********************************************************
Xpress-BCL Java Example Problems
================================
file xbcutex.java
`````````````````
Simplified version of xbexpl1.java showing how
to define cuts with BCL.
(c) 2008 Fair Isaac Corporation
author: S.Heipcke, 2005, rev. Dec. 2011
********************************************************/
import java.io.*;
import com.dashoptimization.*;
public class xbcutex
{
static final int NJ = 4; /* Number of jobs */
static final int NT = 10; /* Time limit */
/**** DATA ****/
static final double[] DUR = {3,4,2,2}; /* Durations of jobs */
static XPRBvar[] start; /* Start times of jobs */
static XPRBvar[][] delta; /* Binaries for start times */
static XPRBvar z; /* Maximum completion time (makespan) */
static XPRB bcl;
static XPRBprob p;
/*************************************************************************/
static class CutMgrCallback implements XPRScutMgrListener
{
public int XPRScutMgrEvent(XPRSprob oprob, Object data)
{
XPRBprob bprob;
XPRBcut[] ca;
int num,i;
bprob = (XPRBprob)data; /* Get the BCL problem */
try
{
bprob.beginCB(oprob);
num = oprob.getIntAttrib(XPRS.NODES);
if(num == 2) /* Only generate cuts at node 2 */
{
ca = new XPRBcut[2];
ca[0] = bprob.newCut(start[1].add(2) .lEql(start[0]), 2);
ca[1] = bprob.newCut(start[2].mul(4) .add(start[3].mul(-5.3)) .lEql(-17), 2);
System.out.println("Adding constraints:");
for(i=0;i<2;i++) ca[i].print();
bprob.addCuts(ca);
}
bprob.endCB();
}
catch(XPRSprobException e)
{
System.out.println("Error " + e.getCode() + ": " + e.getMessage());
}
return 0; /* Call this method once per node */
}
}
/*************************************************************************/
static void jobsModel()
{
XPRBexpr le;
int j,t;
/****VARIABLES****/
start = new XPRBvar[NJ]; /* Create start time variables */
for(j=0;j |
| xbqpr12.java |
/********************************************************
Xpress-BCL Java Example Problems
================================
file xbqpr12.java
`````````````````
Small Quadratic Programming example.
minimize x1 + x1^2 +2x1x2 +2x2^2 +x4^2
s.t. C1: x1 +2x2 -4x4 >= 0
C2: 3x1 -2x3 - x4 <= 100
C3: 10 <= x1 +3x2 +3x3 -2x4 <= 30
0<=x1<=20
0<=x2,x3
x4 free
(c) 2008 Fair Isaac Corporation
author: S.Heipcke, Jan. 2000, rev. Dec. 2011
********************************************************/
import java.io.*;
import com.dashoptimization.*;
public class xbqpr12
{
static final int NXPRBvar = 4;
/***********************************************************************/
public static void main(String[] args) throws IOException
{
XPRB bcl;
XPRBctr c;
XPRBexpr le, qobj;
XPRBvar[] x;
int i;
XPRBprob p;
bcl = new XPRB(); /* Initialize BCL */
p = bcl.newProb("QPr12"); /* Create a new problem in BCL */
/**** VARIABLES ****/
x = new XPRBvar[NXPRBvar];
x[0] = p.newVar("x1", XPRB.PL, 0, 20);
x[1] = p.newVar("x2");
x[2] = p.newVar("x3");
x[3] = p.newVar("x4", XPRB.PL, -XPRB.INFINITY, XPRB.INFINITY);
/****OBJECTIVE****/
qobj = new XPRBexpr(); /* Define the objective function */
qobj.add(x[0]);
qobj.add( (x[0].sqr()) .add(x[0].mul(2).mul(x[1]))
.add(x[1].sqr().mul(2)) .add(x[3].sqr()) );
p.setObj(qobj);
/**** CONSTRAINTS ****/
p.newCtr("C1", x[0].add(x[1].mul(2)).add(x[3].mul(-4)) .gEql(0) );
p.newCtr("C2", x[0].mul(3).add(x[2].mul(-2)).add(x[3].mul(-1)) .lEql(100) );
c = p.newCtr("C3", x[0].add(x[1].mul(3)) .add(x[2].mul(3))
.add(x[3].mul(-2)) );
c.setRange(10,30);
/****SOLVING + OUTPUT****/
p.print(); /* Print out the problem definition */
p.exportProb(XPRB.MPS,"QPr12"); /* Output the matrix in MPS format */
p.exportProb(XPRB.LP,"QPr12"); /* Output the matrix in LP format */
p.setSense(XPRB.MINIM); /* Choose the sense of the optimization */
p.lpOptimize(""); /* Solve the QP-problem */
System.out.println("Objective function value: " + p.getObjVal());
for(i=0;i |
| xbairport.java |
/********************************************************
BCL Example Problems
====================
file xbairport.java
```````````````````
QCQP problem by
Rodrigo de Barros Nabholz & Maria Aparecida Diniz Ehrhardt
November 1994, DMA - IMECC- UNICAMP.
Based on AMPL model airport.mod by Hande Y. Benson
(Source: http://www.orfe.princeton.edu/~rvdb/ampl/nlmodels/ )
(c) 2008 Fair Isaac Corporation
author: S.Heipcke, June 2008, rev. Dec. 2011
********************************************************/
import java.io.*;
import com.dashoptimization.*;
public class xbairport
{
static final int N = 42;
static final double CX[] = {-6.3, -7.8, -9, -7.2, -5.7, -1.9, -3.5, -0.5, 1.4,
4, 2.1, 5.5, 5.7, 5.7, 3.8, 5.3, 4.7, 3.3, 0, -1, -0.4, 4.2,
3.2, 1.7, 3.3, 2, 0.7, 0.1, -0.1, -3.5, -4, -2.7, -0.5, -2.9,
-1.2, -0.4, -0.1, -1, -1.7, -2.1, -1.8, 0};
static final double CY[] = {8, 5.1, 2, 2.6, 5.5, 7.1, 5.9, 6.6, 6.1, 5.6, 4.9,
4.7, 4.3, 3.6, 4.1, 3, 2.4, 3, 4.7, 3.4, 2.3, 1.5, 0.5, -1.7, -2,
-3.1, -3.5, -2.4, -1.3, 0, -1.7, -2.1, -0.4, -2.9, -3.4, -4.3,
-5.2, -6.5, -7.5, -6.4, -5.1, 0};
static final double R[] = {0.09, 0.3, 0.09, 0.45, 0.5, 0.04, 0.1, 0.02, 0.02,
0.07, 0.4, 0.045, 0.05, 0.056, 0.36, 0.08, 0.07, 0.36, 0.67, 0.38,
0.37, 0.05, 0.4, 0.66, 0.05, 0.07, 0.08, 0.3, 0.31, 0.49, 0.09,
0.46, 0.12, 0.07, 0.07, 0.09, 0.05, 0.13, 0.16, 0.46, 0.25, 0.1};
public static void main(String[] args) throws IOException
{
XPRB bcl;
XPRBprob prob;
int i,j;
XPRBvar[] x,y; /* x-/y-coordinates to determine */
XPRBexpr qe;
XPRBctr cobj, c;
bcl = new XPRB(); /* Initialize BCL */
prob = bcl.newProb("airport"); /* Create a new problem in BCL */
/**** VARIABLES ****/
x = new XPRBvar[N];
for(i=0;i |
| xbcontr1.java |
/********************************************************
Xpress-BCL Java Example Problems
================================
file xbcontr1.java
``````````````````
Contract allocation example.
Combining BCL problem input with problem solving
in Xpress-Optimizer.
(c) 2008 Fair Isaac Corporation
author: S.Heipcke, 2005, rev. Dec. 2011
********************************************************/
import java.io.*;
import com.dashoptimization.*;
public class xbcontr1
{
static final int District = 6; /* Number of districts */
static final int Contract = 10; /* Number of contracts */
/**** DATA ****/
static final int[] OUTPUT = {50, 40, 10, 20, 70, 50};
/* Max. output per district */
static final int[] COST = {50, 20, 25, 30, 45, 40};
/* Cost per district */
static final int[] VOLUME = {20, 10, 30, 15, 20, 30, 10, 50, 10, 20};
/* Volume of contracts */
/***********************************************************************/
public static void main(String[] args) throws XPRSexception, XPRSprobException
{
int d, c, i, stat, ncol, len;
double [] sol;
double val;
java.lang.String [] names;
XPRB bcl;
XPRBprob p;
XPRSprob op;
XPRBexpr l1,l2,lobj;
XPRBvar[][] x; /* Variables indicating whether a project
is chosen */
XPRBvar[][] y; /* Quantities allocated to contractors */
bcl = new XPRB(); /* Initialize BCL */
p = bcl.newProb("Contract1"); /* Create a new problem in BCL */
XPRS.init(); /* Initialize Xpress-Optimizer */
/**** VARIABLES ****/
x = new XPRBvar[District][Contract];
y = new XPRBvar[District][Contract];
for(d=0;d |
| xbcontr2.java |
/********************************************************
Xpress-BCL Java Example Problems
================================
file xbcontr2.java
``````````````````
Contract allocation example.
Combining BCL problem input with problem solving
and callbacks in Xpress-Optimizer.
(c) 2008 Fair Isaac Corporation
author: S.Heipcke, 2005, rev. Dec. 2011
********************************************************/
import java.io.*;
import com.dashoptimization.*;
public class xbcontr2
{
static final int District = 6; /* Number of districts */
static final int Contract = 10; /* Number of contracts */
/**** DATA ****/
static final int[] OUTPUT = {50, 40, 10, 20, 70, 50};
/* Max. output per district */
static final int[] COST = {50, 20, 25, 30, 45, 40};
/* Cost per district */
static final int[] VOLUME = {20, 10, 30, 15, 20, 30, 10, 50, 10, 20};
/* Volume of contracts */
/***********************************************************************/
static class IntSolCallback implements XPRSintSolListener
{
public void XPRSintSolEvent(XPRSprob oprob, Object data)
{
int num, d, c;
XPRBprob bprob;
XPRBvar y;
try {
bprob = (XPRBprob)data;
bprob.beginCB(oprob);
num = oprob.getIntAttrib(XPRS.MIPSOLS); /* Get number of the solution */
bprob.sync(XPRB.XPRS_SOL); /* Update BCL solution values */
System.out.println("Solution " + num + ": Objective value: " +
bprob.getObjVal());
for(d=0;d |
| xbcontr2s.java |
/********************************************************
Xpress-BCL Java Example Problems
================================
file xbcontr2s.java
```````````````````
Contract allocation example.
Combining BCL problem input with problem solving
and callbacks in Xpress-Optimizer.
-- Single MIP thread --
(c) 2008 Fair Isaac Corporation
author: S.Heipcke, 2005, rev. Dec. 2011
********************************************************/
import java.io.*;
import com.dashoptimization.*;
public class xbcontr2s
{
static final int District = 6; /* Number of districts */
static final int Contract = 10; /* Number of contracts */
/**** DATA ****/
static final int[] OUTPUT = {50, 40, 10, 20, 70, 50};
/* Max. output per district */
static final int[] COST = {50, 20, 25, 30, 45, 40};
/* Cost per district */
static final int[] VOLUME = {20, 10, 30, 15, 20, 30, 10, 50, 10, 20};
/* Volume of contracts */
/***********************************************************************/
static class IntSolCallback implements XPRSintSolListener
{
public void XPRSintSolEvent(XPRSprob oprob, Object data)
{
int num, d, c;
XPRBprob bprob;
XPRBvar y;
try {
bprob = (XPRBprob)data;
num = oprob.getIntAttrib(XPRS.MIPSOLS); /* Get number of the solution */
bprob.sync(XPRB.XPRS_SOL); /* Update BCL solution values */
System.out.println("Solution " + num + ": Objective value: " +
bprob.getObjVal());
for(d=0;d |
