myconstants.mos |
(!******************************************
Mosel Examples
==============
File myconstants.mos
````````````````````
Example package defining
constants
of different types.
(c) 2008 Fair Isaac Corporation
author: S. Heipcke, 2005
*******************************************!)
package myconstants
public declarations
MYCST_BIGM = 10000 ! A large integer value
MYCST_TOL = 0.00001 ! A tolerance value
MYCST_LINE = ! String constant
"----------------------------------------------------------------"
MYCST_FLAG = true ! Constant with value true
MYCST_NOFLAG = false ! Constant with value false
end-declarations
end-package
|
|
myconst_test.mos |
(!******************************************************
Mosel NI Examples
=================
File myconst_test.mos
`````````````````````
Using module myconstants
*** Compile myconstants.mos before running this model ****
(c) 2008 Fair Isaac Corporation
author: S. Heipcke, 2002
*******************************************************!)
model "Test myconstants module"
uses "myconstants"
writeln(MYCST_LINE)
writeln("BigM value: ", MYCST_BIGM, ", tolerance value: ", MYCST_TOL)
writeln("Boolean flags: ", MYCST_FLAG, " ", MYCST_NOFLAG)
writeln(MYCST_LINE)
end-model
|
|
solarraypkg.mos |
(!******************************************
Mosel Example Problems
======================
File solarraypkg.mos
````````````````````
Example package providing the procedure
solarray(array of mpvar, array of real)
for getting solutions into an array.
(c) 2008 Fair Isaac Corporation
author: S. Heipcke, May 2005
*******************************************!)
package solarraypkg
! **** Integer indices (including ranges) ****
public procedure solarray(x:array(R:set of integer) of mpvar,
s:array(set of integer) of real)
forall(i in R) s(i):=getsol(x(i))
end-procedure
public procedure solarray(x:array(R1:set of integer,
R2:set of integer) of mpvar,
s:array(set of integer, set of integer) of real)
forall(i in R1, j in R2) s(i,j):=getsol(x(i,j))
end-procedure
public procedure solarray(x:array(R1:set of integer,
R2:set of integer,
R3:set of integer) of mpvar,
s:array(set of integer,
set of integer,
set of integer) of real)
forall(i in R1, j in R2, k in R3) s(i,j,k):=getsol(x(i,j,k))
end-procedure
public procedure solarray(x:array(R1:set of integer,
R2:set of integer,
R3:set of integer,
R4:set of integer) of mpvar,
s:array(set of integer, set of integer,
set of integer, set of integer) of real)
forall(i in R1, j in R2, k in R3, l in R4) s(i,j,k,l):=getsol(x(i,j,k,l))
end-procedure
! ****String indices ****
public procedure solarray(x:array(R:set of string) of mpvar,
s:array(set of string) of real)
forall(i in R) s(i):=getsol(x(i))
end-procedure
public procedure solarray(x:array(R1:set of string,
R2:set of string) of mpvar,
s:array(set of string, set of string) of real)
forall(i in R1, j in R2) s(i,j):=getsol(x(i,j))
end-procedure
public procedure solarray(x:array(R1:set of string,
R2:set of string,
R3:set of string) of mpvar,
s:array(set of string,
set of string,
set of string) of real)
forall(i in R1, j in R2, k in R3) s(i,j,k):=getsol(x(i,j,k))
end-procedure
public procedure solarray(x:array(R1:set of string,
R2:set of string,
R3:set of string,
R4:set of string) of mpvar,
s:array(set of string, set of string,
set of string, set of string) of real)
forall(i in R1, j in R2, k in R3, l in R4) s(i,j,k,l):=getsol(x(i,j,k,l))
end-procedure
end-package
|
|
solarrpkg_test.mos |
(!******************************************************
Mosel Example Problems
======================
File solarrpkg_test.mos
```````````````````````
Using the package 'solarraypkg'
*** Compile solarraypkg.mos before running this model ****
(c) 2008 Fair Isaac Corporation
author: S. Heipcke, 2005
*******************************************************!)
model "Test solarraypkg package"
uses "solarraypkg", "mmxprs"
declarations
R1=1..2
R2={6,7,9}
R3={5,-1}
x: array(R1,R2,R3) of mpvar
sol: array(R1,R2,R3) of real
end-declarations
! Define and solve a small problem
sum(i in R1, j in R2, k in R3) (i+j+2*k) * x(i,j,k) <= 20
forall(i in R1, j in R2, k in R3) x(i,j,k)<=1
maximize(sum(i in R1, j in R2, k in R3) (i+2*j+k) * x(i,j,k))
! Get the solution array
solarray(x,sol)
! Print the solution
forall(i in R1, j in R2, k in R3)
writeln(" (", i, ",", j, ",", k, ") ", sol(i,j,k), " ", getsol(x(i,j,k)))
writeln(sol)
end-model
|
|
solarrayanypkg.mos |
(!******************************************
Mosel Example Problems
======================
File solarrayanypkg.mos
```````````````````````
Example package providing the procedure
solarray(array of mpvar, array of real)
for getting solutions into an array.
-- Implementation via union types and reflection --
(c) 2022 Fair Isaac Corporation
author: S. Heipcke, Jan 2022
*******************************************!)
package solarrayanypkg
uses "mmreflect"
! Utility routine checking whether 2 arrays have the same index set types
function checkindices(x:any, s:any): boolean
returned:= x.array.nbdim=s.array.nbdim and
and(i in 1.. x.array.nbdim)
x.array.index(i).eltype=s.array.index(i).eltype
end-function
! Generic implementation of solarray routine
public procedure solarray(x:any, s:any)
declarations
it: iterator
end-declarations
if x is array of mpvar and s is array of real then
if checkindices(x,s) then
inititer(it,x.array)
reset(s.array)
while (nextcell(it)) s.array(it).real:= x.array(it).mpvar.sol
else
writeln("SOLARRAY: array indices don't match")
end-if
else
writeln("SOLARRAY: arguments must be arrays of type mpvar / real")
end-if
end-procedure
end-package
|
|
solarranypkg_test.mos |
(!******************************************************
Mosel Example Problems
======================
File solarranypkg_test.mos
``````````````````````````
Using the package 'solarrayanypkg'
*** Compile solarrayanypkg.mos before running this model ****
(c) 2022 Fair Isaac Corporation
author: S. Heipcke, Jan 2022
*******************************************************!)
model "Test solarrayanypkg package"
uses "solarrayanypkg", "mmxprs"
declarations
R1=1..2
R2={6,7,9}
R3={5,-1}
x: array(R1,R2,R3) of mpvar
sol: array(R1,R2,R3) of real
sola: array(integer,integer,integer) of real
x2: array(R2,R3) of mpvar
sol2: array(R2,R3) of real
sol3: array(R1,R2,R3) of integer
sol4: array(R1,R2,string) of real
end-declarations
! Define and solve a small problem
sum(i in R1, j in R2, k in R3) (i+j+2*k) * x(i,j,k) <= 20
forall(i in R1, j in R2, k in R3) x(i,j,k)<=1
forall(j in R2, k in R3) x(1,j,k)=x2(j,k)
maximize(sum(i in R1, j in R2, k in R3) (i+2*j+k) * x(i,j,k))
! Get the solution array
solarray(x,sol)
! Print the solution (3-dimensional array)
forall(i in R1, j in R2, k in R3)
writeln(" (", i, ",", j, ",", k, ") ", sol(i,j,k), " ", getsol(x(i,j,k)))
writeln(sol)
solarray(x,sola)
writeln(sola)
! Testing with 2-dimensional array
solarray(x2,sol2)
writeln(sol2)
! Testing various error situations
solarray(x,sol2)
solarray(x,sol3)
solarray(x,sol4)
end-model
|
|
arcpkg.mos |
(!******************************************************
Mosel User Guide Example Problems
=================================
file arcpkg.mos
```````````````
Definition of the type 'arc'.
(c) 2008 Fair Isaac Corporation
author: S. Heipcke, Jan. 2007, rev. June 2018
*******************************************************!)
package arcpkg
public declarations
arc = public record ! Arcs:
Source,Sink: string ! Source and sink of arc
Cost: real ! Cost coefficient
end-record
end-declarations
(! Alternatively:
declarations
public arc = record ! Arcs:
public Source,Sink: string ! Source and sink of arc
public Cost: real ! Cost coefficient
end-record
end-declarations
!)
public function is_neighbor(n1,n2: string, A: array(Arcs:set of integer) of arc): boolean
(!
returned:=or(a in Arcs ) ((A(a).Source=n1 and A(a).Sink=n2) or
(A(a).Source=n2 and A(a).Sink=n1))
!)
returned:= or(a in Arcs, source=A(a).Source, sink=A(a).Sink)
((source=n1 and sink=n2) or (source=n2 and sink=n1))
end-function
end-package
|
|
arc_test.mos |
(!******************************************************
Mosel Example Problems
======================
file arc_test.mos
`````````````````
Using the package 'arcpkg'.
*** Compile arcpkg.mos before running this model ****
(c) 2008 Fair Isaac Corporation
author: S. Heipcke, Jan. 2007, rev. June 2018
*******************************************************!)
model "Arcs"
uses "arcpkg"
declarations
NODES: set of string ! Set of nodes
ARC: array(ARCSET:range) of arc ! Arcs
end-declarations
initializations from 'arcs.dat'
ARC
end-initializations
! Calculate the set of nodes
NODES:=union(a in ARCSET) {ARC(a).Source, ARC(a).Sink}
writeln(NODES)
writeln("Average arc cost: ", sum(a in ARCSET) ARC(a).Cost / getsize(ARCSET) )
writeln("Neighbors A and F: ", is_neighbor("A","F",ARC))
writeln("Neighbors A and B: ", is_neighbor("A","B",ARC))
end-model
|
|
parpkg.mos |
(!******************************************************
Mosel User Guide Example Problems
=================================
file parpkg.mos
```````````````
Definition of package parameters.
(c) 2018 Fair Isaac Corporation
author: Y. Colombani, May 2018
*******************************************************!)
package parpkg
! Specify parameter names and types
parameters
"p1":real
"p2":integer
"p3":string
"p4":boolean
end-parameters
! Entities for storing current parameter values
declarations
myp1: real
myp2: integer
myp3: string
myp4: boolean
end-declarations
! Get value of a real parameter
public function parpkg~getrparam(p:string):real
case p of
"p1": returned:=myp1
end-case
end-function
! Get value of an integer parameter
public function parpkg~getiparam(p:string):integer
case p of
"p2": returned:=myp2
end-case
end-function
! Get value of a string parameter
public function parpkg~getsparam(p:string):string
case p of
"p3": returned:=myp3
end-case
end-function
! Get value of a boolean parameter
public function parpkg~getbparam(p:string):boolean
case p of
"p4": returned:=myp4
end-case
end-function
! Set value for real parameters
public procedure parpkg~setparam(p:string,v:real)
case p of
"p1": myp1:=v
end-case
end-procedure
! Set value for integer parameters
public procedure parpkg~setparam(p:string,v:integer)
case p of
"p2": myp2:=v
end-case
end-procedure
! Set value for string parameters
public procedure parpkg~setparam(p:string,v:string)
case p of
"p3": myp3:=v
end-case
end-procedure
! Set value procedure for boolean parameters
public procedure parpkg~setparam(p:string,v:boolean)
case p of
"p4": myp4:=v
end-case
end-procedure
! Set default values for parameters
myp1:=0.25
myp2:=10
myp3:="default"
myp4:=true
end-package
|
|
params_test.mos |
(!******************************************************
Mosel User Guide Example Problems
=================================
file params_test.mos
````````````````````
Working with package parameters.
*** Compile parpkg.mos before running this model ****
(c) 2018 Fair Isaac Corporation
author: Y. Colombani, May 2018
*******************************************************!)
model "Packages with parameters"
uses 'parpkg'
! Display default parameter values
writeln("Default values:",
" p1=", getparam("parpkg.P1"), " p2=", getparam("P2"),
" p3=", getparam("parpkg.p3"), " p4=", getparam("p4"))
! Change values
setparam("p1",133); setparam("parpkg.p2",-77)
setparam("P3","tluafed"); setparam("parpkg.P4",not getparam("parpkg.P4"))
end-model
|
|