(!******************************************************* Mosel Example Problems ====================== file looph.mos `````````````` Demonstrate effect of `exists' (hashmap arrays) (c) 2018 Fair Isaac Corporation author: S. Heipcke, Sep. 2018, rev. Nov. 2021 *******************************************************!) model "loop hashmap" uses "mmsystem" public declarations R1,R2,R3,R4,R5: range Cost: hashmap array(R1,R2,R3,R4,R5) of real x: hashmap array(R1,R2,R3,R4,R5) of mpvar end-declarations ! This would normally be read in from a file Cost(1,1,1,1,1) := 1.1 Cost(1,30,1,3,3) := 2.2 Cost(1,1,30,1,4) := 3.3 Cost(1,1,1,30,1) := 4.4 Cost(1,6,1,1,30) := 5.5 Cost(30,1,1,1,3) := 6.6 forall(i1 in R1, i2 in R2, i3 in R3, i4 in R4, i5 in R5 | exists(Cost(i1,i2,i3,i4,i5)) ) create(x(i1,i2,i3,i4,i5)) starttime:=gettime ! 'exists' is not required here from a logical point of view, since the ! sum will only contain the variables that have been created, but it ! helps speeding up things. Compare the running times with and without it: sum(i1 in R1, i2 in R2, i3 in R3, i4 in R4, i5 in R5 | exists(Cost(i1,i2,i3,i4,i5)) ) Cost(i1,i2,i3,i4,i5) * x(i1,i2,i3,i4,i5) = 1 writeln("Time using `exists': ", gettime-starttime) sum(i1 in R1, i2 in R2, i3 in R3, i4 in R4, i5 in R5 ) Cost(i1,i2,i3,i4,i5) * x(i1,i2,i3,i4,i5) = 1 writeln("Time without `exists': ", gettime-starttime) ! Display the resulting constraint definitions on screen exportprob("") end-model