Initializing help system before first use

Irreducible Infeasible Set Search


Type: Programming
Rating: 4 (medium-difficult)
Description:

Anlaysing an infeasible problem by identifying an irreducible infeasible subset (IIS)

File(s): IISExample.cs
Data file(s): iisexample.mat


IISExample.cs
using System;
using System.IO;
using Optimizer;


namespace XPRSExamples
{
  class IISExample
  {
    public static void Main(string[] args)
    {
      XPRS.Init(); // Initialize license
      try
      {
        IISExample example = new IISExample();
        example.Run(0); // Run example in mode 0
        example.Run(1); // Run example in mode 1
      }
      finally
      {
        XPRS.Free();  // Release license
      }
    }

    public void Run_GetIISData(XPRSprob problem, int i)
    {
      int ncol, nrow;
      problem.GetIISData(i, out nrow, out ncol, null, null, null, null, null, null, null, null);
      int[] miisrow = new int[nrow];
      int[] miiscol = new int[ncol];
      char[] constrainttype = new char[nrow];
      char[] colbndtype = new char[ncol];
      double[] duals = new double[nrow];
      double[] rdcs = new double[ncol];
      char[] isolationrows = new char[nrow];
      char[] isolationcols = new char[ncol];
      problem.GetIISData(i, out nrow, out ncol, miisrow, miiscol, constrainttype, colbndtype, duals, rdcs, isolationrows, isolationcols);
    }


    public void Run_IISStatus(XPRSprob problem, int i)
    {
      int count;
      problem.IISStatus(out count, null, null, null, null);
      int[] rowsizes = new int[count + 1];
      int[] colsizes = new int[count + 1];
      double[] suminfeas = new double[count + 1];
      int[] numinfeas = new int[count + 1];
      problem.IISStatus(out count, rowsizes, colsizes, suminfeas, numinfeas);
    }

    public void Run(int iMode)
    {
      XPRSprob problem = new XPRSprob();

      // Configure logging
      problem.LPLog = 1;
      problem.AddMsgHandlerCallback(Console.Out);

      // Input problem
      problem.ReadProb(@"..\..\iisexample");

      // Solve problem
      problem.Presolve = -1;
      problem.ChgObjSense( ObjSense.Minimize );
      problem.LpOptimize();

      switch (iMode)
      {
        case 0:
          /* Get all iis at once then iterate through results. */
          problem.IISAll();
          for (int i = 1; i < problem.NumIIS; i++)
          {
            Run_GetIISData(problem, i);
            Run_IISStatus(problem, i);
            problem.WriteIIS(i, "iis_result" + i, 0);
          }
          break;

        case 1:
          int j = 0;
          /* Get the IIS one at a time */
          if (problem.FirstIIS(1)==0) {
            do
            {
              j++;
              Run_GetIISData(problem, j);
              Run_IISStatus(problem, j);
              problem.WriteIIS(j, "iis_result" + j, 0);
            } while (problem.NextIIS() == 0);
          }
          break;
      }

    }


  }

}