FICO
FICO Xpress Optimization Examples Repository
FICO Optimization Community FICO Xpress Optimization Home
Back to examples browserPrevious exampleNext example

Retrieving data from a Mosel model

Description
mmexset-cs: Using sets in Mosel (requires burglari.mos)
  • retrieve a set by its model name
  • get the set size
  • get first and last set element
  • get the name or index of a set element
mmexas-cs: Using arrays with index sets (requires trans.mos)
  • get indexing sets of an array
  • get array type
  • enumerate array entries in usual and transposed order
  • enumerate true array entries
mmexlst-cs: Using lists in Mosel (requires euler.mos and euler.dat)
  • retrieve a list by its model name
  • get the list size
  • enumerate the list elements
  • get value of list element
mmexrec-cs: Using records in Mosel (requires burglar_rec.mos and burglar_rec.dat)
  • retrieve an array of records (user type) by its model name
  • retrieve the record field information (field name, type, and number)
  • enumerate the array of records
  • for each array entry (record) get the value of all its fields
mmexprob-cs: Accessing problems and solution information with Mosel (requires blend2.mos)
  • export problem to a file (MPS or LP format)
  • get problem status
  • get objective function value
  • get primal/dual solution values, and constraint activity
Further explanation of this example: 'Mosel Library Reference .NET doc'

mmexdatacs.zip[download all files]

Source Files

Data Files





mmexas.cs

/********************************************************/
/*  Mosel Library Examples                              */
/*  ======================                              */
/*                                                      */
/*  file mmexas.cs                                      */
/*  ``````````````                                      */
/*  Example for the use of the Mosel libraries          */
/*  (using arrays with index sets: different ways       */
/*   of enumerating arrays)                             */
/*                                                      */
/*  (c) 2008 Fair Isaac Corporation                     */
/*      author: J.Farmer & S. Heipcke                   */
/********************************************************/


using System;
using System.IO;
using Mosel;

namespace mmexas {
  public class mmexasClass {
    /// <summary>
    /// Main entry point for the application
    /// </summary>
    [STAThread]
    static void Main(string[] args) {
      XPRM mosel;
      XPRMModel mod;
      XPRMArray varr;
      XPRMSet[] sets;
      XPRMValue[] vindex;
      int dim;

      // Initialise Mosel
      mosel = XPRM.Init();
      // Set Mosel work directory to folder containing our example source code
      mosel.WorkDir = Directory.GetParent(System.Reflection.Assembly.GetExecutingAssembly().Location).FullName;
      // Compile and load a model from a file
      mod = mosel.CompileAndLoad("Models/trans.mos");
      // Run the model;
      mod.Run();


      // Get the model object named 'x'
      // It must be an array
      varr = (XPRMArray) mod.FindIdentifier("x");
      // Get the number of dimensions of the array
      dim = varr.Dim;
      // Get the indexing sets
      sets = varr.IndexSets;

      // We could use varr.ToString() to print out a summary of the
      // array contents, but instead we'll demonstrate how to iterate
      // over the array contents directly

      Console.WriteLine("\n1. Logic entries:");
      // Get the first entry of varr
      foreach(int[] indices in varr.Indices) {
        Console.Write("x(");
        // Get the values for this index
        vindex = varr.DereferenceIndex(indices);
        // Now, output them.  Note that we could call the utility method
        // varr.IndexToString(indices) instead of this and the previous
        // line
        for (int i=0;i<dim-1;i++)
          Console.Write(vindex[i] + ",");
        Console.Write(vindex[dim-1] + "), ");
      };

      // Now enumerate over the true entries - in a dense array this would
      // be no different from the previous method, so skip it in this case.
      if (varr.IsDynamic) {
        Console.WriteLine("\n\n2. True entries:");
        foreach(int[] indices in varr.TEIndices) {
          Console.Write("x(");
          vindex = varr.DereferenceIndex(indices);
          for (int i=0;i<dim-1;i++)
            Console.Write(vindex[i] + ",");
          Console.Write(vindex[dim-1] + "), ");
        };
      }
      Console.WriteLine();

      mod.Reset();
    }
  }
 }


Back to examples browserPrevious exampleNext example