Minimum Model Requirements
Mosel model developers must implement several behaviors in a model to use it in FICO® Xpress Insight.
- Load the mminsight package which includes the mminsight.dso Mosel module and implements the necessary interactions between Xpress Insight and the model.
- The model must implement the LOAD mode by providing a procedure which will be invoked when the scenario is executed in LOAD mode. The procedure should be registered as the handler for the LOAD mode using the appropriate annotation (see example provided later in this section.) The code is expected to initialize the input entities of the scenario data model with default data. Any calls to finalize must be included in the loading code.
- The model must implement the RUN mode by providing a procedure which will be invoked when the scenario is executed in RUN mode. The procedure should be registered as the handler for the RUN mode using the appropriate annotation (see example provided later in this section.) The code must call insightpopulate to initialize the scenario input entities to the scenario data current values, and is then expected to calculate the results data and populate the results data entities.
- Call insightdispatch from the global scope of the model to invoke the registered procedure for the current execution mode (or manually invoke the required code conditional on the value of insightgetmode.)
- Replace any call to minimize and maximize with insightminimize and insightmaximize.
- Only entities declared as public (the entity type declaration or the entire declaration block prefixed by the public keyword) will be visible to Xpress Insight, irrespective of how the model is compiled. Private entities would be visible in versions of Xpress Insight earlier than 4.50 if the model was compiled without the -s option to strip private symbols. Neither FICO® Xpress Workbench or (legacy) IVE editors apply the -s option by default.
Note Developers migrating an older app to Xpress Insight 4.50 should mark all entities as public to avoid the upgrade being rejected. If some entities being marked as public are not strictly required then they can be excluded with the manage=ignore annotation or by removing the public keyword in a future upgrade.
A minimal model skeleton will have the following basic structure:
model mymodel uses "mminsight" !@insight.execmodes.LOAD procedure datainput … end-procedure !@insight.execmodes.RUN procedure solvemodel insightpopulate … end-procedure !@insight.execmodes.NONE procedure standalone datainput solvemodel end-procedure insightdispatch end-model
Supported Model Features
The supported Mosel types are documented in the section Supported Mosel Types.
In general, so long as the requirements listed previously are met by a model, Xpress Insight places no restrictions on the programmatic execution of a model. Statements, expressions, procedures, conditional logic, functions, packages, and modules can be used as normal. A model can solve several problems in series, or use mmjobs to solve sub-models.