FICO
FICO Xpress Optimization Examples Repository
FICO Optimization Community FICO Xpress Optimization Home
Back to examples browser

Working with models, data and dynamic libraries in Mosel

Description
ExSet.vb: 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
ExAs.vb: 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
ExProb.vb: 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
ExLib.vb: Working with models and accessing dynamic libraries in Mosel
  • load and unload BIM models
  • run a model in Mosel
  • display information about loaded models
  • display information about additional libraries required by the loaded models
DispMod.vb: Display the contents of a model; the information is read from a bim file
  • display run-time parameters, requirements, symbols, package/module dependencies, annotations
DispDso.vb: Display the contents of a module
  • display constants, types, control paramters, subroutines, I/O drivers
ExDrvs*.cb.: Use I/O drivers to handle Mosel output with a callback function, compile a model from memory to memory, load a bim file from memory, initialise arrays in the Model program from .NET objects and retrieve information from the model through memory.
  • ExDrvsCallback.vb: using 'dotnet:' I/O driver for data exchange via callbacks
  • ExDrvsRaw.vb: using 'dotnetraw:' I/O driver for data exchange in memory
  • ExDrvsStream.vb: using 'dotnetstream:' I/O driver working with streams for data exchange in memory
These .vb files can be run from the VB.NET project Mosel-VB.NET.vbproj (required auxiliary files: frmMain.vb, frmMain.resx, OptimizerLog.vb).

mmexdatavb.zip[download all files]

Source Files

Data Files





ExDrvsStream.vb

Imports System.IO
Imports Mosel

' Example for use of Mosel libraries (using 'dotnetstream' IOdriver for data exchange)

Module ExDrvsStream
    ' Defines the Mosel source of our model
    Private source_of_model As String = _
      "model Blend" & vbCrLf & _
      "uses ""mmxprs""" & vbCrLf & _
      "public declarations" & vbCrLf & _
      " ROres = 1..2" & vbCrLf & _
      " REV = 125" & vbCrLf & _
      " MINGRADE = 4" & vbCrLf & _
      " MAXGRADE = 5" & vbCrLf & _
      " COST: array(ROres) of real" & vbCrLf & _
      " AVAIL: array(ROres) of real" & vbCrLf & _
      " GRADE: array(ROres) of real" & vbCrLf & _
      " x: array(ROres) of mpvar" & vbCrLf & _
      "end-declarations" & vbCrLf & _
      "" & vbCrLf & _
      "initializations from 'dotnetstream:BlendIni'" & vbCrLf & _
      " COST" & vbCrLf & _
      " AVAIL" & vbCrLf & _
      " GRADE" & vbCrLf & _
      "end-initializations" & vbCrLf & _
      vbCrLf & _
      "Profit:= sum(o in ROres) (REV-COST(o))*x(o)" & vbCrLf & _
      "LoGrade:= sum(o in ROres) (GRADE(o)-MINGRADE) * x(o) >= 0" & vbCrLf & _
      "UpGrade:= sum(o in ROres) (MAXGRADE-GRADE(o)) * x(o) >= 0" & vbCrLf & _
      "" & vbCrLf & _
      "forall(o in ROres) x(o)<=AVAIL(o)" & vbCrLf & _
      "" & vbCrLf & _
      "maximize(Profit)" & vbCrLf & _
      "writeln(""Objective:"", getobjval)" & vbCrLf & _
      "end-model"

    ' Defines the initialisation data for our model
    Dim init_data As String = _
      "COST: [85 93]" & vbCrLf & _
      "AVAIL: [60 45]" & vbCrLf & _
      "GRADE: [2.1 6.3]" & vbCrLf


    Public Sub RunExDrvsStream(ByVal Log As TextWriter)
        ' Initialize Mosel
        Dim moselRT As XPRM = XPRM.Init

        ' Use a StringReader to compile and load the Mosel model directly from a .NET string
        Log.WriteLine("Compiling from memory...")
        Dim modelSourceReader As New StringReader(source_of_model)
        Dim model As XPRMModel = moselRT.CompileAndLoad(modelSourceReader)

        ' Bind a stream to read the initialization data to the name 'BlendIni'
        model.Bind("BlendIni", New StringReader(init_data))

        ' Send the model's output directly to the log
        model.SetDefaultStream(XPRMStreamType.F_OUTPUT_LINEBUF, Log)

        ' And finally run the model
        model.Run()
    End Sub

End Module

Back to examples browser