| (!******************************************************
   Mosel User Guide Example Problems
   ================================= 
   file arraydef.mos 
   `````````````````
   Defining arrays.
 
   (c) 2010 Fair Isaac Corporation
       author: S. Heipcke, Jul. 2010
*******************************************************!)
model "array definition"
 declarations
  A1: array(1..3) of integer
  F = {"a","b","c"}
  A2: array(F) of real
  A3: array(R:range) of integer
  A4: dynamic array(F) of real
 end-declarations
 writeln("A1:", A1, " A2:", A2, " A3:", A3, " A4:", A4)
 A1::[10,20,30]
 A2::(["a","b","c"])[1.1, 2.5, 3.9]
 A3::(1..3)[10,20,30]
! Redefine an entry
 A2("a"):=5.1
! This line leads to an 'index out of range' error
! A2("d"):=5.1
 
 setrandseed(3)
 forall(f in F) A4(f):= 10*random
 delcell(A4("a"))
 
 writeln("A1:", A1, " A2:", A2, " A3:", A3, " A4:", A4)
end-model
 | 
| (!******************************************************
   Mosel User Guide Example Problems
   ================================= 
   file arrayinit.mos 
   ``````````````````
   Array initialization from a text file.
 
   (c) 2010 Fair Isaac Corporation
       author: S. Heipcke, Jul. 2010
*******************************************************!)
model "Initializing arrays"
 declarations
  A: array(1..2,1..3) of real          ! Can use dense format
  B: array(R:range,T:range) of real    ! Requires sparse format
  D: dynamic array(set of string, range) of real   ! Requires sparse format
  S: set of string
  M: dynamic array(S) of integer       ! Requires sparse format
  N: dynamic array(S) of string        ! Requires sparse format
 end-declarations
 
 initializations from "arrayinit.dat"
  A  B           
  D as "SomeName"                      ! Data label different from model name
  D as "SomeName2"                     ! Add some data to 'D'
  [M,N] as "MNData"                    ! 2 arrays read from the same table
 end-initializations 
 
 writeln("A:", A, " B:", B, "\nD:", D, "\nM:", M, "\nN:", N)
end-model 
 | 
| (!******************************************************
   Mosel User Guide Example Problems
   ================================= 
   file autoarray.mos 
   ``````````````````
   Working with automatic arrays.
 
   (c) 2010 Fair Isaac Corporation
       author: S. Heipcke, Jul. 2010
*******************************************************!)
model "Automatic arrays"
 declarations
  B: array(S:set of string, I:set of real) of integer
 end-declarations
 
 B::(["a","b"], [3,1.5,7])[1,2,3,4,5,6]
 writeln("B: ", B)
! Row and colum arrays (1-dimensional)
 forall(s in S) writeln("Row ", s, ": ", array(i in I) B(s,i))
 forall(i in I) writeln("Column ", i, ": ", array(s in S) B(s,i))
! Filtered array entries (2-dimensional)
 writeln("B filtered: ", array(s in S,i in I | s<>"a" and i<5) B(s,i))
! Inversed indices (2-dimensional)
 writeln("Transpose: ", array(i in I, s in S) B(s,i)) 
 
 initializations to "arrayout.txt"
  B
  evaluation of array(i in I, s in S) B(s,i) as "B_T"
 end-initializations
end-model
 | 
| (!******************************************************
   Mosel User Guide Example Problems
   ================================= 
   file chess2.mos
   ```````````````
   Indexing arrays by variables.
   
   (c) 2008 Fair Isaac Corporation
       author: S. Heipcke, 2001
*******************************************************!)
model Chess2
 uses "mmxprs"
 
 declarations
  Allvars: set of mpvar
  DescrV: array(Allvars) of string
  small, large: mpvar
 end-declarations
 DescrV(small):= "Number of small chess sets"
 DescrV(large):= "Number of large chess sets"
 Profit:=  5*small + 20*large
 Lathe:=   3*small + 2*large <= 160
 Boxwood:=   small + 3*large <= 200
 maximize(Profit)
 writeln("Solution:\n Objective: ", getobjval)
 writeln(DescrV(small), ": ", getsol(small))
 writeln(DescrV(large), ": ", getsol(large))
end-model
 |