Retrieving data from a Mosel model
|
|
Type: | Programming |
Rating: | 3 (intermediate) |
Description: | ExSet.vb: Using sets in Mosel (requires burglari.bim)
These .vb files can be run from the VB.NET project Mosel-VB.NET.vbproj (required auxiliary files: AssemblyInfo.vb, frmMain.vb, frmMain.resx, OptimizerLog.vb). |
File(s): | ExSet.vb, ExAs.vb, ExProb.vb |
Data file(s): | burglari.mos, trans.mos, blend2.mos |
|
ExSet.vb |
Imports System.IO Imports Mosel ' Example of accessing sets in Mosel Module ExSet Public Sub RunExSet(ByVal Log As TextWriter) Dim mosel As XPRM Dim model As XPRMModel Dim mySet As XPRMSet Dim first, last, i As Integer ' Initialise Mosel mosel = XPRM.Init ' Load a BIM file model = mosel.LoadModel("Models/burglari.bim") ' And run it model.Run() ' Get the model object named 'ITEMS' ' (it must be a set) mySet = model.FindIdentifier("ITEMS") If (Not mySet.IsEmpty) Then ' Items in a set are indexed by numbers ' So get the first and last indexes first = mySet.FirstIndex last = mySet.LastIndex Log.WriteLine("Elements of set ITEMS:") For i = first To last Log.Write(" {0}, ", mySet.GetAsString(i)) Next Log.WriteLine() ' We've written this out explicitly to demonstrate set access, but the ' set actually knows how to output itself. Uncomment the following line ' to see this in action ' Log.WriteLine(mySet.ToString) If (mySet.GetIndex("CD player") < 0) Then Log.WriteLine("'CD player' is not contained in 'ITEMS'") End If End If End Sub End Module |
ExAs.vb |
Imports System.IO Imports Mosel ' Example of using arrays with index sets; different ways of enumerating arrays Module ExAs Public Sub RunExAs(ByVal Log As TextWriter) Dim mosel As XPRM Dim model As XPRMModel Dim varr As XPRMArray Dim sets() As XPRMSet Dim vindex() As XPRMValue Dim indices() As Integer Dim dimensions As Integer Dim i As Integer ' Initialise Mosel mosel = XPRM.Init ' Load a BIM file model = mosel.LoadModel("Models/trans.bim") ' Run the model model.Run() ' Get the model object named 'x' ' It must be an array varr = model.FindIdentifier("x") ' Get the number of dimensions of the array dimensions = varr.Dim ' Get the indexing sets sets = varr.IndexSets ' We could use varr.ToString to obtain a summary of the array contents, ' but instead we'll demonstrate how to interate over the array's content ' directly Log.WriteLine("1. Logic entries:") ' Get the first entry of varr For Each indices In varr.Indices Log.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 doing all this, but again ' this wouldn't be such a useful demonstration If (dimensions > 1) Then For i = 0 To dimensions - 2 Log.Write(vindex(i).AsString & ",") Next End If Log.Write(vindex(dimensions - 1).AsString & "), ") Next Log.WriteLine() ' Now enumerate over the true entries - in a dense array this would ' be no different from the previous demonstration, so only do it for ' a dynamic array If (varr.IsDynamic) Then Log.WriteLine("2. True entries:") For Each indices In varr.TEIndices ' Functionally the same as above, but this time we'll demonstrate ' using IndexToStringrasExAs Log.Write("x" & varr.IndexToString(indices) & ", ") Next End If Log.WriteLine() model.Reset() End Sub End Module |
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 ' Load a BIM file model = mosel.LoadModel("Models/blend2.bim") ' 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 |
© 2001-2019 Fair Isaac Corporation. All rights reserved. This documentation is the property of Fair Isaac Corporation (“FICO”). Receipt or possession of this documentation does not convey rights to disclose, reproduce, make derivative works, use, or allow others to use it except solely for internal evaluation purposes to determine whether to purchase a license to the software described in this documentation, or as otherwise set forth in a written software license agreement between you and FICO (or a FICO affiliate). Use of this documentation and the software described in it must conform strictly to the foregoing permitted uses, and no other use is permitted.