Documentation


Model.addVars()

addVars ( *indices, lb=0.0, ub=GRB.INFINITY, obj=0.0, vtype=GRB.CONTINUOUS, name="" )

Add multiple decision variables to a model.

Returns a Gurobi tupledict object that contains the newly created variables. The keys for the tupledict are derived from the indices argument(s). The arguments for this method can take several different forms, which will be described now.

The first arguments provide the indices that will be used as keys to access the variables in the returned tupledict. In its simplest version, you would specify one or more integer values, and this method would create the equivalent of a multi-dimensional array of variables. For example, x = model.addVars(2, 3) would create six variables, accessed as x[0,0], x[0,1], x[0,2], x[1,0], x[1,1], and x[1,2].

In a more complex version, you can specify arbitrary lists of immutable objects, and this method will create variables for each member of the cross product of these lists. For example, x = model.addVars([3, 7], ['a', 'b', 'c']) would create six variables, accessed as x[3,'a'], x[7,'c'], etc.

You can also provide your own list of tuples as indices. For example, x = model.addVars([(3,'a'), (3,'b'), (7,'b'), (7,'c')]) would be accessed in the same way as the previous example (x[3,'a'], x[7,'c'], etc.), except that not all combinations will be present. This is typically how sparse indexing is handled.

Note that while the indices can be provided as multiple lists of objects, or as a list of tuples, the member values for a specific index must always be scalars (int, float, string, ...). For example, x = model.addVars([(1, 3), 7], ['a']) is not allowed, since the first argument for the first member would be (1, 3). Similarly, x = model.addVars([((1, 3),'a'), (7,'a')]) is also not allowed.

The named arguments (lb, obj, etc.) can take several forms. If you provide a scalar value (or use the default), then every variable will use that value. Thus, for example, lb=1.0 will give every created variable a lower bound of 1.0. Note that a scalar value for the name argument has a special meaning, which will be discussed separately.

You can also provide a Python dict as the argument. In that case, the value for each variable will be pulled from the dict, using the indices argument to build the keys. For example, if the variables created by this method are indexed as x[i,j], then the dict provided for the argument should have an entry for each possible (i,j) value.

Finally, if your indices argument is a single list, you can provide a Python list of the same length for the named arguments. For each variable, it will pull the value from the corresponding position in the list.

As noted earlier, the name argument is special. If you provide a scalar argument for the name, that argument will be transformed to have a subscript that corresponds to the index of the associated variable. For example, if you do x = model.addVars(2,3,name="x"), the variables will get names x[0,0], x[0,1], etc.

Arguments:

indices: Indices for accessing the new variables.

lb (optional): Lower bound(s) for new variables.

ub (optional): Upper bound(s) for new variables.

obj (optional): Objective coefficient(s) for new variables.

vtype (optional): Variable type(s) for new variables.

name (optional): Names for new variables. The given name will be subscripted by the index of the generator expression, so if the index is an integer, c would become c[0], c[1], etc. Note that the generated names will be stored as ASCII strings, so you should avoid using names that contain non-ASCII characters. In addition, names that contain spaces are strongly discouraged, because they can't be written to LP format files.

Return value:

New tupledict object that contains the new variables as values, using the provided indices as keys.

Example usage:

  # 3-D array of binary variables
  x = model.addVars(3, 4, 5, vtype=GRB.BINARY)

  # variables index by tuplelist
  l = tuplelist([(1, 2), (1, 3), (2, 3)])
  y = model.addVars(l, ub=[1, 2, 3])