/********************************************************
Xpress-BCL C++ Example Problems
===============================
file xbworks.cxx
````````````````
Workshop planning example.
(c) 2008 Fair Isaac Corporation
author: S.Heipcke, Jan. 2000, rev. Mar. 2011
********************************************************/
#include <iostream>
#include "xprb_cpp.h"
using namespace std;
using namespace ::dashoptimization;
#define NProd 2 /* Number of products */
#define NShop 3 /* Number of workshops */
#define WMAX 40 /* Maximum weekly working time */
/****DATA****/
int DUR[][NShop] = {{5, 9, 7}, /* Duration of product p on shop s */
{10, 2, 5}};
int RES[] = {10, 8}; /* Man hours per unit */
int PRICE[] = {108, 84}; /* Selling price per unit */
/***********************************************************************/
int main(int argc, char **argv)
{
int p,s;
XPRBexpr l;
XPRBvar x[NProd]; /* Amount of product p */
XPRBprob pb("Workshop"); /* Initialize a new problem in BCL */
/****VARIABLES****/
for(p=0;p<NProd;p++) x[p] = pb.newVar("x");
/****OBJECTIVE****/
for(p=0;p<NProd;p++)
l += (PRICE[p]-5*RES[p])*x[p];
pb.setObj(pb.newCtr("OBJ",l)); /* Set obj. function: maximize benefit */
/****CONSTRAINTS****/
for(s=0;s<NShop;s++) /* Limit on weekly working hours */
{
l = 0;
for(p=0;p<NProd;p++) l += DUR[p][s]*x[p];
pb.newCtr("ResMax",l <= WMAX);
}
/****SOLVING + OUTPUT****/
pb.setSense(XPRB_MAXIM);
pb.lpOptimize(""); /* Solve the LP-problem */
cout << "Objective: " << pb.getObjVal() << endl; /* Get objective value */
for(p=0;p<NProd;p++) /* Print the solution values */
cout << x[p].getName() << ":" << x[p].getSol() << " ";
cout << endl;
return 0;
}
|
/********************************************************
Xpress-BCL C++ Example Problems
===============================
file xbworkrng.cxx
``````````````````
Workshop planning example.
Test ranges and number printing format.
(c) 2008 Fair Isaac Corporation
author: S.Heipcke, 2003, rev. Mar. 2011
********************************************************/
#include <iostream>
#include "xprb_cpp.h"
using namespace std;
using namespace ::dashoptimization;
#define NProd 2 /* Number of products */
#define NShop 3 /* Number of workshops */
#define WMAX 40 /* Maximum weekly working time */
/****DATA****/
int DUR[][NShop] = {{5, 9, 7}, /* Duration of product p on shop s */
{10, 2, 5}};
int RES[] = {10, 8}; /* Man hours per unit */
int PRICE[] = {108, 84}; /* Selling price per unit */
/***********************************************************************/
int main(int argc, char **argv)
{
int p,s;
XPRBexpr l;
XPRBvar x[NProd]; /* Amount of product p */
XPRBprob pb("Workshop"); /* Initialize a new problem in BCL */
XPRBctr c[NShop];
/****VARIABLES****/
for(p=0;p<NProd;p++) x[p] = pb.newVar("x");
/****OBJECTIVE****/
for(p=0;p<NProd;p++)
l += (PRICE[p]-5*RES[p])*x[p];
pb.setObj(pb.newCtr("OBJ",l)); /* Set obj. function: maximize benefit */
/****CONSTRAINTS****/
for(s=0;s<NShop;s++) /* Limit on weekly working hours */
{
l = 0;
for(p=0;p<NProd;p++) l += DUR[p][s]*x[p];
c[s] = pb.newCtr("ResMax",l <= WMAX);
}
/****SOLVING + OUTPUT****/
pb.setRealFmt("%4.2e");
for(p=0;p<NProd;p++)
{ x[p].print(); cout << " "; }
cout << endl;
pb.setSense(XPRB_MAXIM);
pb.lpOptimize(""); /* Solve the LP-problem */
cout << "Objective: " << pb.getObjVal() << endl; /* Get objective value */
pb.setRealFmt("%g, ");
for(p=0;p<NProd;p++) /* Print the solution values */
x[p].print();
cout << endl;
pb.setRealFmt("%8.4f");
pb.print();
/* Row ranges */
cout << "Ctr: Lower activity, Upper activity, Unit cost DN, Unit cost UP" << endl;
for(s=0;s<NShop;s++)
{
cout << c[s].getName() << ": " << c[s].getRNG(XPRB_LOACT) << ", ";
cout << c[s].getRNG(XPRB_UPACT) << ", " << c[s].getRNG(XPRB_UDN);
cout << ", " << c[s].getRNG(XPRB_UUP) << endl;
}
/* Column ranges */
cout << "Var: Lower activity, Upper activity, Unit cost DN, Unit cost UP, Lower profit, Upper profit" << endl;
for(p=0;p<NProd;p++)
{
cout << x[p].getName() << ": " << x[p].getRNG(XPRB_LOACT) << ", ";
cout << x[p].getRNG(XPRB_UPACT) << ", " << x[p].getRNG(XPRB_UDN) << ", ";
cout << x[p].getRNG(XPRB_UUP) << ", " << x[p].getRNG(XPRB_LCOST) << ", ";
cout << x[p].getRNG(XPRB_UCOST) << endl;
}
return 0;
}
|