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-2020 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.