Writing packages: definition of constant symbols, subroutines, types, and parameters
|
|
Type: | Programming |
Rating: | 3 (intermediate) |
Description: | Packages are libraries written in the Mosel language that extend the language with
|
File(s): | myconstants.mos (library, compile separately), myconst_test.mos, solarraypkg.mos (library, compile separately), solarr_test.mos, arcpkg.mos (library, compile separately), arc_test.mos, parpkg.mos (library, compile separately), params_test.mos |
Data file(s): | arcs.dat |
|
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 Examples ============== 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 |
solarr_test.mos |
(!****************************************************** Mosel NI Examples ================= File solarr_test.mos ```````````````````` Using module solarray *** Compile solarraypkg.mos before running this model **** (c) 2008 Fair Isaac Corporation author: S. Heipcke, 2002 *******************************************************!) model "Test solarray module" 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 |
arcpkg.mos |
(!****************************************************** Mosel User Guide Example Problems ================================= file arc.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)) 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 |
© 2001-2020 Fair Isaac Corporation. All rights reserved. This documentation is the property of Fair Isaac Corporation (“FICO”). Receipt or possession of this documentation does not convey rights to disclose, reproduce, make derivative works, use, or allow others to use it except solely for internal evaluation purposes to determine whether to purchase a license to the software described in this documentation, or as otherwise set forth in a written software license agreement between you and FICO (or a FICO affiliate). Use of this documentation and the software described in it must conform strictly to the foregoing permitted uses, and no other use is permitted.