Simple Model
This is a version of the 'chess2' example, modified to be an Xpress Insight app. It demonstrates how to write a model so that Xpress Insight can capture or inject the model's input data, depending upon the run mode, while still allowing the model developer to run the model from outside of Xpress Insight, e.g. from the Mosel command line.
model Chess2
uses "mmxprs" ! Load the Xpress-Optimizer
uses "mminsight" ! Load the Insight interface
public declarations
! Model inputs
UnitTypes: set of string
ResourceTypes: set of string
ResourceLimits: array(ResourceTypes) of real
ProfitPerUnit: array(UnitTypes) of real
UnitResourceRequirements: array(UnitTypes,ResourceTypes) of real
! Mathematical model objects (providing model results)
unitstobuild: array(UnitTypes) of mpvar
ResourceLimitConstraints: array(ResourceTypes) of linctr
MaxProfit: linctr
end-declarations
! Procedure to populate model with initial input data
procedure loaddata
ProfitPerUnit:: (["small","large"])[5,20]
UnitResourceRequirements:: (["small"],["wood","mc_time"]) [1,3]
UnitResourceRequirements:: (["large"],["wood","mc_time"]) [3,2]
ResourceLimits:: (["wood","mc_time"])[200,400]
finalize( UnitTypes )
finalize( ResourceTypes )
end-procedure
! Procedure to build and solve optimization problem
procedure runproblem
! Build whole units only
forall(u in UnitTypes) unitstobuild(u) is_integer
! Define profit
MaxProfit:= sum(u in UnitTypes) ProfitPerUnit(u)*unitstobuild(u)
! Don't use more than available resources
forall(r in ResourceTypes)
ResourceLimitConstraints(r) := ( sum(u in UnitTypes)
UnitResourceRequirements(u,r)*unitstobuild(u) ) <= ResourceLimits(r)
! Solve the mixed integer problem
insightmaximize(MaxProfit)
! Print the solution to the run log
writeln("Solution:\n Objective: ", getobjval)
forall(u in UnitTypes)
writeln(u, ":", unitstobuild(u).sol)
end-procedure
! Perform actions based on how model is being executed
case insightgetmode of
INSIGHT_MODE_LOAD: do
! Scenario is being 'loaded' through Xpress Insight
! Initialize input arrays and then terminate
loaddata
end-do
INSIGHT_MODE_RUN: do
! Scenario is being 'run' through Xpress Insight
! Populate with Insight scenario data and then solve optimization
insightpopulate
runproblem
end-do
INSIGHT_MODE_NONE: do
! Model is being run outside of Xpress Insight, e.g. from the Mosel command-line tool
! Initialize input arrays then solve optimization
loaddata
runproblem
end-do
else
writeln("Unknown execution mode")
end-case
end-model
© 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.
