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





ExProb.vb

Imports System.IO
Imports Mosel

' Example of accessing problems and solution information

Module ExProb
    Public Sub RunExProb(ByVal Log As TextWriter)
        Dim mosel As XPRM
        Dim model As XPRMModel
        Dim varr, darr As XPRMArray
        Dim lgrade As XPRMLinCtr

        ' 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 model
        model = mosel.CompileAndLoad("Models/blend2.mos")
        ' Run the model (it includes optimization)
        model.Run()

        ' Export the problem to a file in LP format (maximization)
        model.ExportProblem("p", "blend")

        ' Test whether optimal is found
        If (model.ProblemStatus = XPRMProblemStatus.PB_OPTIMAL) Then
            Log.WriteLine("Solution is optimal.")
        End If

        ' Print out the objective function value
        Log.WriteLine("Objective value: {0}", model.ObjectiveValue)

        ' Get the model objects 'x' and 'COST' (both arrays)
        varr = model.FindIdentifier("x")
        darr = model.FindIdentifier("COST")

        ' For each entry in array var, display solution value and corresponding
        ' cost
        Dim indices() As Integer
        For Each indices In varr.Indices
            Log.WriteLine( _
                "x{0}={1} (COST: {2})", _
                varr.IndexToString(indices), _
                varr.Get(indices).AsMPVar.Solution, _
                darr.GetAsReal(indices) _
            )
        Next

        ' Get the model object 'LoGrade'
        ' It must be a reference to a linear constraint
        lgrade = CType(model.FindIdentifier("LoGrade"), XPRMReference).Value.AsLinCtr
        Log.WriteLine( _
            "LoGrade: activity={0}, dual={1}", _
            lgrade.Activity, _
            lgrade.Dual _
        )

        model.Reset()
    End Sub
End Module

Back to examples browser