If an array of decision variables of type mpvar is created as a dynamic array then its entries must be created explicitly using the subroutine create (doesx.mos). Using finalize it is possible to turn a dynamic set into a constant set (doesx2.mos).
(!******************************************************
Mosel User Guide Example Problems
=================================
file doesx.mos
``````````````
Working with dynamic arrays of variables.
(c) 2008 Fair Isaac Corporation
author: Bob Daniel, 2001, rev. Sep. 2018
*******************************************************!)
model doesx
public declarations
IR = 1..15
WHICH: set of integer
x: dynamic array(IR) of mpvar
Obj,C: linctr
end-declarations
! Read data from file
initializations from 'doesx.dat'
WHICH
end-initializations
! Create the x variables that exist
forall(i in WHICH) create(x(i))
! Build a little model to show what esists
Obj:= sum(i in IR) x(i)
C:= sum(i in IR) i * x(i) >= 5
exportprob(0, "", Obj) ! Display the model
end-model
(!******************************************************
Mosel User Guide Example Problems
=================================
file doesx2.mos
```````````````
Using 'finalize' to turn a dynamic set into
a constant set.
(c) 2008 Fair Isaac Corporation
author: Bob Daniel, 2001, rev. Sep. 2018
*******************************************************!)
model doesx2
public declarations
WHICH: set of integer
Obj,C: linctr
end-declarations
initializations from 'doesx.dat'
WHICH
end-initializations
finalize(WHICH)
public declarations
x: array(WHICH) of mpvar ! Here the array is _not_ dynamic
end-declarations ! because the set has been finalized
Obj:= sum(i in WHICH) x(i)
C:= sum(i in WHICH) i * x(i) >= 5
exportprob(0, "", Obj)
end-model