/******************************************************** Xpress-BCL C++ Example Problems =============================== file xbcoco.cxx ``````````````` Complete Coco Problem. Specify phase by PHASE parameter. Data input in the model, not via data files. (c) 2008-2023 Fair Isaac Corporation author: S.Heipcke, Jan. 2000, rev. Mar. 2011 ********************************************************/ #include #include "xprb_cpp.h" using namespace std; using namespace ::dashoptimization; #define PHASE 5 /* Phase = 3: Multi-period parameterised model; mines always open * Phase = 4: Mines may open/closed freely; when closed save 20000 per month * Phase = 5: Once closed always closed; larger saving */ #define NP 2 /* Number of products (p) */ #define NF 2 /* factories (f) */ #define NR 2 /* raw materials (r) */ #define NT 4 /* time periods (t) */ /****DATA****/ double REV[][NT] = /* Unit selling price of product p in period t */ {{400, 380, 405, 350}, {410, 397, 412, 397}}; double CMAK[][NF] = /* Unit cost to make product p at factory f */ {{150, 153}, { 75, 68}}; double CBUY[][NT] = /* 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[][NR] = /* Requirement by unit of prod. p for raw material r */ {{1.0, 0,5}, {1.3, 0,4}}; double MXSELL[][NT] = /* 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[][NF] = /* Initial product p stock level at factory f */ {{50, 100}, {50, 50}}; double RSTOCK0[][NF] = /* Initial raw material r stock level at factory f*/ {{100, 150}, { 50, 100}}; /***********************************************************************/ int main(int argc, char **argv) { XPRBvar make[NP][NF][NT], sell[NP][NF][NT], pstock[NP][NF][NT+1], buy[NR][NF][NT], rstock[NR][NF][NT+1], openm[NF][NT]; XPRBexpr lobj, lc; int p,f,r,t; XPRBprob pb("Coco"); /* Initialize a new problem in BCL */ /****VARIABLES****/ for(p=0;p