runprime.mos |
(!******************************************************
Mosel User Guide Example Problems
=================================
file runprime.mos
`````````````````
Model handling.
(c) 2008 Fair Isaac Corporation
author: S. Heipcke, 2005
*******************************************************!)
model "Run model prime"
uses "mmjobs"
declarations
modPrime: Model
event: Event
end-declarations
! Compile 'prime.mos'
if compile("prime.mos")<>0 then exit(1); end-if
load(modPrime, "prime.bim") ! Load bim file
run(modPrime, "LIMIT=50000") ! Start execution and
wait(2) ! wait 2 seconds for an event
if isqueueempty then ! No event has been sent...
writeln("Model too slow: stopping it!")
stop(modPrime) ! ... stop the model, then wait
wait
end-if
! An event is available: model finished
event:=getnextevent
writeln("Exit status: ", getvalue(event))
writeln("Exit code : ", getexitcode(modPrime))
unload(modPrime) ! Unload the submodel
end-model
|
|
prime.mos |
(!******************************************************
Mosel User Guide Example Problems
=================================
file prime.mos
`````````````
Working with sets.
(c) 2008 Fair Isaac Corporation
author: S. Heipcke, 2001
*******************************************************!)
model Prime
parameters
LIMIT=100 ! Search for prime numbers in 2..LIMIT
end-parameters
declarations
SNumbers: set of integer ! Set of numbers to be checked
SPrime: set of integer ! Set of prime numbers
end-declarations
SNumbers:={2..LIMIT}
writeln("Prime numbers between 2 and ", LIMIT, ":")
n:=2
repeat
while (not(n in SNumbers)) n+=1
SPrime += {n} ! n is a prime number
i:=n
while (i<=LIMIT) do ! Remove n and all its multiples
SNumbers-= {i}
i+=n
end-do
until SNumbers={}
writeln(SPrime)
writeln(" (", getsize(SPrime), " prime numbers.)")
end-model
|
|
runprime2.mos |
(!******************************************************
Mosel User Guide Example Problems
=================================
file runprime2.mos
``````````````````
Model handling. Compiling to memory.
(c) 2008 Fair Isaac Corporation
author: S. Heipcke, 2005
*******************************************************!)
model "Run model prime (2)"
uses "mmjobs", "mmsystem"
declarations
modPrime: Model
event: Event
end-declarations
! Compile 'prime.mos' to memory
if compile("","prime.mos","shmem:bim")<>0 then
exit(1)
end-if
load(modPrime,"shmem:bim") ! Load bim file from memory...
fdelete("shmem:bim") ! ... and release the memory block
run(modPrime, "LIMIT=50000") ! Start execution and
wait(2) ! wait 2 seconds for an event
if isqueueempty then ! No event has been sent...
writeln("Model too slow: stopping it!")
stop(modPrime) ! ... stop the model, then wait
wait
end-if
! An event is available: model finished
event:=getnextevent
writeln("Exit status: ", getvalue(event))
writeln("Exit code : ", getexitcode(modPrime))
unload(modPrime) ! Unload the submodel
end-model
|
|
runprimedistr.mos |
(!******************************************************
Mosel User Guide Example Problems
=================================
file runprimedistr.mos
``````````````````````
Distributed computing:
Running a model on a remote Mosel instance.
*** ATTENTION: This model will return an error if ***
*** no more than one Xpress licence is available. ***
(c) 2010 Fair Isaac Corporation
author: S. Heipcke, July 2010
*******************************************************!)
model "Run model prime remotely"
uses "mmjobs"
declarations
moselInst: Mosel
modPrime: Model
event: Event
end-declarations
! Compile 'prime.mos' locally
if compile("prime.mos")<>0 then exit(1); end-if
! Start a remote Mosel instance:
! "" means the node running this model
if connect(moselInst, "")<>0 then exit(2); end-if
! Load bim file into remote instance
load(moselInst, modPrime, "rmt:prime.bim")
run(modPrime, "LIMIT=50000") ! Start execution and
wait(2) ! wait 2 seconds for an event
if isqueueempty then ! No event has been sent...
writeln("Model too slow: stopping it!")
stop(modPrime) ! ... stop the model, then wait
wait
end-if
! An event is available: model finished
event:=getnextevent
writeln("Exit status: ", getvalue(event))
writeln("Exit code : ", getexitcode(modPrime))
unload(modPrime) ! Unload the submodel
end-model
|
|
prime3.mos |
(!******************************************************
Mosel User Guide Example Problems
=================================
file prime3.mos
```````````````
Prime number algorithm for large values of LIMIT.
(c) 2008 Fair Isaac Corporation
author: S. Heipcke, 2006
*******************************************************!)
model "Prime (array)"
parameters
LIMIT=20000 ! Search for prime numbers in 2..LIMIT
end-parameters
declarations
INumbers = 2..LIMIT ! Set of numbers to be checked
SNumbers: array(INumbers) of boolean
SPrime: set of integer ! Set of prime numbers
end-declarations
writeln("Prime numbers between 2 and ", LIMIT, ":")
n:=2
repeat
SPrime += {n} ! n is a prime number
i:=n
while (i<=LIMIT) do ! Remove n and all its multiples
SNumbers(i):= true
i+=n
end-do
while (n <= LIMIT and SNumbers(n)) n+=1
until (n>LIMIT)
writeln(SPrime)
writeln(" (", getsize(SPrime), " prime numbers.)")
end-model
|
|
runprimeio.mos |
(!******************************************************
Mosel User Guide Example Problems
=================================
file runprimeio.mos
```````````````````
Data exchange via shared memory.
(c) 2008 Fair Isaac Corporation
author: S. Heipcke, 2005, rev. Apr. 2011
*******************************************************!)
model "Run model primeio"
uses "mmjobs"
declarations
modPrime: Model
NumP: integer ! Number of prime numbers found
SetP: set of integer ! Set of prime numbers
STOPMOD = 2 ! "Stop submodel" user event
MODREADY = 3 ! "Submodel ready" user event
end-declarations
! Compile 'prime.mos'
if compile("primeio.mos")<>0 then exit(1); end-if
load(modPrime, "primeio.bim") ! Load bim file
! Disable submodel output
setdefstream(modPrime,"","null:","null:")
run(modPrime, "LIMIT=35000") ! Start execution and
wait ! ... wait for an event
if getclass(getnextevent) <> MODREADY then
writeln("Problem with submodel run")
exit(1)
end-if
wait(2) ! Let the submodel run for 2 seconds
if isqueueempty then ! No event has been sent...
writeln("Model too slow: stopping it!")
send(modPrime, STOPMOD, 0) ! ... stop the model, then wait
wait
end-if
initializations from "bin:shmem:resdata"
NumP SetP as "SPrime"
end-initializations
writeln(SetP) ! Output the result
writeln(" (", NumP, " prime numbers.)")
unload(modPrime)
end-model
|
|
primeio.mos |
(!******************************************************
Mosel User Guide Example Problems
=================================
file primeio.mos
```````````````
Data exchange via memory.
(c) 2008 Fair Isaac Corporation
author: S. Heipcke, 2005, rev. Jan. 2013
*******************************************************!)
model "Prime IO"
uses "mmjobs"
parameters
LIMIT=100 ! Search for prime numbers in 2..LIMIT
OUTPUTFILE = "bin:shmem:resdata"
end-parameters
declarations
SNumbers: set of integer ! Set of numbers to be checked
SPrime: set of integer ! Set of prime numbers
STOPMOD = 2 ! "Stop submodel" user event
MODREADY = 3 ! "Submodel ready" user event
end-declarations
send(MODREADY,0) ! Send "model ready" event
SNumbers:={2..LIMIT}
writeln("Prime numbers between 2 and ", LIMIT, ":")
n:=2
repeat
while (not(n in SNumbers)) n+=1
SPrime += {n} ! n is a prime number
i:=n
while (i<=LIMIT) do ! Remove n and all its multiples
SNumbers-= {i}
i+=n
end-do
until (SNumbers={} or not isqueueempty)
NumP:= getsize(SPrime)
initializations to OUTPUTFILE
NumP SPrime
end-initializations
end-model
|
|
prime3io.mos |
(!******************************************************
Mosel User Guide Example Problems
=================================
file prime3io.mos
`````````````````
Prime number algorithm for large values of LIMIT.
(c) 2008 Fair Isaac Corporation
author: S. Heipcke, 2006, rev. Apr. 2011
*******************************************************!)
model "Prime (array)"
uses "mmjobs"
parameters
LIMIT=20000 ! Search for prime numbers in 2..LIMIT
end-parameters
declarations
INumbers = 2..LIMIT ! Set of numbers to be checked
SNumbers: array(INumbers) of boolean
SPrime: set of integer ! Set of prime numbers
STOPMOD = 2 ! "Stop submodel" user event
MODREADY = 3 ! "Submodel ready" user event
end-declarations
send(MODREADY,0) ! Send "model ready" event
writeln("Prime numbers between 2 and ", LIMIT, ":")
n:=2
repeat
SPrime += {n} ! n is a prime number
i:=n
while (i<=LIMIT) do ! Remove n and all its multiples
SNumbers(i):= true
i+=n
end-do
while (n <= LIMIT and SNumbers(n)) n+=1
until (n>LIMIT or not isqueueempty)
NumP:= getsize(SPrime)
initializations to "bin:shmem:resdata"
NumP SPrime
end-initializations
end-model
|
|
runprimeior.mos |
(!******************************************************
Mosel User Guide Example Problems
=================================
file runprimeior.mos
````````````````````
Data exchange via shared memory.
- Using 'raw' driver -
(c) 2008 Fair Isaac Corporation
author: S. Heipcke, 2005, rev. Apr. 2011
*******************************************************!)
model "Run model primeior"
uses "mmjobs"
declarations
modPrime: Model
NumP: integer ! Number of prime numbers found
SetP: set of integer ! Set of prime numbers
STOPMOD = 2 ! "Stop submodel" user event
MODREADY = 3 ! "Submodel ready" user event
end-declarations
! Compile 'prime.mos'
if compile("primeior.mos")<>0 then exit(1); end-if
load(modPrime, "primeior.bim") ! Load bim file
! Disable model output
setdefstream(modPrime,"","null:","null:")
run(modPrime, "LIMIT=35000") ! Start execution and
wait ! ... wait for an event
if getclass(getnextevent) <> MODREADY then
writeln("Problem with submodel run")
exit(1)
end-if
wait(2) ! Let the submodel run for 2 seconds
if isqueueempty then ! No event has been sent...
writeln("Model too slow: stopping it!")
send(modPrime, STOPMOD, 0) ! ... stop the model, then wait
wait
end-if
initializations from "raw:"
NumP as "shmem:NumP" SetP as "shmem:SPrime"
end-initializations
writeln(SetP) ! Output the result
writeln(" (", NumP, " prime numbers.)")
unload(modPrime)
end-model
|
|
primeior.mos |
(!******************************************************
Mosel User Guide Example Problems
=================================
file primeior.mos
`````````````````
Data exchange via memory.
- Using 'raw' driver -
(c) 2008 Fair Isaac Corporation
author: S. Heipcke, 2005, rev. Apr. 2011
*******************************************************!)
model "Prime IO"
uses "mmjobs"
parameters
LIMIT=100 ! Search for prime numbers in 2..LIMIT
end-parameters
declarations
SNumbers: set of integer ! Set of numbers to be checked
SPrime: set of integer ! Set of prime numbers
STOPMOD = 2 ! "Stop submodel" user event
MODREADY = 3 ! "Submodel ready" user event
end-declarations
send(MODREADY,0) ! Send "model ready" event
SNumbers:={2..LIMIT}
writeln("Prime numbers between 2 and ", LIMIT, ":")
n:=2
repeat
while (not(n in SNumbers)) n+=1
SPrime += {n} ! n is a prime number
i:=n
while (i<=LIMIT) do ! Remove n and all its multiples
SNumbers-= {i}
i+=n
end-do
until (SNumbers={} or not isqueueempty)
NumP:= getsize(SPrime)
initializations to "raw:"
NumP as "shmem:NumP" SPrime as "shmem:SPrime"
end-initializations
end-model
|
|
prime3ior.mos |
(!******************************************************
Mosel User Guide Example Problems
=================================
file prime3ior.mos
``````````````````
Prime number algorithm for large values of LIMIT.
- Using 'raw' driver -
(c) 2008 Fair Isaac Corporation
author: S. Heipcke, 2006
*******************************************************!)
model "Prime (array)"
uses "mmjobs"
parameters
LIMIT=20000 ! Search for prime numbers in 2..LIMIT
end-parameters
declarations
INumbers = 2..LIMIT ! Set of numbers to be checked
SNumbers: array(INumbers) of boolean
SPrime: set of integer ! Set of prime numbers
STOPMOD = 2 ! "Stop submodel" user event
MODREADY = 3 ! "Submodel ready" user event
end-declarations
send(MODREADY,0) ! Send "model ready" event
writeln("Prime numbers between 2 and ", LIMIT, ":")
n:=2
repeat
SPrime += {n} ! n is a prime number
i:=n
while (i<=LIMIT) do ! Remove n and all its multiples
SNumbers(i):= true
i+=n
end-do
while (n <= LIMIT and SNumbers(n)) n+=1
until (n>LIMIT or not isqueueempty)
NumP:= getsize(SPrime)
initializations to "raw:"
NumP as "shmem:NumP" SPrime as "shmem:SPrime"
end-initializations
end-model
|
|