xpress.vars
xpress.vars |
Purpose
Creates an indexed set or map of variables. Similar to the creation of a single variable with
xpress.var,
vars allows for using one or more index sets, specified as sets, lists,
range objects, or any iterable object. Specifying a number
k as an argument is equivalent to
range(k) but can be used to create NumPy multiarrays of variables, and allows for more efficient creation. The result is otherwise a Python dictionary of variables, whose keys are tuple of indices. A collection of variables
x that is created with
vars can be indexed, for instance, as
x[i,j] where
i and
j are indices in the lists provided.
Synopsis
x = xpress.vars(*indices, name="x", lb=0, ub=xpress.infinity, threshold=0, vartype=xpress.continuous)
Arguments
indices
|
One or more lists, sets, ranges, or iterable objects to be combined; in alternative, one can specify one or more numbers
k to signify the range
0..k-1. Using only numbers as argument will yield a NumPy multiarray with the dimensions as specified by the arguments themselves.
|
name
|
Prefix name for each variable, to be amended with the tuple of indices.
|
lb
|
Lower bound for all variables in the map.
|
ub
|
Upper bound for all variables in the map.
|
threshold
|
Threshold for all variables in the map; only used if the variables are partially integer.
|
vartype
|
Type of all variables in the map, similar to the definition of single variables.
|
Example
The following creates a variable map with 6 variables whose indices vary in the set
{(0,'a'),(0,'b'),(0,'c'),(1,'a'),(1,'b'),(1,'c')}:
x = xpress.vars([0,1],['a','b','c'])
The following creates a variable map with 6 variables whose indices vary in the set
{(0,0),(0,1),(0,2),(1,0),(1,1),(1,2)}:
x = xpress.vars(2,3)
The code below creates a variable map with 5 integer variables with names
'y(a)', 'y(b)', 'y(c)', 'y(d)', 'y(e)' and creates a constraint to bound their sum:
x = xpress.vars(['a','b','c','d','e'], name='y', vartype=xpress.integer) con1 = xpress.Sum(x) <= 4
The code below creates a variable map using the
range operator in Python:
x = xpress.vars(range(5), name='y', vartype=xpress.integer) con1 = xpress.Sum(x) <= 4
The following example creates a Numpy multiarray of dimensions
3,7,4 with default (i.e., interface-provided) names:
x = xpress.vars(3,7,4, name="", lb=-1, ub=1)
Note that specifying anything other than a number yields a dictionary rather than a Numpy multiarray. The above mode can be used when creating large arrays of variables because specifying
name="" allows for more efficient creation.
Finally, the following creates a variable indexed by the set defined right before:
S = set() S.add('john') S.add('cleese') x = xpress.vars(S, name='y', vartype=xpress.integer)
Further information
All lists must contain non-repeated elements to avoid having variables with equal names. If a list in the argument is, for instance,
['a','b','a'], an error is returned.
Related topics
xpress.var