/********************************************************/
/* Xpress-BCL C# Example Problems */
/* ============================== */
/* */
/* file xbworks.cs */
/* ``````````````` */
/* Example for the use of Xpress-BCL */
/* (Workshop planning example from XPRESS-MP tutorial) */
/* */
/* (c) 2008 Fair Isaac Corporation */
/* authors: S.Heipcke, D.Brett. */
/********************************************************/
using System;
using System.Text;
using System.IO;
using BCL;
namespace Examples
{
public class TestWorkshop
{
const int NProd = 2; /* Number of products */
const int NShop = 3; /* Number of workshops */
const int WMAX = 40; /* Maximum weekly working time */
/****DATA****/
int[,] DUR = {{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 */
/***********************************************************************/
public static void Main()
{
XPRB.init();
int p,s;
XPRBexpr l = new XPRBexpr();
XPRBvar[] x = new XPRBvar[NProd]; /* Amount of product p */
XPRBprob pb = new XPRBprob("Workshop"); /* Initialize a new problem in BCL */
TestWorkshop TestInstance = new TestWorkshop();
/****VARIABLES****/
for(p=0;p<NProd;p++) x[p] = pb.newVar("x");
/****OBJECTIVE****/
for(p=0;p<NProd;p++)
l += (TestInstance.PRICE[p] - 5 * TestInstance.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 = new XPRBexpr();
for (p = 0; p < NProd; p++) l += TestInstance.DUR[p,s] * x[p];
pb.newCtr("ResMax",l <= WMAX);
}
/****SOLVING + OUTPUT****/
pb.setSense(BCLconstant.XPRB_MAXIM);
pb.lpOptimize();
System.Console.WriteLine("Objective: " + pb.getObjVal()); /* Get objective value */
for(p=0;p<NProd;p++) /* Print the solution values */
System.Console.Write(x[p].getName() + ":" + x[p].getSol() + " ");
System.Console.WriteLine();;
return;
}
}
} |
/********************************************************
Xpress-BCL C# Example Problems
==============================
file xbworkrng.cs
`````````````````
Workshop planning example.
Test ranges and number printing format.
(c) 2008 Fair Isaac Corporation
authors: S.Heipcke, D.Brett.
********************************************************/
using System;
using System.Text;
using System.IO;
using BCL;
namespace Examples
{
public class TestWorkshopRange
{
const int NProd = 2; /* Number of products */
const int NShop = 3; /* Number of workshops */
const int WMAX = 40; /* Maximum weekly working time */
/****DATA****/
int[,] DUR = {{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 */
/********************************************************************/
public static void Main()
{
XPRB.init();
int p,s;
XPRBexpr l;
/* Amount of product p */
XPRBvar[] x = new XPRBvar[NProd];
/* Initialize a new problem in BCL */
XPRBprob pb = new XPRBprob("Workshop");
XPRBctr[] c = new XPRBctr[NShop];
TestWorkshopRange TestInstance = new TestWorkshopRange();
/****VARIABLES****/
for(p=0;p<NProd;p++) x[p] = pb.newVar("x");
/****OBJECTIVE****/
l = new XPRBexpr();
for(p=0;p<NProd;p++)
l += (TestInstance.PRICE[p] - 5 * TestInstance.RES[p]) * x[p];
/* Set obj. function: maximize benefit */
pb.setObj(pb.newCtr("OBJ",l));
/****CONSTRAINTS****/
/* Limit on weekly working hours */
for(s=0;s<NShop;s++)
{
l = new XPRBexpr(0);
for (p = 0; p < NProd; p++) l += TestInstance.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(); System.Console.Write(" "); }
System.Console.WriteLine();
/* Solve the LP-problem */
pb.setSense(BCLconstant.XPRB_MAXIM);
pb.lpOptimize();
/* Get objective value */
System.Console.WriteLine("Objective: " + pb.getObjVal());
pb.setRealFmt("%g, ");
for(p=0;p<NProd;p++) /* Print the solution values */
x[p].print();
System.Console.WriteLine();
pb.setRealFmt("%8.4f");
pb.print();
/* Row ranges */
System.Console.WriteLine("Ctr: Lower activity, Upper activity, " +
"Unit cost DN, Unit cost UP");
for(s=0;s<NShop;s++)
{
System.Console.Write(c[s].getName() + ": " +
c[s].getRNG(BCLconstant.XPRB_LOACT) + ", ");
System.Console.Write(c[s].getRNG(BCLconstant.XPRB_UPACT) +
", " + c[s].getRNG(BCLconstant.XPRB_UDN));
System.Console.WriteLine(", " +
c[s].getRNG(BCLconstant.XPRB_UUP));
}
/* Column ranges */
System.Console.WriteLine("Var: Lower activity, Upper activity, " +
"Unit cost DN, Unit cost UP, Lower profit, Upper profit");
for(p=0;p<NProd;p++)
{
System.Console.Write(x[p].getName() + ": " +
x[p].getRNG(BCLconstant.XPRB_LOACT) + ", ");
System.Console.Write(x[p].getRNG(BCLconstant.XPRB_UPACT) + ", "
+ x[p].getRNG(BCLconstant.XPRB_UDN) + ", ");
System.Console.Write(x[p].getRNG(BCLconstant.XPRB_UUP) + ", " +
x[p].getRNG(BCLconstant.XPRB_LCOST) + ", ");
System.Console.WriteLine(x[p].getRNG(BCLconstant.XPRB_UCOST));
}
return;
}
}
} |