/********************************************************
Xpress-BCL C# Example Problems
==============================
file xbpurch.cs
```````````````
Purchasing problem using SOS-2.
(c) 2008 Fair Isaac Corporation
authors: S.Heipcke, D.Brett.
********************************************************/
/* WARNING. This model is not for the novice, but it does contain many *
* useful ideas. *
* The formulation is tricky because the discounts are all-quantity, *
* so the graph of cost against quantity purchased is discontinuous. *
* To maintain sanity in the special ordered set formulation, we must *
* coarsen the discontinuity by stopping purchases just at the break *
* point. */
using System;
using System.Text;
using System.IO;
using BCL;
namespace Examples
{
public class TestProduction
{
//Define XPRBDATAPATH to whatever folder you wish.
const string XPRBDATAPATH = "../../data";
string PARAMSFILE = XPRBDATAPATH + "/purchase/params.dat";
string MAXPERCFILE = XPRBDATAPATH + "/purchase/maxperc.dat";
string REQFILE = XPRBDATAPATH + "/purchase/required.dat";
string PRICEFILE = XPRBDATAPATH + "/purchase/pricebk.dat";
/****TABLES****/
int NS; /* Number of suppliers */
int NB; /* Number of price breaks */
int NB2; /* Useful parameter */
double[,] UC; /* Unit cost */
double[,] BR; /* Breakpoints (quantities at which unit
cost changes) */
double[,] X; /* Coarsened break points */
double[,] C; /* Total cost at break points */
double[] DELTA; /* Coarsening factors */
double[] MAXPERC; /* Maximum percentage from each supplier */
double REQ; /* Total quantity required */
double delta = 0.10; /* Base coarsening factor */
/* Initialize a new problem in BCL */
XPRBprob p = new XPRBprob("Purchase");
public static void Main()
{
System.Console.WriteLine("Started Production Test.\n");
XPRB.init();
TestProduction InitClassInstance = new TestProduction();
/* Data input from file */
InitClassInstance.readData();
/* Formulate and solve the problem */
InitClassInstance.modPurchase();
return;
}
/*********************************************************************/
public void modPurchase()
{
XPRBexpr lobj, lc;
XPRBexpr[] lr;
int s,b;
XPRBvar[] x;
XPRBvar[,] lam;
/****VARIABLES****/
x = new XPRBvar[NS]; /* Quantity to purchase from supplier s */
for(s=0;s= REQ);
/****BOUNDS****/
/* No more than the maximum percentage from each supplier */
for(s=0;s |