Trait relp::algorithm::two_phase::matrix_provider::MatrixProvider [−][src]
pub trait MatrixProvider { type Column: Column; type Cost; type Rhs: Rhs; fn column(&self, j: usize) -> Self::Column; fn cost_value(&self, j: usize) -> Self::Cost; fn right_hand_side(&self) -> DenseVector<Self::Rhs>; fn bound_row_index(
&self,
j: usize,
bound_type: BoundDirection
) -> Option<usize>; fn nr_constraints(&self) -> usize; fn nr_variable_bounds(&self) -> usize; fn nr_columns(&self) -> usize; fn reconstruct_solution<G>(
&self,
column_values: SparseVector<G, G>
) -> SparseVector<G, G>
where
G: SparseElement<G> + SparseComparator; fn nr_rows(&self) -> usize { ... } }
Expand description
Abstract interface for a matrix and constraint vector.
This is the data of the “problem relative to the initial basis”; that is, nothing in
data structures implementing this trait determines a basis. The implementors of this trait
should be primarily read-only, with basis changes, the Carry
fields of the Tableau
should change instead.
Note that a this trait doesn’t have to be implemented by a (sparse) matrix data structure per se; it could also be implemented by a graph, which lets itself be represented by data in a matrix. The indexing for the variables and constraints is as follows:
/ || Vars of which we want a solution | Constraint slack vars | Bound slack vars | ==================||==================================|=======================|==================|—– Constraints || constants | constants | 0 || b | ——————||–––––––––––––––––|———————–|——————||—| || | | +/- 1 | Bound constraints || constants (one 1 per row) | 0 | +/- 1 | || | | +/- 1 |
Associated Types
Representation of a column of the matrix.
TODO(ARCHITECTURE): When GATs are working, cloning can be avoided in some implementations, such as the ones that explicitly store the column data, by giving this associated type a lifetime parameter. Keep an eye on https://github.com/rust-lang/rust/issues/44265.
Cost row type.
This type will often be of the form Option<_>
so to not have to store any zero values, the
inner type would never be zero in that case.
Required methods
fn cost_value(&self, j: usize) -> Self::Cost
fn cost_value(&self, j: usize) -> Self::Cost
fn right_hand_side(&self) -> DenseVector<Self::Rhs>
fn right_hand_side(&self) -> DenseVector<Self::Rhs>
Constraint values.
Note: constraint values of both the constraints and bounds. Lengths should be
self.nr_rows()
.
TODO(OPTIMIZATION): Can this clone be avoided?
Return value
A dense vector of constraint values, often called b
in mathematical notation.
fn bound_row_index(&self, j: usize, bound_type: BoundDirection) -> Option<usize>
fn bound_row_index(&self, j: usize, bound_type: BoundDirection) -> Option<usize>
Index of the row of a virtual bound, if any.
TODO(ARCHITECTURE): Currently, the return value is a row index. Make this relative to
self.nr_constraints
?
Arguments
j
: Variable index for the bound, if it exists.bound_type
: Whether it concerns a lower or upper bound.
Return value
The index of the row in which the bound is virtually represented, if the bound exists.
fn nr_constraints(&self) -> usize
fn nr_constraints(&self) -> usize
The number of constraints in the problem. This excludes simple variable bounds.
fn nr_variable_bounds(&self) -> usize
fn nr_variable_bounds(&self) -> usize
The number of simple variable bounds in the problem. This excludes more complicated constraints.
fn nr_columns(&self) -> usize
fn nr_columns(&self) -> usize
The total number of columns in the provided virtual matrix. This does not include artificial
variables; those are virtually represented by the Artificial
TableauType
.
fn reconstruct_solution<G>(
&self,
column_values: SparseVector<G, G>
) -> SparseVector<G, G> where
G: SparseElement<G> + SparseComparator,
fn reconstruct_solution<G>(
&self,
column_values: SparseVector<G, G>
) -> SparseVector<G, G> where
G: SparseElement<G> + SparseComparator,
Reconstruct a solution.
Not all variables that a provider presents to the solution algorithms might be relevant for the final solution. Free variables that are split, for example, could be recombined here.
Arguments
column_values
: A solution for each of the variables that this provider presents.
Return value
A solution that might be smaller than the number of variables in this problem.