/********************************************************
Xpress-BCL Java Example Problems
================================
file xbburg.java
````````````````
Burglar problem, binary variable formulation.
(c) 2008-2023 Fair Isaac Corporation
author: S.Heipcke, Jan. 2000, rev. Mar. 2011
********************************************************/
import com.dashoptimization.*;
public class xbburg {
static final int NItems = 8; /* Number of items */
/****DATA****/
/* Item: 1 2 3 4 5 6 7 8 */
static final double[] VALUE = {15,100, 90, 60, 40, 15, 10, 1};
/* Value of items */
static final double[] WEIGHT = { 2, 20, 20, 30, 40, 30, 60, 10};
/* Weight of items */
static final double WTMAX = 102; /* Max weight allowed for haul */
public static void main(String[] args) {
XPRBvar[] x;
XPRBexpr lobj, kn;
int i;
try (XPRBprob p = new XPRBprob("Burglar")) { /* Initialize BCL and create a new problem */
/****VARIABLES****/
x = new XPRBvar[NItems]; /* 1 if we take item i; 0 otherwise */
for(i=0;i<NItems;i++) x[i]=p.newVar("x", XPRB.BV);
/****OBJECTIVE****/
lobj = new XPRBexpr();
for(i=0;i<NItems;i++) lobj.add(x[i].mul(VALUE[i]));
p.setObj(lobj); /* Set objective: maximize total value */
/****CONSTRAINTS****/
kn = new XPRBexpr();
for(i=0;i<NItems;i++) kn.add(x[i].mul(WEIGHT[i]));
p.newCtr("WtMax", kn.lEql(WTMAX) ); /* Weight restriction */
/****SOLVING + OUTPUT****/
p.setSense(XPRB.MAXIM); /* Choose the sense of the optimization */
p.mipOptimize(""); /* Solve the MIP-problem */
System.out.println("Objective: " + p.getObjVal()); /* Get objective value */
for(i=0;i<NItems;i++) /* Print out the solution */
System.out.print(x[i].getName()+ ":" + x[i].getSol() + " ");
System.out.println();
}
}
}
|
/********************************************************
Xpress-BCL Java Example Problems
================================
file xbburgi.java
`````````````````
Burglar problem.
Binary variable formulation with index sets.
(c) 2008-2023 Fair Isaac Corporation
author: S.Heipcke, Jan. 2000, rev. Mar. 2011
********************************************************/
import com.dashoptimization.*;
public class xbburgi {
/****DATA****/
/* Item: ca ne va pi tv vi ch br */
static final double[] VALUE = {15,100, 90, 60, 40, 15, 10, 1};
/* Value of items */
static final double[] WEIGHT = { 2, 20, 20, 30, 40, 30, 60, 10};
/* Weight of items */
static final double WTMAX = 102; /* Max weight allowed for haul */
static final String[] ITEMNAMES = {"camera", "necklace", "vase", "picture",
"tv", "video", "chest", "brick"};
static int NItems; /* Number of items */
public static void main(String[] args) {
XPRBvar[] x;
XPRBindexSet ITEMS; /* Set of items */
int i;
XPRBexpr lobj, kn;
try (XPRBprob p = new XPRBprob("Burglari")) { /* Initialize BCL and create a new problem */
/****INDICES****/
ITEMS=p.newIndexSet("Items",ITEMNAMES.length); /* Create the index set */
for(i=0;i<ITEMNAMES.length;i++) ITEMS.addElement(ITEMNAMES[i]);
NItems=ITEMS.getSize(); /* Get the size of the index set */
/****VARIABLES****/
x = new XPRBvar[NItems];
for(i=0;i<NItems;i++)
x[i] = p.newVar("x_"+ITEMS.getIndexName(i), XPRB.BV);
/* 1 if we take item i; 0 otherwise */
/****OBJECTIVE****/
lobj = new XPRBexpr();
for(i=0;i<NItems;i++) lobj.add(x[i].mul(VALUE[i]));
p.setObj(lobj); /* Set objective: maximize total value */
/****CONSTRAINTS****/
kn = new XPRBexpr();
for(i=0;i<NItems;i++) kn.add(x[i].mul(WEIGHT[i]));
p.newCtr("WtMax", kn.lEql(WTMAX) ); /* Weight restriction */
/****SOLVING + OUTPUT****/
p.setSense(XPRB.MAXIM); /* Choose the sense of the optimization */
p.mipOptimize(""); /* Solve the MIP-problem */
System.out.println("Objective: " + p.getObjVal()); /* Get objective value */
for(i=0;i<NItems;i++) /* Print out the chosen items */
if(x[i].getSol()>0)
System.out.println(ITEMS.getIndexName(i) + ": " + x[i].getSol());
}
}
}
|
/********************************************************
Xpress-BCL Java Example Problems
================================
file xbburgl.java
`````````````````
Burglar problem.
Binary variable formulation with index sets.
-- Formulating logical conditions
with indicator constraints --
(c) 2009-2023 Fair Isaac Corporation
author: S.Heipcke, June 2009, rev. Mar. 2011
********************************************************/
import com.dashoptimization.*;
public class xbburgl {
/****DATA****/
/* Item: ca ne va pi tv vi ch br */
static final double[] VALUE = {15,100, 90, 60, 40, 15, 10, 1};
/* Value of items */
static final double[] WEIGHT = { 2, 20, 20, 30, 40, 30, 60, 10};
/* Weight of items */
static final double WTMAX = 102; /* Max weight allowed for haul */
static final String[] ITEMNAMES = {"camera", "necklace", "vase", "picture",
"tv", "video", "chest", "brick"};
static int NItems; /* Number of items */
public static void main(String[] args) {
XPRBvar[] x;
XPRBindexSet ITEMS; /* Set of items */
int i;
XPRBexpr lobj, kn;
XPRBctr Log3a,Log3b;
try (XPRBprob p = new XPRBprob("BurglarL")) { /* Initialize BCL and create a new problem */
/****INDICES****/
ITEMS=p.newIndexSet("Items",ITEMNAMES.length); /* Create the index set */
for(i=0;i<ITEMNAMES.length;i++) ITEMS.addElement(ITEMNAMES[i]);
NItems=ITEMS.getSize(); /* Get the size of the index set */
/****VARIABLES****/
x = new XPRBvar[NItems];
for(i=0;i<NItems;i++)
x[i] = p.newVar("x_"+ITEMS.getIndexName(i), XPRB.BV);
/* 1 if we take item i; 0 otherwise */
/****OBJECTIVE****/
lobj = new XPRBexpr();
for(i=0;i<NItems;i++) lobj.add(x[i].mul(VALUE[i]));
p.setObj(lobj); /* Set objective: maximize total value */
/****CONSTRAINTS****/
kn = new XPRBexpr();
for(i=0;i<NItems;i++) kn.add(x[i].mul(WEIGHT[i]));
p.newCtr("WtMax", kn.lEql(WTMAX) ); /* Weight restriction */
/** Logic constraint:
** Either take "vase" and "picture" or "tv" and "video" (but not both pairs). */
/* Values within each pair are the same */
p.newCtr("Log1", x[ITEMS.getIndex("vase")].eql(x[ITEMS.getIndex("picture")]));
/* x["vase"] == x["picture"] */
p.newCtr("Log2", x[ITEMS.getIndex("tv")].eql(x[ITEMS.getIndex("video")]));
/* x["tv"] == x["video"] */
/* Choose exactly one pair */
Log3a = p.newCtr("Log3a",
x[ITEMS.getIndex("tv")].add(x[ITEMS.getIndex("video")]).lEql(0));
/* x["tv"]+x["video"] <= 0 */
Log3b = p.newCtr("Log3b",
x[ITEMS.getIndex("tv")].add(x[ITEMS.getIndex("video")]).gEql(2) );
/* x["tv"]+x["video"] >= 2 */
/* Turn the 2 constraints into indicator constraints */
Log3a.setIndicator(1, x[ITEMS.getIndex("vase")]);
/* x["vase"]=1 -> x["tv"]+x["video"]=0 */
Log3b.setIndicator(-1, x[ITEMS.getIndex("vase")]);
/* x["vase"]=0 -> x["tv"]+x["video"]=2 */
/* Alternative MIP formulation (instead of Log3a and Log3b) */
/*
p.newCtr("Log3",
x[ITEMS.getIndex("tv")].add(x[ITEMS.getIndex("vase")]).eql(1) );
*/ /* x["tv"] = 1 - x["vase"] */
/****SOLVING + OUTPUT****/
p.setSense(XPRB.MAXIM); /* Choose the sense of the optimization */
p.mipOptimize(""); /* Solve the MIP-problem */
System.out.println("Objective: " + p.getObjVal()); /* Get objective value */
for(i=0;i<NItems;i++) /* Print out the chosen items */
if(x[i].getSol()>0)
System.out.println(ITEMS.getIndexName(i) + ": " + x[i].getSol());
}
}
}
|