(!****************************************************** Mosel Example Problems ====================== file burglar2x.mos `````````````````` Data read from XML file. (c) 2013 Fair Isaac Corporation author: S. Heipcke, Apr. 2013, rev. Sep. 2014 *******************************************************!) model "Burglar2 XML" uses "mmxprs", "mmxml" declarations WTMAX = 102 ! Maximum weight allowed ITEMS: set of string ! Index set for items VALUE: array(ITEMS) of real ! Value of items WEIGHT: array(ITEMS) of real ! Weight of items BurgData, ResData: xmldoc ! XML document Root, Node: integer ! XML nodes NodeList: list of integer end-declarations ! Reading data from an XML file load(BurgData, "burglar.xml") ! Retrieve all 'Item' nodes getnodes(BurgData, "BurgData/Item", NodeList) ! Retrieve 'Value' and 'Weight' information forall(i in NodeList) do VALUE(getstrattr(BurgData,i,"name")):= getrealvalue(BurgData, getnode(BurgData, i, "Value") ) WEIGHT(getstrattr(BurgData,i,"name")):= getrealvalue(BurgData, getnode(BurgData, i, "Weight") ) end-do declarations take: array(ITEMS) of mpvar ! 1 if we take item i; 0 otherwise end-declarations ! Objective: maximize total value MaxVal:= sum(i in ITEMS) VALUE(i)*take(i) ! Weight restriction sum(i in ITEMS) WEIGHT(i)*take(i) <= WTMAX ! All variables are 0/1 forall(i in ITEMS) take(i) is_binary maximize(MaxVal) ! Solve the MIP-problem ! Solution output forall(i in ITEMS) SOLTAKE(i):= getsol(take(i)) writeln("Solution:\n Objective: ", getobjval) writeln(SOLTAKE) ! Create solution representation in XML format Root:=addnode(ResData, 0, XML_ELT, "SolTake") ! Create root node "SolTake" setattr(ResData, Root, "objective", getobjval) ! ... with attr. "objective" forall(i in ITEMS) do Node:=addnode(ResData, Root, XML_ELT, "Item") ! Add a node to "SolTake" setattr(ResData, Node, "name", i) ! ... with attribute "name" setvalue(ResData, Node, SOLTAKE(i)) ! ... and solution value end-do save(ResData, "burglarout.xml") ! Save solution to XML format file save(ResData, Root, "") ! Display XML format solution on screen end-model