/***************************************************************************************\
* Name: MipSolEnum.cs Fair Isaac 13/06/2008 *
* Purpose: 10 best solutions with the MIP solution enumerator *
* Description: We take the power generation problem stored in hpw15.mat which seeks to *
* optimise the operating pattern of a group of electricity generators. We *
* run the MIP solution enumerator on the problem using the default setup *
* obtaining the best 10 solutions. The best 10 solutions are stored to a *
* MIP solution pool. The solutions' objectives and solution values are *
* printed to screen. *
* Input: hpw15.mat *
\***************************************************************************************/
using System;
using System.IO;
using Optimizer;
namespace XPRSExamples
{
class MipSolEnum
{
static void Main(string[] args)
{
XPRS.Init();
XPRSprob prob = new XPRSprob();
prob.AddMsgHandlerCallback(Console.Out);
XPRSmipsolpool msp = new XPRSmipsolpool();
XPRSmipsolenum mse = new XPRSmipsolenum();
prob.MPSFormat = -1;
prob.ReadProb(@"..\..\..\data\hpw15");
int nCols = prob.Cols;
/* Avoid duplicated solutions from heuristics. */
msp.DuplicateSolutionsPolicy = 3;
/* Disable dual reductions to prevent dominated solutions from */
/* being presolved away. */
prob.MIPDualReductions = 2;
/* Run the enumeration */
int nMaxSols = 10;
mse.Minim(prob, msp, XPRSdefaultMipSolEnumHandler.GetDefaultHandlerCallback(), null, ref nMaxSols);
/* Print out the solutions found */
int nSols = mse.Solutions;
for (int i = 1; i <= nSols; i++)
{
int[] iSolutionId = new int[1];
double dObj;
int nSols2, nReturnedSolIds, solutionIdStatus;
mse.GetSolList((int)XPRSattribute.Mse_Metric_MipObject, i, i, iSolutionId, out nReturnedSolIds, out nSols2);
mse.GetSolMetric(iSolutionId[0], out solutionIdStatus, (int)XPRSattribute.Mse_Metric_MipObject, out dObj);
Console.WriteLine("--------\n" + i + " = " + dObj);
for (int j = 0; j < nCols; j++)
{
double[] dSol = new double[1];
int nValuesReturned;
msp.GetSol(iSolutionId[0], out solutionIdStatus, dSol, j, j, out nValuesReturned);
Console.WriteLine(j + " = " + dSol[0]);
}
}
XPRS.Free();
}
}
}
|