| |||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
Ground transport Description
Further explanation of this example: 'Applications of optimization with Xpress-MP', Chapter 10: Ground transport
Source Files By clicking on a file name, a preview is opened at the bottom of this page.
Data Files
e5combine.mos (!****************************************************** Mosel Example Problems ====================== file e5combine.mos `````````````````` Combining different modes of transport A large load needs to be transported through 5 cities via 3 possible transportation modes. Transportation type can be changed in any of the three intermediate cities. How should this load be transported so that the total cost of transportation and changing modes is minimized? This problem introduces triple indices for the variable 'change' since this is the change from mode m to mode n for leg l. (c) 2008-2022 Fair Isaac Corporation author: S. Heipcke, Mar. 2002, rev. Mar. 2022 *******************************************************!) model "E-5 Combined transport" uses "mmxprs" declarations NL = 4 LEGS = 1..NL ! Legs of the transport MODES: set of string ! Modes of transport CTRANS: array(MODES,LEGS) of integer ! Transport cost CCHG: array(MODES,MODES) of integer ! Cost of changing mode of transport end-declarations initializations from 'e5combine.dat' CTRANS CCHG end-initializations declarations use: array(MODES,LEGS) of mpvar ! 1 if a mode is used, 0 otherwise change: array(MODES,MODES,1..NL-1) of mpvar ! 1 if change from mode m to n ! at end of leg, 0 otherwise end-declarations ! Objective: total cost Cost:= sum(m in MODES, l in LEGS) CTRANS(m,l)*use(m,l) + sum(m,n in MODES,l in 1..NL-1) CCHG(m,n)*change(m,n,l) ! One mode of transport per leg forall(l in LEGS) sum(m in MODES) use(m,l) = 1 ! Change or maintain mode of transport between every pair of legs forall(l in 1..NL-1) sum(m,n in MODES) change(m,n,l) = 1 ! Relation between modes used and changes forall(m,n in MODES,l in 1..NL-1) use(m,l) + use(n,l+1) >= 2*change(m,n,l) forall(m in MODES, l in LEGS) use(m,l) is_binary forall(m,n in MODES,l in 1..NL-1) change(m,n,l) is_binary ! Solve the problem minimize(Cost) ! Solution printing writeln("Total cost: ", getobjval) forall(l in LEGS) do write(" ",l, "-", l+1,": ") forall(m in MODES | getsol(use(m,l))>0) do write(m) break end-do end-do writeln end-model | |||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
© Copyright 2024 Fair Isaac Corporation. |