/********************************************************/ /* 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 = 0,001; 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; /* Unit cost to store any product p */ double CRSTOCK = 1; /* 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