Usually, the notions constraint and row, and the notions variable and column, respectively, are used equivalently.
Within ABACUS constraints and rows are different items. Constraints are stored in the pool and a subproblem has a set of active constraints. Only if a constraint is added to the linear program, then the corresponding row is computed. More precisely, a row is a representation of a constraint associated with a certain variable set.
The reasons
for this differentiation can be explained with the subtour elimination
constraints
of the traveling salesman problem, which are defined for subsets W of the nodes
of a graph as
. Storing this inequality as it is added
to the linear program would require to store all edges (variables)
with both endnodes in the set W. Such a format would require
storage space. However, it would be also sufficient
to store the node set W requiring
storage space.
Given the variable e associated with the edge (t,h), then the coefficient
of e in the subtour elimination constraint is 1 if t and h are
contained in W, 0 otherwise.
For the solution of the traveling salesman problem we also want to apply sparse graph techniques. Therefore, storing the coefficients of all active and inactive variables of a subtour elimination constraint would waste a lot of memory. If we store only the coefficients of the variables that are active when the constraint is generated, then the computation of the coefficient of an added variable would be difficult or even impossible. However, if we store all nodes defining the constraint, then the coefficients of variables that are later added can be determined easily.
Efficient memory management and dynamic variable generation are the reason why we distinguish between constraints and rows. Each constraint must have a member function that returns the coefficient for a variable such that we can determine the row corresponding to a set of variables.
In these considerations ``constraint'' can be also replaced by ``variable'' and ``row'' by ``column''. A column is the representation of a variable corresponding to a certain constraint set. Again, we use the traveling salesman problem as example. A variable for the traveling salesman problem corresponds to an edge in a graph. Hence, it can be represented by its end nodes. The column associated with this variable consists of the coefficients of the edge for all active constraints.
We implemented these concepts in the classes ABA_CONSTRAINT/ABA_VARIABLE , which are used for the representation of active constraints and variables and for the storage of constraints and variables in the pools, and ABA_ROW/ABA_COLUMN , which are used in particular in the interface to the LP-solver.
This differentiation between constraints/variables and rows/columns is not used by any other system for the implementation of linear-programming based branch-and-bound algorithms, because they are usually designed for the solution of general mixed integer optimization problem s, which do not necessarily require this distinction. However, this concept is crucial for a practically efficient and simple application of ABACUS to combinatorial optimization problem s.