/********************************************************
BCL Example Problems
====================
file xbdelivr.c
```````````````
Transportation problem.
Use of arrays.
(c) 2008 Fair Isaac Corporation
author: S.Heipcke, Jan. 2000, rev. Mar. 2011
********************************************************/
#include
#include "xprb.h"
/* define or undefine ARRAY in order to switch between model formulations
with or without variable arrays in constraint definition */
#define ARRAY
#define NSupp 10 /* Number of suppliers */
#define NCust 7 /* Number of customers */
#define MaxArcs 100 /* Max. num. of non-zero cost values */
#define VANFILE XPRBDATAPATH "/delivery/ifvan.dat" /* Van data file */
#define COSTFILE XPRBDATAPATH "/delivery/cost.dat" /* Cost data file */
/****DATA****/
/* Supplier: London Luton B'ham Bristl Derby Stckpt York */
double SUPPLY[] = {140.0, 600.0, 50.0, 10.0, 400.0, 200.0, 20.0,
/* Supplier: Derby Soton Scnthp */
90.0, 30.0, 12.0};
/* Customer: London Livpol Doncst York Hull Manchr Shffld */
double DEMAND[] = {123.3, 56.4, 17.1, 192.8, 310.0, 47.0, 86.0};
double COST[NSupp][NCust]; /* Cost per supplier-customer pair */
double IFVAN[NSupp][NCust]; /* Non-zero if route uses vans instead
of lorries */
double VANCAP=40.0; /* Capacity on routes that use vans */
/***********************************************************************/
void moddelivery(XPRBprob prob)
{
XPRBctr ctr;
int s,c;
XPRBvar x[NSupp][NCust];
/****VARIABLES****/
for(s=0;s |
/********************************************************
BCL Example Problems
====================
file xbdlvriis.c
````````````````
Transportation problem (infeasible data).
Retrieving and printing IIS.
(c) 2008 Fair Isaac Corporation
author: S.Heipcke, 2005, rev. Mar. 2011
********************************************************/
#include
#include
#include "xprb.h"
#define NSupp 10 /* Number of suppliers */
#define NCust 7 /* Number of customers */
#define MaxArcs 100 /* Max. num. of non-zero cost values */
#define VANFILE XPRBDATAPATH "/delivery/ifvan.dat" /* Van data file */
#define COSTFILE XPRBDATAPATH "/delivery/cost.dat" /* Cost data file */
/****DATA****/
/* Supplier: London Luton B'ham Bristl Derby Stckpt York */
double SUPPLY[] = {140.0, 200.0, 50.0, 10.0, 400.0, 200.0, 20.0,
/* Supplier: Derby Soton Scnthp */
90.0, 30.0, 12.0};
/* Customer: London Livpol Doncst York Hull Manchr Shffld */
double DEMAND[] = {1230.3, 560.4, 117.1, 592.8, 310.0, 1247.0, 86.0};
double COST[NSupp][NCust]; /* Cost per supplier-customer pair */
double IFVAN[NSupp][NCust]; /* Non-zero if route uses vans instead
of lorries */
double VANCAP=40.0; /* Capacity on routes that use vans */
/***********************************************************************/
void moddelivery(XPRBprob prob)
{
XPRBctr ctr;
int s,c,i;
XPRBvar x[NSupp][NCust];
XPRBctr *iisctr;
XPRBvar *iisvar;
int numv, numc, numiis, ct;
/****VARIABLES****/
for(s=0;s0)
{ /* Print all variables in the IIS */
printf(" Variables: ");
for(i=0;i0)
{ /* Print all constraints in the IIS */
printf(" Constraints: ");
for(i=0;i0)
{
if(ct>0)
printf("IIS %d: %d variables, %d constraints\n", ct, numv, numc);
ct++;
XPRBgetiis(prob, NULL, &numv, NULL, &numc, ct);
}
/* Retrieve variables only */
for(s=1;s<=numiis;s++)
{
XPRBgetiis(prob, &iisvar, &numv, NULL, NULL, s);
printf("IIS %d: %d variables ( ", s, numv);
if (numv>0)
{
for(i=0;i0)
{
for(i=0;i |
/********************************************************
BCL Example Problems
====================
file xbdlvriis2iso.c
````````````````````
Transportation problem (infeasible data).
Retrieving and printing IIS.
- Using Optimizer functions to retrieve detailed
IIS information including isolation rows/bounds -
(c) 2008 Fair Isaac Corporation
author: S.Heipcke, Jan. 2008, rev. Mar. 2011
********************************************************/
#include
#include
#include
#include "xprb.h"
#include "xprs.h"
#define NSupp 10 /* Number of suppliers */
#define NCust 7 /* Number of customers */
#define MaxArcs 100 /* Max. num. of non-zero cost values */
#define VANFILE XPRBDATAPATH "/delivery/ifvan.dat" /* Van data file */
#define COSTFILE XPRBDATAPATH "/delivery/cost.dat" /* Cost data file */
/****DATA****/
/* Supplier: London Luton B'ham Bristl Derby Stckpt York */
double SUPPLY[] = {140.0, 200.0, 50.0, 10.0, 400.0, 200.0, 20.0,
/* Supplier: Derby Soton Scnthp */
90.0, 30.0, 12.0};
/* Customer: London Livpol Doncst York Hull Manchr Shffld */
double DEMAND[] = {1230.3, 560.4, 117.1, 592.8, 310.0, 1247.0, 86.0};
double COST[NSupp][NCust]; /* Cost per supplier-customer pair */
double IFVAN[NSupp][NCust]; /* Non-zero if route uses vans instead
of lorries */
double VANCAP=40.0; /* Capacity on routes that use vans */
/***********************************************************************/
void moddelivery(XPRBprob prob)
{
XPRBctr ctr, CSupply[NSupp], CDemand[NCust];
int s,c,i;
XPRBvar x[NSupp][NCust];
int numv, numc, numiis, len, ncol, nrow, namelength;
double bnd, rhs;
char *vnames, *cnames;
int *viis,*ciis;
char **vindex,**cindex;
char *ctrtype = NULL;
char *bndtype = NULL;
double *duals = NULL;
double *rdcs = NULL;
char *isolationrows = NULL;
char *isolationbnds = NULL;
char *isotype[] = {"N/A", "No ", "Yes"};
XPRSprob op;
/****VARIABLES****/
for(s=0;snamelength) namelength=strlen(vindex[i]);
/* Retrieve constraint names */
XPRSgetintattrib(op, XPRS_ORIGINALROWS, &nrow);
XPRSgetnamelist(op, 1, NULL, 0, &len, 0, nrow-1);
cnames = (char *)malloc(len * sizeof(char));
cindex = (char **)malloc(nrow * sizeof(char *));
XPRSgetnamelist(op, 1, cnames, len, NULL, 0, nrow-1);
cindex[0]=cnames;
for(i=1; inamelength) namelength=strlen(cindex[i]);
/**** Retrieve detailed IIS info (incl. isolations) ****/
for(s=1;s<=numiis;s++)
{
XPRSgetiisdata(op, s, &numc, &numv, NULL, NULL, NULL, NULL,
NULL, NULL, NULL, NULL);
XPRSiisisolations(op, s); /* Find isolations */
ciis = (int *)malloc(numc * sizeof(int));
viis = (int *)malloc(numv * sizeof(int));
ctrtype = (char *)malloc(numc*sizeof(char));
bndtype = (char *)malloc(numv*sizeof(char));
duals = (double *)malloc(numc*sizeof(double));
rdcs = (double *)malloc(numv*sizeof(double));
isolationrows = (char *)malloc(numc*sizeof(char));
isolationbnds = (char *)malloc(numv*sizeof(char));
XPRSgetiisdata(op, s, &numc, &numv, ciis, viis, ctrtype, bndtype,
duals, rdcs, isolationrows, isolationbnds);
printf("IIS %d: %d variables, %d constraints\n", s, numv, numc);
printf(" %-*s Type Sense Bound Dual values In iso. \n", namelength, "Name");
if (numv>0)
{ /* Print all variables in the IIS */
for(i=0;i0)
{ /* Print all constraints in the IIS */
for(i=0;i |
/********************************************************
BCL Example Problems
====================
file xbdlvriis2rep.c
````````````````````
Transportation problem (infeasible data).
Repairing infeasibility.
- Using Optimizer functions -
(c) 2008 Fair Isaac Corporation
author: S.Heipcke, Jan. 2008, rev. Mar. 2011
********************************************************/
#include
#include
#include
#include "xprb.h"
#include "xprs.h"
#define NSupp 10 /* Number of suppliers */
#define NCust 7 /* Number of customers */
#define MaxArcs 100 /* Max. num. of non-zero cost values */
#define VANFILE XPRBDATAPATH "/delivery/ifvan.dat" /* Van data file */
#define COSTFILE XPRBDATAPATH "/delivery/cost.dat" /* Cost data file */
void printsolution(XPRBprob prob, int scode, XPRBvar x[][NCust]);
void printsolution2(XPRSprob op, int scode, XPRBvar x[][NCust]);
/****DATA****/
/* Supplier: London Luton B'ham Bristl Derby Stckpt York */
double SUPPLY[] = {140.0, 200.0, 50.0, 10.0, 400.0, 200.0, 20.0,
/* Supplier: Derby Soton Scnthp */
90.0, 30.0, 12.0};
/* Customer: London Livpol Doncst York Hull Manchr Shffld */
double DEMAND[] = {1230.3, 560.4, 117.1, 592.8, 310.0, 1247.0, 86.0};
double COST[NSupp][NCust]; /* Cost per supplier-customer pair */
double IFVAN[NSupp][NCust]; /* Non-zero if route uses vans instead
of lorries */
double VANCAP=40.0; /* Capacity on routes that use vans */
/***********************************************************************/
void moddelivery(XPRBprob prob)
{
XPRBctr ctr, CSupply[NSupp], CDemand[NCust];
int s,c;
XPRBvar x[NSupp][NCust];
int ncol, nrow, scode;
double *lrp, *grp, *lbp, *ubp;
XPRSprob op;
/****VARIABLES****/
for(s=0;s= rows)
ax + aux_var = b
ax + aux_var >= b
lbp:
x_i + aux_var >= l
ubp:
x_i - aux_var <= u
*/
/**** Simplified infeasibility repair:
specifying preferences per constraint/bound type ****/
printf("\n**** Repair infeasibility:\n");
XPRSrepairinfeas(op, &scode, 'c', 'o', ' ', 10, 9, 0, 20, 0.001);
printsolution2(op, scode, x); /* Print out the solution values */
/**** Weighted infeasibility repair:
specifying preferences for every constraint/bound separately ****/
XPRSgetintattrib(op, XPRS_ORIGINALCOLS, &ncol);
XPRSgetintattrib(op, XPRS_ORIGINALROWS, &nrow);
lrp = (double *)malloc(nrow*sizeof(double));
grp = (double *)malloc(nrow*sizeof(double));
lbp = (double *)malloc(ncol*sizeof(double));
ubp = (double *)malloc(ncol*sizeof(double));
memset(lrp, 0, nrow*sizeof(double));
memset(grp, 0, nrow*sizeof(double));
memset(lbp, 0, ncol*sizeof(double));
memset(ubp, 0, ncol*sizeof(double));
/* Relax bounds due to van capacity */
/* Repairweightedinfeas for upper bounds of concerned flow variables */
for(s=0; s0.01)
printf("%s:%g ", XPRBgetvarname(x[s][c]), XPRBgetsol(x[s][c]));
printf("\n");
printf("Violations:\n");
for(c=0; cSUPPLY[s]) printf(" Supplier %d: %g\n", s, dem-SUPPLY[s]);
}
for(s=0; s=0 && sol[XPRBgetcolnum(x[s][c])]>0.01)
printf("%s:%g ", XPRBgetvarname(x[s][c]), sol[XPRBgetcolnum(x[s][c])]);
printf("\n");
printf("Violations:\n");
for(c=0; c=0) sup+=sol[XPRBgetcolnum(x[s][c])];
if(sup=0) dem+=sol[XPRBgetcolnum(x[s][c])];
if(dem>SUPPLY[s]) printf(" Supplier %d: %g\n", s, dem-SUPPLY[s]);
}
for(s=0; s=0 &&
VANCAP |