Evaluation steps for Scenario 1
Tool for model development: | Mosel |
---|---|
Type of problem: | Any |
Tool for model deployment: | (a) Xpress Insight |
(b) Mosel Libraries (C++/C, Java, VBA, .NET) |
This scenario uses examples from the ``Getting Started with Xpress'' document that can be found in directory xpressmp\examples\getting_started\Mosel (where xpressmp is the installation directory of Xpress).
Launch Xpress Workbench
Xpress Workbench is the visual development environment for Windows. To run Xpress Workbench, double click on the Xpress Workbench icon on your desktop, or select Start » Programs » FICO » Xpress » Xpress Workbench. Otherwise, you may also start up Workbench by typing xpworkbench in a DOS window or by double clicking on a model file (file with extension .mos).
Open Mosel model in Xpress Workbench
Locate the directory containing the evaluation examples in your Xpress installation (xpressmp\examples\getting_started\Mosel) and open the file foliolp.mos by double clicking on its name in the file browser. Alternatively, if you have already started Xpress Workbench select Open a file in the Xpress Workbench entry screen and browse to select the file foliolp.mos. The model ``Portfolio optimization with LP'' will open in the central pane (the Workbench editor). This model seeks an optimal investment portfolio using ten securities (shares), subject to some risk and regional constraints. The comments in the code (text following the exclamation mark `!') describe the meaning of the different statements. Note that RET is an array of real values representing the expected return of the shares. The decision variables in the model are given by the array frac of type mpvar. The procedure maximize calls Xpress Optimizer to maximize the objective function. The code also contains statements to print the optimal solution and solution values.

Figure 1: Workbench window after a model run
Further information
- For more information on the model formulation for this example see: ``Getting Started with Xpress'', Chapter 2: `Building models'.
- For more information on the Mosel representation of the model for this example see: ``Getting Started with Xpress'', 3.2 `LP model'.
- For more information on Mosel and other Mosel examples see ``Xpress Mosel User Guide'', Chapter 1: `Getting started with Mosel', 1.1 `Entering a model'.
- New users of Mosel may also wish to take a look at the Appendix `Good modeling practice with Mosel' of the ``Xpress Mosel User Guide''.
Compile and run the Mosel model
To execute a Mosel model select menu Run or click on the green 'Run' icon next to the dropdown file selection box at the top (make sure the desired filename displays in the box). The output log and the status of the model execution are shown at the bottom of the Xpress Workbench screen (see Figure Workbench window after a model run), and it should read Mosel exited with code 0 and Process exited with code: 0 at the end of the display. If Mosel detects any errors during compilation or model execution these will equally be reported in this logging window.
While developing a model you may wish to just compile a model without running it with a data instance, e.g. to check for syntax errors. Select menu entry Run » Build to compile the selected model. Upon successful compilation you will see the message Created foliolp.bim in the logging window at the bottom and the compiled file appears in the workspace file listing, otherwise the log reports any errors that have occurred.
Now select the Debug icon to run the model once more and open the Debugger pane at the right. The model execution will be suspended just before its termination, allowing you to inspect the values of the model objects that have been populated by the model execution (see Figure Workbench window with debugger display). In debug mode you can also set breakpoints or execute the Mosel model step-by-step to analyse its behaviour.

Figure 2: Workbench window with debugger display
Further information
- For more on compilation and compilation errors see: ``Getting Started with Xpress'', 3.3. `Correcting errors and debugging a model'.
- For more on Xpress Workbench see the ``Xpress Workbench User Guide''.
String indices: The model data and solution are more easily understandable when using string indices. Open and run model foliolps.mos. Explore the model output and the entities in the debugger display.
Further information
- For more information on running the Mosel model for this example see: ``Getting Started with Xpress'', 3.4. `Solving and viewing the solution'.
- For more information on string indices for this example see: ``Getting Started with Xpress'', 3.4.1. `String indices', and also ``Xpress Mosel User Guide'', 2.1.3. `The burglar problem revisited'.
Work with data in Mosel
In Mosel models you may work with a large variety of data sources, ranging from simple text files and other file formats such as databases to data exchanged in memory between a Mosel model and a host application or between several concurrent Mosel models. We show here the most frequent cases, namely text files, spreadsheets, and database access via ODBC.
Text files
Open and run model foliodata.mos. Note that this model has a parameters block and an initializations from block. The parameters include the data input file, output file, and other model constants. Parameters can be reset at run time, and they are particularly important when a model is deployed within a business application. The initializations from block reads data from the file folio.dat. This file has a Mosel-specific format that can be seen by opening it in Xpress Workbench by selecting menu File » Open... or double click on the filename in the directory contents listing to the left of the main editor window. The index sets and data arrays in the model are created dynamically based on the data in the input file. Finally this model directs the solution output to an external free-format file result.dat by calling the procedures fopen and fclose.
Further information
For more information on working with data and using parameters in Mosel see: ``Getting Started with Xpress'', Chapter 4: `Working with data'.
Spreadsheets and databases
Open and run model folioexcel.mos. The initializations from block in this program reads data from an MS Excel spreadsheet. The model is accompanied by data in the file folio.xls. Note that this example changes the sets RISK and NA into arrays of Booleans to receive the data from the file. The initializations to block outputs the problem results back to the spreadsheet. If the Excel file is open when writing to it the output data does not get saved, letting you choose whether to keep the results or not. Repeated model executions will overwrite previous output in the target range.
A second very similar model, folioodbc.mos, reads data from an ODBC data source (e.g., the MS Access database folio.mdb) and outputs the problem results back to the database. The prefix to the filename in the initializations blocks now is mmodbc.odbc, corresponding to the type of data we work with; all else is the same as in the Excel model. The ODBC database access facility can also be employed with MS Excel spreadsheets. However, some restrictions apply and we recommend to use the Excel-specific data access as shown in the model folioexcel.mos.
Warning: In order to run this example, the ODBC driver for the corresponding data source must be present.
As an alternative to the Excel-specific access to spreadsheets shown in the example file folioexcel.mos, Mosel also provides generic interfaces to XLS, XLSX, and CSV format files that are usable including on non-Windows platforms. The model file foliosheet.mos uses the generic spreadsheet interface to access data in the file folio.xls (with this interface, the output file needs to be closed when writing to it from Mosel). And the example foliocsv.mos works with CSV format data held in the file folio.csv.
Further information
- Using the ODBC module: ``Xpress Mosel User Guide'', Chapter 2: `Some illustrative examples' and the whitepaper ``Using ODBC and other database interfaces with Mosel''.
- Documentation of the ODBC and spreadsheet interfaces: ``Mosel Language Reference Manual'', Chapters: `mmodbc' and `mmsheet'.
- Overview of other possibilities of data exchange with external sources: ``Xpress Mosel User Guide'', 16.1 `Generalized file handling'.
- Examples of advanced communication methods with external data sources are given in the whitepaper ``Generalized file handling in Mosel''.
Mosel MIP and quadratic models
Open and run the following Mosel models:
foliomip1.mos: This model introduces the array of binary variables buy to impose a constraint limiting the number of different shares taken into the portfolio.
foliomip2.mos: This model redefines the array of variables frac to be semi-continuous, so that at least a certain minimum amount of the budget is spent on each share that is bought.
folioqp.mos: This model uses a quadratic formulation to minimize the portfolio variance subject to achieving a target expected return. The Mosel program solves the problem twice, where the second run imposes a limit on the number of shares taken into the portfolio.
For each model, explore the solution and information displayed in the Run Bar tabs.
Further information
- ``Getting Started with Xpress'', Chapter 6: `Mixed Integer Programming' and Chapter 7: `Quadratic Programming'.
- Complete list of available MIP variable types: ``Xpress Mosel User Guide'', Chapter 4: `Integer Programming'.
Other problem types: Constraint Programming, Nonlinear Programming
All models we have seen so far use Xpress Optimizer for problem solving (chosen with the statement uses "mmxprs" at the begin of the model). If we wish to use a different solver, we need to indicate the name of the corresponding solver module.
Open the model assign.mos: this model implements and solves an assignment problem with Xpress Kalis, that is, using Constraint Programming (CP) techniques. For given sets of workers and machines the problem is to assign exactly one worker to every machine, maximizing the total productivity. The productivity of a worker depends on the machine he is assigned to.
You may observe several differences to the models we have seen previously:
– The solver choice statement now is uses "kalis".
– The CP decision variables are of the type cpvar; their domain (=admissible values) can be set with the procedure setdomain.
– CP models may have linear constraints (as in the `Total productivity' constraint), however our model also uses other types of constraint relations, so-called `global constraints'. The element constraint formulates a discrete function in one variable, and the all_different relation states that all variables in the constraint need to take a different value.
– The CP problem is solved with tree search methods. Instead of using the default search strategies, it is usually preferable to choose a more problem-specific strategy (using procedure cp_set_branching).
– The function cp_maximize is used to invoke the optimization.
All else (general structure, declarations, access to data, output printing) remains unchanged from what we have seen so far.
When running this model with Workbench the model output appears in the Output pane at the bottom of the workspace as with Mathematical optimization problems and in debug mode the model entity display in the Debugger tab is populated.
Other solver types available for Mosel include Xpress NonLinear for solving Nonlinear Programming problems (module 'mmxnlp'), and the module 'mmnl' gives access to the QCQP solver (for quadratically constrained problems) within Xpress Optimizer. Each solver module comes with problem-type specific functionality (such as variable and constraint types)—please see the corresponding manuals.
Further information
- Xpress Kalis provides access to the functionality of the Constraint Programming solver Kalis from within the Mosel environment. For more information about Xpress Kalis see the documents ``Xpress Kalis User Guide'' and ``Xpress Kalis Reference Manual''.
- Xpress NonLinear provides access to a set of solvers for Non-Linear and Mixed Integer Non-Linear Programming. Xpress NonLinear automatically selects a solver among the installed solvers of the Xpress suite (Simplex, Barrier, SLP, or Knitro) depending on the detected problem type. For more information about Xpress see the chapter ``mmxnlp'' of the ``Xpress Mosel Language Reference Manual'' and the ``Xpress NonLinear Manual''.
Deploying Mosel models to Xpress Insight
Xpress Insight has its own installer that needs to be executed in addition to the standard installation of the Xpress suite. Please see the Xpress Insight quick installation guide for details on the installation process.
Among the examples in the examples/getting_started/Mosel subdirectory of the Xpress installation you will find the two Insight app archives folioinsight.zip and folioinsightxml.zip. Both archives include a slightly edited version of the Mosel model file foliodata.mos with the required input datafile, the second archive adds an XML configuration file and VDL view definitions for the Xpress Insight GUI.
The Evaluation Scenario 5 in Section Evaluation steps for Scenario 5 shows how to work with Xpress Insight.
Publishing Insight apps from Xpress Workbench
Now let us see how to re-generate the readily provided app archives with Workbench. Locate the archive folioinsightxml.zip among the examples in the examples/getting_started/Mosel subdirectory of the Xpress installation and unzip it into a new directory, say folioapp. Start up Workbench with the option Open a project (or if Workbench is already open use the menu Project » Open Project) and select the directory folioapp as the project location. Explore the contents of the app archive by opening the project source files (.mos, .xml, .vdl).

Figure 3: Publishing an Insight app from Xpress Workbench
To create a new app, select the 'publish to Insight' button of Workbench: you will be prompted to enter your Insight credentials (for a default desktop installation these are admin / admin123) and specify a new name for your app. After successfully publishing the app a green box with a link to the new app in the Insight Web Client appears at the top right corner of the Workbench workspace. Following this link will take you to the app loaded into the Insight Web Client as shown in Figure Xpress Insight Web Client after app loading. Click onto the grey area to select and load a scenario, then choose the 'Run' button (for further detail, please see the instructions for the Insight Web Client in Section Evaluation steps for Scenario 5).

Figure 4: Xpress Insight Web Client after app loading
Further information
- Introductory example: ``Getting Started with Xpress'', Section 9.4 `Deployment to Xpress Insight'.
- Further examples: ``Xpress Insight Web Client User Guide''.
- Documentation: ``Xpress Insight Developer Guide''.
Deploying Mosel models to a host language
Open a Mosel model and select Deploy » Deploy or click the deploy button. This will open the Deploy dialog box. Select the programming language you wish to run the Mosel model from, and click the Next> button. This will open a Source Code Dialog containing the code for deployment.
Further information
- Introductory example (Java): ``Getting Started with Xpress'', Chapter 9: `Embedding a Mosel model in an application'.
- Further examples (C/Java/C#/VBA): ``Xpress Mosel User Guide'', Part III: `Working with the Mosel Libraries'.
- Documentation of Mosel C libraries: ``Xpress Mosel Library Reference Manual''.
- Documentation of Mosel Java libraries: ``Xpress Mosel Library Reference Manual JavaDoc''.
- Documentation of the Mosel .NET interface: ``Xpress Mosel .NET Interface''.
Mosel console commands
As an alternative to running Mosel models within Xpress Workbench you may execute them with the Mosel standalone version. This mode is often preferrable for testing and experimentation, for instance, if you wish to invoke a sequence of model runs from a batch file.
At the command prompt, type the following command:
mosel exec foliolp
You will see output that looks like the following:
Total return: 14.0667 treasury: 30% hardware: 0% theater: 20% telecom: 0% brewery: 6.66667% highways: 30% cars: 0% bank: 0% software: 13.3333% electronics: 0%
You can also specify new values for model parameters to be applied when executing the model:
mosel exec foliodata MAXVAL=0.5 OUTFILE="result2.dat"
Further information
See ``Xpress Mosel User Guide'', 1.1 `Entering a model'. See also ``Xpress Mosel Reference Manual'', 1.1 `What is Mosel' – `Running Mosel'.
Other Mosel topics
In addition to the topics addressed in this guide, the document ``Getting Started with Xpress'' describes how to draw SVG user graphs in Xpress Workbench (Chapter 5: `Drawing user graphs') and how to program heuristics with Mosel (Chapter 8: `Heuristics'). Further details on these topics can be found in the ``Xpress Mosel User Guide'', Part II `Advanced language features' that describes Mosel's programming facilities and includes other examples of heuristics, and under Part IV `Extensions and tools' – 16.3 `Graphics with mmsvg'.

Figure 5: Workbench with SVG user graph
Additional examples of modeling and programming with Mosel can be found in the directory \xpressmp\examples\. Also, the book ``Applications of Optimization with Xpress-MP'' (Dash Optimization, 2002) shows how to formulate and solve a large number of application problems with Xpress, accessible online: http://examples.xpress.fico.com/example.pl#mosel_book
© 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.