Ejemplo n.º 1
0
static_matrix<T, X>::static_matrix(static_matrix const &A, unsigned * /* basis */) :
    m_work_pivot_vector(A.row_count(), numeric_traits<T>::zero()) {
    unsigned m = A.row_count();
    init_row_columns(m, m);
    while (m--) {
        for (auto & col : A.m_columns[m]){
            set(col.m_i, m, A.get_value_of_column_cell(col));
        }
    }
}
Ejemplo n.º 2
0
void lar_solver::fill_row_of_A(static_matrix<U, V> & A, unsigned i, canonic_left_side * ls) {
    for (auto & t : ls->m_coeffs) {
        var_index vi = t.second;
        unsigned column = get_column_index_from_var_index(vi);
        lean_assert(is_valid(column));
        A.set(i, column, convert_struct<U, mpq>::convert(t.first));
    }
    unsigned additional_column = get_column_index_from_var_index(ls->m_additional_var_index);
    lean_assert(is_valid(additional_column));
    A.set(i, additional_column, - one_of_type<U>());
}
Ejemplo n.º 3
0
void lar_solver::prepare_core_solver_fields(static_matrix<U, V> & A, std::vector<V> & x,
                                            std::vector<V> & low_bound,
                                            std::vector<V> & upper_bound) {
    create_matrix_A(A);
    fill_bounds_for_core_solver(low_bound, upper_bound);
    if (m_status == INFEASIBLE) {
        lean_assert(false); // not implemented
    }
    resize_and_init_x_with_zeros(x, A.column_count());
    lean_assert(m_lar_core_solver_params.m_basis.size() == A.row_count());
}
Ejemplo n.º 4
0
void lar_solver::create_matrix_A(static_matrix<U, V> & A) {
    unsigned m = m_set_of_canonic_left_sides.size();
    fill_set_of_active_var_indices();
    unsigned n = m_set_of_active_var_indices.size() + m;
    A.init_empty_matrix(m, n);
    unsigned i = 0;
    for (auto t : m_set_of_canonic_left_sides) {
        lean_assert(t->size() > 0);
        if (is_valid(t->m_row_index))
            fill_row_of_A(A, i++, t);
    }
}
Ejemplo n.º 5
0
void assign( static_matrix<T,Row,Col>&src, dynamic_matrix<T>& dst )
{
    assert(dst.row()==Row);
    assert(dst.col()==Col);
    memcpy(src.begin(), dst.begin(), Row*Col*sizeof(T));
}
Ejemplo n.º 6
0
void assign( static_matrix<U,Row,Col>&src, dynamic_matrix<T>& dst )
{
    assert(dst.row()==Row);
    assert(dst.col()==Col);
    std::copy(src.begin(), src.end(), dst.begin());
}