diff --git a/src/math/lp/lp_core_solver_base.cpp b/src/math/lp/lp_core_solver_base.cpp index 90101e998..b76976d37 100644 --- a/src/math/lp/lp_core_solver_base.cpp +++ b/src/math/lp/lp_core_solver_base.cpp @@ -61,7 +61,6 @@ template lp::lp_core_solver_base<lp::mpq, lp::numeric_pair<lp::mpq> >::lp_core_s const vector<lp::numeric_pair<lp::mpq> >&, const vector<lp::numeric_pair<lp::mpq> >&); template bool lp::lp_core_solver_base<lp::mpq, lp::numeric_pair<lp::mpq> >::print_statistics_with_cost_and_check_that_the_time_is_over(lp::numeric_pair<lp::mpq>, std::ostream&); -template void lp::lp_core_solver_base<lp::mpq, lp::numeric_pair<lp::mpq> >::snap_xN_to_bounds_and_fill_xB(); template void lp::lp_core_solver_base<lp::mpq, lp::numeric_pair<lp::mpq> >::solve_Ax_eq_b(); template void lp::lp_core_solver_base<lp::mpq, lp::numeric_pair<lp::mpq> >::add_delta_to_entering(unsigned int, const lp::numeric_pair<lp::mpq>&); diff --git a/src/math/lp/lp_core_solver_base.h b/src/math/lp/lp_core_solver_base.h index e54c88489..c9b42f28b 100644 --- a/src/math/lp/lp_core_solver_base.h +++ b/src/math/lp/lp_core_solver_base.h @@ -74,7 +74,7 @@ public: vector<X> & m_x; // a feasible solution, the fist time set in the constructor vector<T> & m_costs; lp_settings & m_settings; - lu<static_matrix<T, X>> * m_factorization = nullptr; + vector<T> m_y; // the buffer for yB = cb // a device that is able to solve Bx=c, xB=d, and change the basis const column_namer & m_column_names; @@ -134,7 +134,7 @@ public: void init(); virtual ~lp_core_solver_base() { - delete m_factorization; + } vector<unsigned> & non_basis() { @@ -413,9 +413,6 @@ public: } - void snap_non_basic_x_to_bound_and_free_to_zeroes(); - void snap_xN_to_bounds_and_fill_xB(); - non_basic_column_value_position get_non_basic_column_value_position(unsigned j) const; diff --git a/src/math/lp/lp_core_solver_base_def.h b/src/math/lp/lp_core_solver_base_def.h index bc902e8b0..01aa9802e 100644 --- a/src/math/lp/lp_core_solver_base_def.h +++ b/src/math/lp/lp_core_solver_base_def.h @@ -554,54 +554,10 @@ find_error_in_BxB(vector<X>& rs){ // recalculates the projection of x to B, such that Ax = b template <typename T, typename X> void lp_core_solver_base<T, X>:: solve_Ax_eq_b() { - if (numeric_traits<X>::precise()) { - vector<X> rs(m_m()); - rs_minus_Anx(rs); - m_factorization->solve_By(rs); - copy_rs_to_xB(rs); - } - else { - vector<X> rs(m_m()); - rs_minus_Anx(rs); - vector<X> rrs = rs; // another copy of rs - m_factorization->solve_By(rs); - copy_rs_to_xB(rs); - find_error_in_BxB(rrs); - m_factorization->solve_By(rrs); - add_delta_to_xB(rrs); - } + lp_assert(false); } - - -template <typename T, typename X> void lp_core_solver_base<T, X>:: -snap_non_basic_x_to_bound_and_free_to_zeroes() { - for (unsigned j : non_basis()) { - lp_assert(j < m_x.size()); - switch (m_column_types[j]) { - case column_type::fixed: - case column_type::boxed: - case column_type::lower_bound: - m_x[j] = m_lower_bounds[j]; - break; - case column_type::upper_bound: - m_x[j] = m_upper_bounds[j]; - break; - default: - m_x[j] = zero_of_type<X>(); - break; - } - } -} -template <typename T, typename X> void lp_core_solver_base<T, X>:: -snap_xN_to_bounds_and_fill_xB() { - snap_non_basic_x_to_bound(); - solve_Ax_eq_b(); -} - - - template <typename T, typename X> non_basic_column_value_position lp_core_solver_base<T, X>:: get_non_basic_column_value_position(unsigned j) const { switch (m_column_types[j]) { diff --git a/src/math/lp/lp_primal_core_solver_def.h b/src/math/lp/lp_primal_core_solver_def.h index 19ffaa1ea..7764ce6d2 100644 --- a/src/math/lp/lp_primal_core_solver_def.h +++ b/src/math/lp/lp_primal_core_solver_def.h @@ -642,11 +642,7 @@ template <typename T, typename X> void lp_primal_core_solver<T, X>::init_run( template <typename T, typename X> void lp_primal_core_solver<T, X>::calc_working_vector_beta_for_column_norms(){ - lp_assert(numeric_traits<T>::precise() == false); - lp_assert(this->m_ed.is_OK()); - lp_assert(m_beta.is_OK()); - m_beta = this->m_ed; - this->m_factorization->solve_yB_with_error_check_indexed(m_beta, this->m_basis_heading, this->m_basis, this->m_settings); + lp_assert(false); } template <typename T, typename X> @@ -758,10 +754,7 @@ template <typename T, typename X> unsigned lp_primal_core_solver<T, X>::solve() } template <typename T, typename X> void lp_primal_core_solver<T, X>::delete_factorization() { - if (this->m_factorization != nullptr) { - delete this->m_factorization; - this->m_factorization = nullptr; - } + lp_assert(false); } // according to Swietanowski, " A new steepest edge approximation for the simplex method for linear programming" @@ -776,15 +769,7 @@ template <typename T, typename X> void lp_primal_core_solver<T, X>::init_column_ // debug only template <typename T, typename X> T lp_primal_core_solver<T, X>::calculate_column_norm_exactly(unsigned j) { - lp_assert(numeric_traits<T>::precise() == false); - indexed_vector<T> w(this->m_m()); - this->m_A.copy_column_to_vector(j, w); - vector<T> d(this->m_m()); - this->m_factorization->solve_Bd_when_w_is_ready(d, w); - T ret = zero_of_type<T>(); - for (auto v : d) - ret += v*v; - return ret+1; + lp_assert(false); } template <typename T, typename X> void lp_primal_core_solver<T, X>::update_or_init_column_norms(unsigned entering, unsigned leaving) {