/********************************************************/
/* Xpress-BCL C# Example Problems */
/* ============================== */
/* */
/* file xbfixbv.cs */
/* ``````````````` */
/* Example for the use of Xpress-BCL */
/* (Using the complete Coco Problem, as in xbcoco.cxx, */
/* this program implements a binary fixing heuristic) */
/* */
/* (c) 2008 Fair Isaac Corporation */
/* authors: S.Heipcke, D.Brett. */
/********************************************************/
using System;
using System.Text;
using System.IO;
using Optimizer;
using BCL;
namespace Examples
{
public class TestAdvFixBV
{
const double TOL = 5.0E-4;
const int PHASE = 5;
/* Phase = 4: Mines may open/closed freely; when closed save 20000 per month
* Phase = 5: Once closed always closed; larger saving */
const int NP = 2; /* Number of products (p) */
const int NF = 2; /* factories (f) */
const int NR = 2; /* raw materials (r) */
const int NT = 4; /* time periods (t) */
/****DATA****/
double[,] REV = /* Unit selling price of product p in period t */
{{400, 380, 405, 350},
{410, 397, 412, 397}};
double[,] CMAK = /* Unit cost to make product p at factory f */
{{150, 153},
{ 75, 68}};
double[,] CBUY = /* Unit cost to buy raw material r in period t */
{{100, 98, 97, 100},
{200, 195, 198, 200}};
double[] COPEN = /* Fixed cost of factory f being open for one period */
{50000, 63000};
double CPSTOCK = 2.0; /* Unit cost to store any product p */
double CRSTOCK = 1.0; /* Unit cost to store any raw material r */
double[,] REQ = /* Requirement by unit of prod. p for raw material r */
{{1.0, 0.5},
{1.3, 0.4}};
double[,] MXSELL = /* Max. amount of p that can be sold in period t */
{{650, 600, 500, 400},
{600, 500, 300, 250}};
double[] MXMAKE = /* Max. amount factory f can make over all products */
{400, 500};
double MXRSTOCK = 300; /* Max. amount of r that can be stored each f and t */
double[,] PSTOCK0 = /* Initial product p stock level at factory f */
{{50, 100},
{50, 50}};
double[,] RSTOCK0 = /* Initial raw material r stock level at factory f*/
{{100, 150},
{ 50, 100}};
XPRBprob pb = new XPRBprob("Coco"); /* Initialize a new problem in BCL */
/****VARIABLES****/
XPRBvar[,] openm = new XPRBvar[NF,NT];
/***********************************************************************/
void modCoco()
{
XPRBvar[,,] make = new XPRBvar[NP,NF,NT];
XPRBvar[,,] sell = new XPRBvar[NP,NF,NT];
XPRBvar[,,] pstock = new XPRBvar[NP,NF,NT+1];
XPRBvar[,,] buy = new XPRBvar[NR,NF,NT];
XPRBvar[,,] rstock = new XPRBvar[NR,NF,NT+1];
XPRBexpr lobj, lc;
int p,f,r,t;
/****VARIABLES****/
for(p=0;p |