| /********************************************************
  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 |