mirror of https://github.com/CGAL/cgal
- Is-symmetric tag removed; now all input is assumed to be symmetric.
Reason: the tag is unecessary, and allowing non-symmetric input only allows the user to enter redundant information
This commit is contained in:
parent
c8303d9b37
commit
68fc833cb5
|
|
@ -100,7 +100,7 @@ QP_solution<ET> solve_quadratic_program
|
|||
{
|
||||
typedef QP_solver<
|
||||
QuadraticProgram, ET,
|
||||
QP_solver_impl::QP_tags<Tag_false, Tag_false, Tag_false> >
|
||||
QP_solver_impl::QP_tags<Tag_false, Tag_false> >
|
||||
Solver;
|
||||
const Solver* s = new Solver(qp);
|
||||
return QP_solution<ET>(s);
|
||||
|
|
@ -112,7 +112,7 @@ QP_solution<ET> solve_nonnegative_quadratic_program
|
|||
{
|
||||
typedef QP_solver<
|
||||
QuadraticProgram, ET,
|
||||
QP_solver_impl::QP_tags<Tag_false, Tag_false, Tag_true> >
|
||||
QP_solver_impl::QP_tags<Tag_false, Tag_true> >
|
||||
Solver;
|
||||
const Solver* s = new Solver(qp);
|
||||
return QP_solution<ET>(s);
|
||||
|
|
@ -124,7 +124,7 @@ QP_solution<ET> solve_linear_program
|
|||
{
|
||||
typedef QP_solver<
|
||||
QuadraticProgram, ET,
|
||||
QP_solver_impl::QP_tags<Tag_true, Tag_false, Tag_false> >
|
||||
QP_solver_impl::QP_tags<Tag_true, Tag_false> >
|
||||
Solver;
|
||||
const Solver* s = new Solver(qp);
|
||||
return QP_solution<ET>(s);
|
||||
|
|
@ -136,7 +136,7 @@ QP_solution<ET> solve_nonnegative_linear_program
|
|||
{
|
||||
typedef QP_solver<
|
||||
QuadraticProgram, ET,
|
||||
QP_solver_impl::QP_tags<Tag_true, Tag_false, Tag_true> >
|
||||
QP_solver_impl::QP_tags<Tag_true, Tag_true> >
|
||||
Solver;
|
||||
const Solver* s = new Solver(qp);
|
||||
return QP_solution<ET>(s);
|
||||
|
|
|
|||
|
|
@ -568,9 +568,6 @@ private:
|
|||
std::string D_section; // name of the section from which D was read
|
||||
|
||||
// cached data:
|
||||
bool is_symmetric_cached, is_symmetric_;
|
||||
bool has_equalities_only_and_full_rank_cached,
|
||||
has_equalities_only_and_full_rank_;
|
||||
bool is_in_standard_form_cached, is_in_standard_form_;
|
||||
|
||||
// further data gathered from MPS file:
|
||||
|
|
@ -728,6 +725,15 @@ private: // private helpers:
|
|||
return false;
|
||||
}
|
||||
|
||||
bool err3(const char* msg,
|
||||
const std::string& parameter1,
|
||||
const std::string& parameter2,
|
||||
const std::string& parameter3) {
|
||||
error_msg =
|
||||
replace1(replace1(replace1(msg,parameter1),parameter2),parameter3);
|
||||
return false;
|
||||
}
|
||||
|
||||
void warn(const std::string& msg) {
|
||||
std::cerr << "MPS parser warning: " << msg << '.' << std::endl;
|
||||
}
|
||||
|
|
@ -888,16 +894,6 @@ public: // methods:
|
|||
{
|
||||
CGAL_qpe_assertion(0<=i && i<n());
|
||||
return var_by_index[i];
|
||||
// for (Index_map::const_iterator it = var_names.begin();
|
||||
// it != var_names.end();
|
||||
// ++it)
|
||||
// if ((*it).second == i)
|
||||
// return (*it).first;
|
||||
|
||||
// CGAL_qpe_assertion(false); // should never get here; following
|
||||
// // only to fix compiler warnings
|
||||
// static std::string dummy;
|
||||
// return dummy;
|
||||
}
|
||||
|
||||
// Returns the section name of the MPS stream in which the D matrix
|
||||
|
|
@ -983,6 +979,10 @@ private:
|
|||
CGAL_qpe_assertion(is_valid());
|
||||
return D_iterator(D_.begin(), D_Beginner());
|
||||
}
|
||||
|
||||
// checks symmetry; if false, it assigns offending i and j
|
||||
bool is_symmetric(Tag_true, unsigned int&, unsigned int&) const;
|
||||
bool is_symmetric(Tag_false, unsigned int&, unsigned int&) const;
|
||||
|
||||
public:
|
||||
|
||||
|
|
@ -1037,11 +1037,6 @@ public:
|
|||
return l_.begin();
|
||||
}
|
||||
|
||||
// Returns true iff the MPS stream could be successfully parsed and
|
||||
// the loaded QP instance has a symmetric D matrix (if it has a D
|
||||
// matrix at all).
|
||||
bool is_symmetric();
|
||||
|
||||
// Returns true iff the MPS stream could be successfully parsed and
|
||||
// the loaded QP instance has a D matrix that is zero (i.e., iff the
|
||||
// QP is actually an LP).
|
||||
|
|
|
|||
|
|
@ -148,7 +148,6 @@ public: // public types
|
|||
|
||||
// types from the Tags
|
||||
typedef typename Tags::Is_linear Is_linear;
|
||||
typedef typename Tags::Is_symmetric Is_symmetric;
|
||||
typedef typename Tags::Is_in_standard_form Is_in_standard_form;
|
||||
|
||||
// friends
|
||||
|
|
@ -270,12 +269,12 @@ private:
|
|||
A_row_by_index_iterator;
|
||||
|
||||
// Access to the matrix D is sometimes exact, and sometimes inexact:
|
||||
typedef QP_matrix_pairwise_accessor< D_iterator, Is_symmetric, ET >
|
||||
typedef QP_matrix_pairwise_accessor< D_iterator, Tag_true, ET >
|
||||
D_pairwise_accessor;
|
||||
typedef Join_input_iterator_1< Index_const_iterator,
|
||||
D_pairwise_accessor >
|
||||
D_pairwise_iterator;
|
||||
typedef QP_matrix_pairwise_accessor< D_iterator, Is_symmetric, D_entry >
|
||||
typedef QP_matrix_pairwise_accessor< D_iterator, Tag_true, D_entry >
|
||||
D_pairwise_accessor_inexact;
|
||||
typedef Join_input_iterator_1< Index_const_iterator,
|
||||
D_pairwise_accessor_inexact >
|
||||
|
|
@ -917,20 +916,20 @@ private:
|
|||
}
|
||||
|
||||
|
||||
template < class NT, class It >
|
||||
void mu_j__quadratic_part_( NT& mu_j, int j, It x_it,
|
||||
Tag_true is_linear) const;
|
||||
template < class NT, class It >
|
||||
void mu_j__quadratic_part_( NT& mu_j, int j, It x_it,
|
||||
Tag_false is_linear) const;
|
||||
template < class NT, class It >
|
||||
void mu_j__quadratic_part_( NT& mu_j, int j, It x_it,
|
||||
Tag_false is_linear,
|
||||
Tag_true is_symmetric) const;
|
||||
template < class NT, class It >
|
||||
void mu_j__quadratic_part_( NT& mu_j, int j, It x_it,
|
||||
Tag_false is_linear,
|
||||
Tag_false is_symmetric) const;
|
||||
// template < class NT, class It >
|
||||
// void mu_j__quadratic_part_( NT& mu_j, int j, It x_it,
|
||||
// Tag_true is_linear) const;
|
||||
// template < class NT, class It >
|
||||
// void mu_j__quadratic_part_( NT& mu_j, int j, It x_it,
|
||||
// Tag_false is_linear) const;
|
||||
// template < class NT, class It >
|
||||
// void mu_j__quadratic_part_( NT& mu_j, int j, It x_it,
|
||||
// Tag_false is_linear,
|
||||
// Tag_true is_symmetric) const;
|
||||
// template < class NT, class It >
|
||||
// void mu_j__quadratic_part_( NT& mu_j, int j, It x_it,
|
||||
// Tag_false is_linear,
|
||||
// Tag_false is_symmetric) const;
|
||||
|
||||
template < class NT, class It >
|
||||
void mu_j__slack_or_artificial_( NT& mu_j, int j, It lambda_it,
|
||||
|
|
@ -1462,17 +1461,11 @@ private:
|
|||
mu_j__quadratic_part( NT& mu_j, int j, It x_it, Tag_false) const
|
||||
{
|
||||
if ( is_phaseII) {
|
||||
if (check_tag(Is_symmetric())) { // D symmetric
|
||||
// 2 D_Bj^T * x_B
|
||||
mu_j += inv_M_B.inner_product_x( x_it,
|
||||
D_by_index_iterator( B_O.begin(),
|
||||
D_by_index_accessor( qp_D[ j]))) * NT( 2);
|
||||
} else { // D non-symmetric
|
||||
// ( D_Bj^T + D_jB) * x_B
|
||||
mu_j += inv_M_B.inner_product_x( x_it,
|
||||
D_pairwise_iterator_inexact( B_O.begin(),
|
||||
D_pairwise_accessor_inexact( qp_D, j)));
|
||||
}
|
||||
// 2 D_Bj^T * x_B
|
||||
mu_j += inv_M_B.inner_product_x
|
||||
( x_it,
|
||||
D_by_index_iterator( B_O.begin(),
|
||||
D_by_index_accessor( qp_D[ j]))) * NT( 2);
|
||||
}
|
||||
}
|
||||
|
||||
|
|
@ -1483,42 +1476,15 @@ private:
|
|||
{
|
||||
if ( is_phaseII) {
|
||||
mu_j += dd * w_j;
|
||||
if (check_tag(Is_symmetric())) { // D symmetric
|
||||
// 2 D_Bj^T * x_B
|
||||
mu_j += inv_M_B.inner_product_x( x_it,
|
||||
D_by_index_iterator( B_O.begin(),
|
||||
D_by_index_accessor( qp_D[ j]))) * NT( 2);
|
||||
} else { // D non-symmetric
|
||||
// ( D_Bj^T + D_jB) * x_B
|
||||
mu_j += inv_M_B.inner_product_x( x_it,
|
||||
D_pairwise_iterator_inexact( B_O.begin(),
|
||||
D_pairwise_accessor_inexact( qp_D, j)));
|
||||
}
|
||||
// 2 D_Bj^T * x_B
|
||||
mu_j += inv_M_B.inner_product_x
|
||||
( x_it,
|
||||
D_by_index_iterator( B_O.begin(),
|
||||
D_by_index_accessor( qp_D[ j]))) * NT( 2);
|
||||
}
|
||||
}
|
||||
|
||||
/*
|
||||
template < class NT, class It > inline // QP, D sym.
|
||||
void
|
||||
mu_j__quadratic_part( NT& mu_j, int j, It x_it, Tag_false, Tag_true) const
|
||||
{
|
||||
// 2 D_Bj^T * x_B
|
||||
mu_j += inv_M_B.inner_product_x( x_it,
|
||||
D_by_index_iterator( B_O.begin(),
|
||||
D_by_index_accessor( qp_D[ j])))
|
||||
* NT( 2);
|
||||
}
|
||||
|
||||
template < class NT, class It > inline // QP, D no-sym
|
||||
void
|
||||
mu_j__quadratic_part( NT& mu_j, int j, It x_it, Tag_false, Tag_false) const
|
||||
{
|
||||
// ( D_Bj^T + D_jB) * x_B
|
||||
mu_j += inv_M_B.inner_product_x( x_it,
|
||||
D_pairwise_iterator_inexact( B_O.begin(),
|
||||
D_pairwise_accessor_inexact( qp_D, j)));
|
||||
}
|
||||
*/
|
||||
template < class NT, class It > inline // no ineq.
|
||||
void
|
||||
mu_j__slack_or_artificial( NT& mu_j, int j, It lambda_it, const NT& dd, Tag_true) const
|
||||
|
|
@ -2085,11 +2051,9 @@ namespace QP_solver_impl {
|
|||
// Tags generator
|
||||
// --------------
|
||||
template < typename Linear,
|
||||
typename Symmetric,
|
||||
typename Standard_form >
|
||||
struct QP_tags {
|
||||
typedef Linear Is_linear;
|
||||
typedef Symmetric Is_symmetric;
|
||||
typedef Standard_form Is_in_standard_form;
|
||||
};
|
||||
|
||||
|
|
|
|||
|
|
@ -134,11 +134,6 @@ set(const Q& qp)
|
|||
}
|
||||
vout.out() << " ]" << std::endl;
|
||||
if (vout2.verbose()) {
|
||||
if (is_QP) {
|
||||
vout2.out() << "flag: D "
|
||||
<< (check_tag(Is_symmetric()) ? "" : "not ")
|
||||
<< "symmetric" << std::endl;
|
||||
}
|
||||
if (has_ineq)
|
||||
vout2.out() << "flag: has inequalities or rank not full"
|
||||
<< std::endl;
|
||||
|
|
|
|||
|
|
@ -65,7 +65,6 @@ bool has_linearly_independent_equations
|
|||
// solver Tags
|
||||
typedef QP_solver_impl::QP_tags<
|
||||
Tag_true, // Is_linear
|
||||
Tag_true, // Is_symmetric
|
||||
Tag_true> // Is_in_standard_form
|
||||
Tags;
|
||||
|
||||
|
|
|
|||
|
|
@ -42,8 +42,6 @@ QP_from_mps(std::istream& in,bool use_CPLEX_convention,
|
|||
is_linear_(true),
|
||||
use_CPLEX_convention(use_CPLEX_convention),
|
||||
it0(0),
|
||||
is_symmetric_cached(false),
|
||||
has_equalities_only_and_full_rank_cached(false),
|
||||
is_in_standard_form_cached(false),
|
||||
use_put_back_token(false)
|
||||
{
|
||||
|
|
@ -125,27 +123,40 @@ const std::string& QP_from_mps<IT_, Is_linear_,
|
|||
template<typename IT_, typename Is_linear_,
|
||||
typename Sparse_D_,
|
||||
typename Sparse_A_>
|
||||
bool QP_from_mps<IT_, Is_linear_,
|
||||
Sparse_D_,
|
||||
Sparse_A_>::is_symmetric()
|
||||
bool QP_from_mps<IT_, Is_linear_, Sparse_D_, Sparse_A_>
|
||||
::is_symmetric(Tag_false sparse_D, unsigned int&i, unsigned int&j) const
|
||||
{
|
||||
if (!is_format_okay_)
|
||||
return false;
|
||||
// only called if we have a qp, i.e. if D is initialized
|
||||
const unsigned int var_nr = var_names.size();
|
||||
for (i=0; i<var_nr; ++i)
|
||||
for (j=i+1; j<var_nr; ++j)
|
||||
if (D_[i][j] != D_[j][i])
|
||||
return false;
|
||||
return true;
|
||||
}
|
||||
|
||||
if (!is_symmetric_cached) {
|
||||
is_symmetric_ = true;
|
||||
if (!is_linear()) {
|
||||
const unsigned int var_nr = var_names.size();
|
||||
for (unsigned int i=0; i<var_nr; ++i)
|
||||
for (unsigned int j=i+1; j<var_nr; ++j)
|
||||
if (get_entry_in_D (i, j, Sparse_D_()) !=
|
||||
get_entry_in_D (j, i, Sparse_D_())) {
|
||||
is_symmetric_ = false;
|
||||
return is_symmetric_;
|
||||
}
|
||||
template<typename IT_, typename Is_linear_,
|
||||
typename Sparse_D_,
|
||||
typename Sparse_A_>
|
||||
bool QP_from_mps<IT_, Is_linear_, Sparse_D_, Sparse_A_>
|
||||
::is_symmetric(Tag_true sparse_D, unsigned int&i, unsigned int&j) const
|
||||
{
|
||||
// only called if we have a qp, i.e. if D is initialized
|
||||
const unsigned int var_nr = var_names.size();
|
||||
for (i=0; i<var_nr; ++i) {
|
||||
typename Map::const_iterator b = D_[i].begin();
|
||||
typename Map::const_iterator e = D_[i].end();
|
||||
for (; b != e; ++b) {
|
||||
j = b->first;
|
||||
// check entry (j, i)
|
||||
IT expected_val = b->second;
|
||||
IT found_val = it0;
|
||||
typename Map::const_iterator it = D_[j].find(i);
|
||||
if (it != D_[j].end()) found_val = it->second;
|
||||
if (expected_val != found_val) return false;
|
||||
}
|
||||
}
|
||||
return is_symmetric_;
|
||||
return true;
|
||||
}
|
||||
|
||||
|
||||
|
|
@ -597,8 +608,7 @@ bool QP_from_mps<IT_, Is_linear_,
|
|||
Sparse_A_>::qmatrix_section()
|
||||
{
|
||||
std::string t = token();
|
||||
if (t!="QMATRIX" && t!="DMATRIX" && t!="QUADOBJ") { // (Note: *MATRIX
|
||||
// section is optional.)
|
||||
if (t!="QMATRIX" && t!="DMATRIX" && t!="QUADOBJ") { // optional
|
||||
put_token_back(t);
|
||||
return true;
|
||||
}
|
||||
|
|
@ -646,19 +656,27 @@ bool QP_from_mps<IT_, Is_linear_,
|
|||
}
|
||||
|
||||
// set entry in D:
|
||||
set_entry_in_D(var1_index,var2_index,val,
|
||||
Sparse_D());
|
||||
set_entry_in_D(var1_index, var2_index, val, Sparse_D());
|
||||
if (only_get_lower_part)
|
||||
// duplicate entry if not on diagonal
|
||||
if (var1_index != var2_index)
|
||||
set_entry_in_D(var2_index,var1_index,val,
|
||||
Sparse_D());
|
||||
set_entry_in_D(var2_index, var1_index, val, Sparse_D());
|
||||
|
||||
// read next token:
|
||||
t = token();
|
||||
}
|
||||
put_token_back(t);
|
||||
|
||||
// now check symmetry
|
||||
unsigned int bad_i, bad_j;
|
||||
if (!is_symmetric(Sparse_D(), bad_i, bad_j)) {
|
||||
std::string bad_i_name = var_by_index[bad_i];
|
||||
std::string bad_j_name = var_by_index[bad_j];
|
||||
return
|
||||
err3("nonsymmetric '%' section for variables '%' and '%'",
|
||||
D_section, bad_i_name, bad_j_name);
|
||||
}
|
||||
|
||||
return true;
|
||||
}
|
||||
|
||||
|
|
@ -689,9 +707,7 @@ std::ostream& operator<<(std::ostream& o,
|
|||
<< "equalities only and full rank: not checked" << endl;
|
||||
//<< (qp.has_equalities_only_and_full_rank()? yes : no) << endl;
|
||||
if (!qp.is_linear())
|
||||
o << " symmetric D matrix: not checked" << endl
|
||||
// << (qp.is_symmetic()? yes : no) << endl
|
||||
<< " D matrix storage format: "
|
||||
o << " D matrix storage format: "
|
||||
<< qp.D_format_type() << endl;
|
||||
|
||||
if (qp.verbosity() > 1) {
|
||||
|
|
|
|||
|
|
@ -160,24 +160,8 @@ public:
|
|||
QP_matrix_pairwise_accessor() {}
|
||||
|
||||
QP_matrix_pairwise_accessor( MatrixIt it, int row)
|
||||
{
|
||||
if ( check_tag( IsSymmetric())) { // store i-th row
|
||||
v = it[ row];
|
||||
m = it; // (See (*) below.)
|
||||
} else { // matrix and index
|
||||
m = it;
|
||||
v = it[0]; // (See (*) below.)
|
||||
r = row;
|
||||
}
|
||||
// (*) These two statements are not needed, semantically. If we
|
||||
// drop them, however, the if-clause will default-construct the
|
||||
// iterator 'm' and the else-clause will default-construct the
|
||||
// iterator 'v'. In any case we end up with a singular iterator,
|
||||
// and as instances of this class are copied around, this violates
|
||||
// the requirement that singular iterators must not be copied.
|
||||
// (In other words: dropping these statements will cause assertion
|
||||
// violations when compiled with GCC using -D_GLIBCXX_DEBUG.)
|
||||
}
|
||||
: m (it), v (it[ row]), r (row)
|
||||
{}
|
||||
|
||||
ResultType operator () ( int c) const
|
||||
{
|
||||
|
|
@ -185,7 +169,14 @@ public:
|
|||
}
|
||||
|
||||
ResultType entry_pair( int c, Tag_true ) const // symmetric
|
||||
{ return ResultType(v[ c]) * 2; }
|
||||
{
|
||||
// make sure that only entries on or below the diagonal are
|
||||
// accessed
|
||||
if (c <= r)
|
||||
return ResultType(v[ c]) * 2;
|
||||
else
|
||||
return ResultType(m[ c][ r]) * 2;
|
||||
}
|
||||
|
||||
ResultType entry_pair( int c, Tag_false) const // not symmetric
|
||||
{
|
||||
|
|
|
|||
|
|
@ -54,7 +54,7 @@ int main(const int argNr,const char **args) {
|
|||
#else
|
||||
typedef CGAL::Gmpzf ET;
|
||||
#endif
|
||||
typedef CGAL::QP_from_mps<IT, CGAL::Tag_false> QP;
|
||||
typedef CGAL::QP_from_mps<IT, CGAL::Tag_false, CGAL::Tag_true> QP;
|
||||
QP qp(std::cin,true,verbosity);
|
||||
|
||||
// check for format errors in MPS f\ile:
|
||||
|
|
|
|||
|
|
@ -155,11 +155,6 @@ void usage()
|
|||
<< "{fe,ff,pe,pf}, and file is a path to a MPS file. In addition,\n"
|
||||
<< "you can specify any of the following additional options:\n"
|
||||
<< " +l use the dedicated LP-solver on this instance\n"
|
||||
<< " +s use the dedicated solver for instances whose\n"
|
||||
<< " D matrix is symmetric\n"
|
||||
<< " +r use the dedicated solver for instances that only\n"
|
||||
<< " have equality constraints and whose coefficient\n"
|
||||
<< " matrix has full row rank\n"
|
||||
<< " +f use the dedicated solver for instances in standard\n"
|
||||
<< " form (i.e., all variables have bounds [0,+inf]).\n"
|
||||
<< " int assume the numbers in the MPS file are ints and use\n"
|
||||
|
|
@ -169,10 +164,11 @@ void usage()
|
|||
<< " rational assume the numbers in the MPS file are rationals\n"
|
||||
<< " use arbitrary-precision rationals internally\n"
|
||||
<< "If any option is not specified, the program will test all\n"
|
||||
<< "possible combinations (e.g., if '+s' is not specified, it will\n"
|
||||
<< "check whether D is symmetric and run both, the dedicated solver\n"
|
||||
<< "for symmetric and the non-dedicated solver on the instance).\n"
|
||||
<< "You can also negate the options 'l', 's', 'r', or 'f' by\n"
|
||||
<< "possible combinations (e.g., if '+l' is not specified, it will\n"
|
||||
<< "check whether the problem is linear and run both, the dedicated\n"
|
||||
<< "solver for the linear case and the non-dedicated solver on the\n"
|
||||
<< " instance).\n"
|
||||
<< "You can also negate the options 'l'or 'f' by\n"
|
||||
<< "replacing the '-' by a '+'.\n";
|
||||
std::exit(1);
|
||||
}
|
||||
|
|
@ -252,10 +248,6 @@ bool parse_options(std::istream& in,std::map<std::string,int>& options,
|
|||
good = options.insert(Arg("Is linear",1)).second;
|
||||
else if (t == "-l")
|
||||
good = options.insert(Arg("Is linear",0)).second;
|
||||
else if (t == "+s")
|
||||
good = options.insert(Arg("Is symmetric",1)).second;
|
||||
else if (t == "-s")
|
||||
good = options.insert(Arg("Is symmetric",0)).second;
|
||||
else if (t == "+f")
|
||||
good = options.insert(Arg("Is in standard form",1)).second;
|
||||
else if (t == "-f")
|
||||
|
|
@ -329,21 +321,11 @@ CGAL::QP_pricing_strategy<Q, ET, Tags> *
|
|||
return strat;
|
||||
}
|
||||
|
||||
// template<typename IT>
|
||||
// std::string print_IT (IT t)
|
||||
// {
|
||||
// using std::cout;
|
||||
// if (is_int(t)) return "int";
|
||||
// if (is_rational(t)) return "rational";
|
||||
// if (is_double(t)) return "double";
|
||||
// return "unknown";
|
||||
// }
|
||||
|
||||
template<typename Is_linear,
|
||||
typename Is_symmetric,
|
||||
typename Is_in_standard_form,
|
||||
typename IT,
|
||||
typename ET>
|
||||
typename ET,
|
||||
typename Sparse>
|
||||
bool process(const std::string& filename,
|
||||
const std::map<std::string,int>& options)
|
||||
{
|
||||
|
|
@ -357,7 +339,7 @@ bool process(const std::string& filename,
|
|||
std::ifstream in(filename.c_str());
|
||||
if (!in)
|
||||
bailout1("could not open file '%'",filename);
|
||||
typedef CGAL::QP_from_mps<IT, Tag_false> QP_instance;
|
||||
typedef CGAL::QP_from_mps<IT, Tag_false, Sparse, Sparse> QP_instance;
|
||||
QP_instance qp(in,true,verbosity);
|
||||
in.close();
|
||||
|
||||
|
|
@ -381,17 +363,13 @@ bool process(const std::string& filename,
|
|||
type==Rational_type && (is_double(IT()) || is_int(IT())))
|
||||
return true;
|
||||
|
||||
// check which properties the loaded QP has, and break if they are
|
||||
// in contradiction to the routine's compile-time flags:
|
||||
if (check_tag(Is_linear()) && !qp.is_linear() ||
|
||||
check_tag(Is_symmetric()) && !qp.is_symmetric() ||
|
||||
check_tag(Is_in_standard_form()) && !qp.is_in_standard_form())
|
||||
return true;
|
||||
|
||||
if (verbosity > 0)
|
||||
cout << "- Running a solver specialized for: "
|
||||
<< (check_tag(Is_linear())? "linear " : "")
|
||||
<< (check_tag(Is_symmetric())? "symmetric " : "")
|
||||
<< (check_tag(Is_in_standard_form())? "standard-form " : "")
|
||||
<< "file-IT=" << number_type << ' '
|
||||
<< "IT=" << (is_double(IT())? "double" :
|
||||
|
|
@ -410,8 +388,7 @@ bool process(const std::string& filename,
|
|||
cout << endl << qp;
|
||||
|
||||
|
||||
typedef CGAL::QP_solver_impl::QP_tags<Is_linear,
|
||||
Is_symmetric, Is_in_standard_form> Tags;
|
||||
typedef CGAL::QP_solver_impl::QP_tags<Is_linear,Is_in_standard_form> Tags;
|
||||
|
||||
// solve:
|
||||
CGAL::QP_pricing_strategy<QP_instance, ET, Tags> *s =
|
||||
|
|
@ -429,7 +406,6 @@ bool process(const std::string& filename,
|
|||
}
|
||||
|
||||
template<typename Is_linear,
|
||||
typename Is_symmetric,
|
||||
typename Is_in_standard_form>
|
||||
bool processType(const std::string& filename,
|
||||
const std::map<std::string,int>& options)
|
||||
|
|
@ -443,29 +419,51 @@ bool processType(const std::string& filename,
|
|||
|
||||
// do only this particular value or all possibilities:
|
||||
bool success = true;
|
||||
|
||||
// sparse representation
|
||||
#ifdef QP_INT
|
||||
if (!processOnlyOneValue || value==Int_type)
|
||||
if (!process<Is_linear,Is_symmetric,Is_in_standard_form,
|
||||
int,Integer>(filename,options))
|
||||
if (!process<Is_linear,Is_in_standard_form,
|
||||
int,Integer, Tag_true>(filename,options))
|
||||
success = false;
|
||||
#endif
|
||||
#ifdef QP_DOUBLE
|
||||
if (!processOnlyOneValue || value==Double_type)
|
||||
if (!process<Is_linear,Is_symmetric,Is_in_standard_form,
|
||||
double,Float>(filename,options))
|
||||
if (!process<Is_linear,Is_in_standard_form,
|
||||
double,Float, Tag_true>(filename,options))
|
||||
success = false;
|
||||
#endif
|
||||
#ifdef QP_RATIONAL
|
||||
if (!processOnlyOneValue || value==Rational_type)
|
||||
if (!process<Is_linear,Is_symmetric,Is_in_standard_form,
|
||||
Rational,Rational>(filename,options))
|
||||
if (!process<Is_linear,Is_in_standard_form,
|
||||
Rational,Rational, Tag_true>(filename,options))
|
||||
success = false;
|
||||
#endif
|
||||
|
||||
// dense representation
|
||||
#ifdef QP_INT
|
||||
if (!processOnlyOneValue || value==Int_type)
|
||||
if (!process<Is_linear,Is_in_standard_form,
|
||||
int,Integer, Tag_false>(filename,options))
|
||||
success = false;
|
||||
#endif
|
||||
#ifdef QP_DOUBLE
|
||||
if (!processOnlyOneValue || value==Double_type)
|
||||
if (!process<Is_linear,Is_in_standard_form,
|
||||
double,Float, Tag_false>(filename,options))
|
||||
success = false;
|
||||
#endif
|
||||
#ifdef QP_RATIONAL
|
||||
if (!processOnlyOneValue || value==Rational_type)
|
||||
if (!process<Is_linear,Is_in_standard_form,
|
||||
Rational,Rational, Tag_false>(filename,options))
|
||||
success = false;
|
||||
#endif
|
||||
|
||||
return success;
|
||||
}
|
||||
|
||||
template<typename Is_linear,
|
||||
typename Is_symmetric>
|
||||
template<typename Is_linear>
|
||||
bool processFType(const std::string& filename,
|
||||
const std::map<std::string,int>& options)
|
||||
{
|
||||
|
|
@ -477,42 +475,19 @@ bool processFType(const std::string& filename,
|
|||
bool success = true;
|
||||
#ifdef QP_F
|
||||
if (!processOnlyOneValue || value==true)
|
||||
if (!processType<Is_linear,Is_symmetric,Tag_true>(filename,options))
|
||||
if (!processType<Is_linear,Tag_true>(filename,options))
|
||||
success = false;
|
||||
#endif
|
||||
#ifdef QP_NOT_F
|
||||
if (!processOnlyOneValue || value==false)
|
||||
if (!processType<Is_linear,Is_symmetric,Tag_false>(filename,options))
|
||||
if (!processType<Is_linear,Tag_false>(filename,options))
|
||||
success = false;
|
||||
#endif
|
||||
return success;
|
||||
}
|
||||
|
||||
template<typename Is_linear>
|
||||
bool processSRFType(const std::string& filename,
|
||||
const std::map<std::string,int>& options)
|
||||
{
|
||||
Key_const_iterator it = options.find("Is symmetric");
|
||||
const bool processOnlyOneValue = it != options.end();
|
||||
bool value = false;
|
||||
if (processOnlyOneValue)
|
||||
value = it->second > 0;
|
||||
bool success = true;
|
||||
#ifdef QP_S
|
||||
if (!processOnlyOneValue || value==true)
|
||||
if (!processFType<Is_linear,Tag_true>(filename,options))
|
||||
success = false;
|
||||
#endif
|
||||
#ifdef QP_NOT_S
|
||||
if (!processOnlyOneValue || value==false)
|
||||
if (!processFType<Is_linear,Tag_false>(filename,options))
|
||||
success = false;
|
||||
#endif
|
||||
return success;
|
||||
}
|
||||
|
||||
bool processLSRFType(const std::string& filename,
|
||||
const std::map<std::string,int>& options)
|
||||
bool processLFType(const std::string& filename,
|
||||
const std::map<std::string,int>& options)
|
||||
{
|
||||
std::cout << " Solution: ";
|
||||
Key_const_iterator it = options.find("Is linear");
|
||||
|
|
@ -523,12 +498,12 @@ bool processLSRFType(const std::string& filename,
|
|||
bool success = true;
|
||||
#ifdef QP_L
|
||||
if (!processOnlyOneValue || value==true)
|
||||
if (!processSRFType<Tag_true>(filename,options))
|
||||
if (!processFType<Tag_true>(filename,options))
|
||||
success = false;
|
||||
#endif
|
||||
#ifdef QP_NOT_L
|
||||
if (!processOnlyOneValue || value==false)
|
||||
if (!processSRFType<Tag_false>(filename,options))
|
||||
if (!processFType<Tag_false>(filename,options))
|
||||
success = false;
|
||||
#endif
|
||||
return success;
|
||||
|
|
@ -558,7 +533,7 @@ int main(const int ac,const char **av) {
|
|||
std::string filename;
|
||||
bool success = true;
|
||||
while (parse_options(in,options,filename))
|
||||
if (!processLSRFType(filename,options))
|
||||
if (!processLFType(filename,options))
|
||||
success = false;
|
||||
|
||||
// final output:
|
||||
|
|
|
|||
|
|
@ -263,63 +263,63 @@ Processing: test_solver_data/masters/cgal/LP_Test_Expel_Drive_Pivots_Remove_P
|
|||
Processing: test_solver_data/derivatives/QPE_solver_example_bug_shifted.mps
|
||||
Strategy: fe
|
||||
Verbosity: 0
|
||||
Solution: -22(4) -22(4)
|
||||
Solution: -6(4) -6(4) -6(4) -6(4)
|
||||
Processing: test_solver_data/derivatives/QPE_solver_example_bug_shifted.mps
|
||||
Strategy: pe
|
||||
Verbosity: 0
|
||||
Solution: -22(4) -22(4)
|
||||
Solution: -6(4) -6(4) -6(4) -6(4)
|
||||
Processing: test_solver_data/derivatives/QPE_solver_example_bug_shifted.mps
|
||||
Strategy: eb
|
||||
Verbosity: 0
|
||||
Solution: -22(4) -22(4)
|
||||
Solution: -6(4) -6(4) -6(4) -6(4)
|
||||
Processing: test_solver_data/derivatives/QPE_solver_example_bug_shifted.mps
|
||||
Strategy: ff
|
||||
Verbosity: 0
|
||||
Solution: -22(4) -22(4)
|
||||
Solution: -6(4) -6(4) -6(4) -6(4)
|
||||
Processing: test_solver_data/derivatives/QPE_solver_example_bug_shifted.mps
|
||||
Strategy: pf
|
||||
Verbosity: 0
|
||||
Solution: -22(4) -22(4)
|
||||
Solution: -6(4) -6(4) -6(4) -6(4)
|
||||
Processing: test_solver_data/derivatives/QPE_solver_example_bug_free.mps
|
||||
Strategy: fe
|
||||
Verbosity: 0
|
||||
Solution: 0(4) 0(4)
|
||||
Solution: 0(4) 0(4) 0(4) 0(4)
|
||||
Processing: test_solver_data/derivatives/QPE_solver_example_bug_free.mps
|
||||
Strategy: pe
|
||||
Verbosity: 0
|
||||
Solution: 0(4) 0(4)
|
||||
Solution: 0(4) 0(4) 0(4) 0(4)
|
||||
Processing: test_solver_data/derivatives/QPE_solver_example_bug_free.mps
|
||||
Strategy: eb
|
||||
Verbosity: 0
|
||||
Solution: 0(4) 0(4)
|
||||
Solution: 0(4) 0(4) 0(4) 0(4)
|
||||
Processing: test_solver_data/derivatives/QPE_solver_example_bug_free.mps
|
||||
Strategy: ff
|
||||
Verbosity: 0
|
||||
Solution: 0(4) 0(4)
|
||||
Solution: 0(4) 0(4) 0(4) 0(4)
|
||||
Processing: test_solver_data/derivatives/QPE_solver_example_bug_free.mps
|
||||
Strategy: pf
|
||||
Verbosity: 0
|
||||
Solution: 0(4) 0(4)
|
||||
Solution: 0(4) 0(4) 0(4) 0(4)
|
||||
Processing: test_solver_data/masters/cgal/QPE_solver_example_bug.mps
|
||||
Strategy: fe
|
||||
Verbosity: 0
|
||||
Solution: 0(4) 0(4) 0(4) 0(4)
|
||||
Solution: 0(4) 0(4) 0(4) 0(4) 0(4) 0(4) 0(4) 0(4)
|
||||
Processing: test_solver_data/masters/cgal/QPE_solver_example_bug.mps
|
||||
Strategy: pe
|
||||
Verbosity: 0
|
||||
Solution: 0(4) 0(4) 0(4) 0(4)
|
||||
Solution: 0(4) 0(4) 0(4) 0(4) 0(4) 0(4) 0(4) 0(4)
|
||||
Processing: test_solver_data/masters/cgal/QPE_solver_example_bug.mps
|
||||
Strategy: eb
|
||||
Verbosity: 0
|
||||
Solution: 0(4) 0(4) 0(4) 0(4)
|
||||
Solution: 0(4) 0(4) 0(4) 0(4) 0(4) 0(4) 0(4) 0(4)
|
||||
Processing: test_solver_data/masters/cgal/QPE_solver_example_bug.mps
|
||||
Strategy: ff
|
||||
Verbosity: 0
|
||||
Solution: 0(4) 0(4) 0(4) 0(4)
|
||||
Solution: 0(4) 0(4) 0(4) 0(4) 0(4) 0(4) 0(4) 0(4)
|
||||
Processing: test_solver_data/masters/cgal/QPE_solver_example_bug.mps
|
||||
Strategy: pf
|
||||
Verbosity: 0
|
||||
Solution: 0(4) 0(4) 0(4) 0(4)
|
||||
Solution: 0(4) 0(4) 0(4) 0(4) 0(4) 0(4) 0(4) 0(4)
|
||||
Processing: test_solver_data/derivatives/LP_Row_Rank_lt_m_QPE_solver_shifted.mps
|
||||
Strategy: fe
|
||||
Verbosity: 0
|
||||
|
|
@ -443,63 +443,63 @@ Processing: test_solver_data/masters/cgal/LP_no_cons_two_var_QPE_solver.mps
|
|||
Processing: test_solver_data/derivatives/QP_leave_variable_bug_QPE_solver_shifted.mps
|
||||
Strategy: fe
|
||||
Verbosity: 0
|
||||
Solution: -22(4) -22(4)
|
||||
Solution: -6(4) -6(4) -6(4) -6(4)
|
||||
Processing: test_solver_data/derivatives/QP_leave_variable_bug_QPE_solver_shifted.mps
|
||||
Strategy: pe
|
||||
Verbosity: 0
|
||||
Solution: -22(4) -22(4)
|
||||
Solution: -6(4) -6(4) -6(4) -6(4)
|
||||
Processing: test_solver_data/derivatives/QP_leave_variable_bug_QPE_solver_shifted.mps
|
||||
Strategy: eb
|
||||
Verbosity: 0
|
||||
Solution: -22(4) -22(4)
|
||||
Solution: -6(4) -6(4) -6(4) -6(4)
|
||||
Processing: test_solver_data/derivatives/QP_leave_variable_bug_QPE_solver_shifted.mps
|
||||
Strategy: ff
|
||||
Verbosity: 0
|
||||
Solution: -22(4) -22(4)
|
||||
Solution: -6(4) -6(4) -6(4) -6(4)
|
||||
Processing: test_solver_data/derivatives/QP_leave_variable_bug_QPE_solver_shifted.mps
|
||||
Strategy: pf
|
||||
Verbosity: 0
|
||||
Solution: -22(4) -22(4)
|
||||
Solution: -6(4) -6(4) -6(4) -6(4)
|
||||
Processing: test_solver_data/derivatives/QP_leave_variable_bug_QPE_solver_free.mps
|
||||
Strategy: fe
|
||||
Verbosity: 0
|
||||
Solution: 0(4) 0(4)
|
||||
Solution: 0(4) 0(4) 0(4) 0(4)
|
||||
Processing: test_solver_data/derivatives/QP_leave_variable_bug_QPE_solver_free.mps
|
||||
Strategy: pe
|
||||
Verbosity: 0
|
||||
Solution: 0(4) 0(4)
|
||||
Solution: 0(4) 0(4) 0(4) 0(4)
|
||||
Processing: test_solver_data/derivatives/QP_leave_variable_bug_QPE_solver_free.mps
|
||||
Strategy: eb
|
||||
Verbosity: 0
|
||||
Solution: 0(4) 0(4)
|
||||
Solution: 0(4) 0(4) 0(4) 0(4)
|
||||
Processing: test_solver_data/derivatives/QP_leave_variable_bug_QPE_solver_free.mps
|
||||
Strategy: ff
|
||||
Verbosity: 0
|
||||
Solution: 0(4) 0(4)
|
||||
Solution: 0(4) 0(4) 0(4) 0(4)
|
||||
Processing: test_solver_data/derivatives/QP_leave_variable_bug_QPE_solver_free.mps
|
||||
Strategy: pf
|
||||
Verbosity: 0
|
||||
Solution: 0(4) 0(4)
|
||||
Solution: 0(4) 0(4) 0(4) 0(4)
|
||||
Processing: test_solver_data/masters/cgal/QP_leave_variable_bug_QPE_solver.mps
|
||||
Strategy: fe
|
||||
Verbosity: 0
|
||||
Solution: 0(4) 0(4) 0(4) 0(4)
|
||||
Solution: 0(4) 0(4) 0(4) 0(4) 0(4) 0(4) 0(4) 0(4)
|
||||
Processing: test_solver_data/masters/cgal/QP_leave_variable_bug_QPE_solver.mps
|
||||
Strategy: pe
|
||||
Verbosity: 0
|
||||
Solution: 0(4) 0(4) 0(4) 0(4)
|
||||
Solution: 0(4) 0(4) 0(4) 0(4) 0(4) 0(4) 0(4) 0(4)
|
||||
Processing: test_solver_data/masters/cgal/QP_leave_variable_bug_QPE_solver.mps
|
||||
Strategy: eb
|
||||
Verbosity: 0
|
||||
Solution: 0(4) 0(4) 0(4) 0(4)
|
||||
Solution: 0(4) 0(4) 0(4) 0(4) 0(4) 0(4) 0(4) 0(4)
|
||||
Processing: test_solver_data/masters/cgal/QP_leave_variable_bug_QPE_solver.mps
|
||||
Strategy: ff
|
||||
Verbosity: 0
|
||||
Solution: 0(4) 0(4) 0(4) 0(4)
|
||||
Solution: 0(4) 0(4) 0(4) 0(4) 0(4) 0(4) 0(4) 0(4)
|
||||
Processing: test_solver_data/masters/cgal/QP_leave_variable_bug_QPE_solver.mps
|
||||
Strategy: pf
|
||||
Verbosity: 0
|
||||
Solution: 0(4) 0(4) 0(4) 0(4)
|
||||
Solution: 0(4) 0(4) 0(4) 0(4) 0(4) 0(4) 0(4) 0(4)
|
||||
Processing: test_solver_data/derivatives/LP_KM3_base_3_QPE_solver_free.mps
|
||||
Strategy: fe
|
||||
Verbosity: 0
|
||||
|
|
@ -843,63 +843,63 @@ Processing: test_solver_data/masters/cgal/PD_Primal_QPE_solver.mps
|
|||
Processing: test_solver_data/derivatives/QP_Degenerate_rank_zero_QPE_solver_shifted.mps
|
||||
Strategy: fe
|
||||
Verbosity: 0
|
||||
Solution: -281.25(3) -281.25(3)
|
||||
Solution: -11.5(4) -11.5(4) -11.5(4) -11.5(4)
|
||||
Processing: test_solver_data/derivatives/QP_Degenerate_rank_zero_QPE_solver_shifted.mps
|
||||
Strategy: pe
|
||||
Verbosity: 0
|
||||
Solution: -281.25(3) -281.25(3)
|
||||
Solution: -11.5(4) -11.5(4) -11.5(4) -11.5(4)
|
||||
Processing: test_solver_data/derivatives/QP_Degenerate_rank_zero_QPE_solver_shifted.mps
|
||||
Strategy: eb
|
||||
Verbosity: 0
|
||||
Solution: -281.25(3) -281.25(3)
|
||||
Solution: -11.5(4) -11.5(4) -11.5(4) -11.5(4)
|
||||
Processing: test_solver_data/derivatives/QP_Degenerate_rank_zero_QPE_solver_shifted.mps
|
||||
Strategy: ff
|
||||
Verbosity: 0
|
||||
Solution: -281.25(3) -281.25(3)
|
||||
Solution: -11.5(4) -11.5(4) -11.5(4) -11.5(4)
|
||||
Processing: test_solver_data/derivatives/QP_Degenerate_rank_zero_QPE_solver_shifted.mps
|
||||
Strategy: pf
|
||||
Verbosity: 0
|
||||
Solution: -281.25(3) -281.25(3)
|
||||
Solution: -11.5(4) -11.5(4) -11.5(4) -11.5(4)
|
||||
Processing: test_solver_data/derivatives/QP_Degenerate_rank_zero_QPE_solver_free.mps
|
||||
Strategy: fe
|
||||
Verbosity: 0
|
||||
Solution: -2.5(5) -2.5(5)
|
||||
Solution: -2.5(5) -2.5(5) -2.5(5) -2.5(5)
|
||||
Processing: test_solver_data/derivatives/QP_Degenerate_rank_zero_QPE_solver_free.mps
|
||||
Strategy: pe
|
||||
Verbosity: 0
|
||||
Solution: -2.5(5) -2.5(5)
|
||||
Solution: -2.5(5) -2.5(5) -2.5(5) -2.5(5)
|
||||
Processing: test_solver_data/derivatives/QP_Degenerate_rank_zero_QPE_solver_free.mps
|
||||
Strategy: eb
|
||||
Verbosity: 0
|
||||
Solution: -2.5(5) -2.5(5)
|
||||
Solution: -2.5(5) -2.5(5) -2.5(5) -2.5(5)
|
||||
Processing: test_solver_data/derivatives/QP_Degenerate_rank_zero_QPE_solver_free.mps
|
||||
Strategy: ff
|
||||
Verbosity: 0
|
||||
Solution: -2.5(5) -2.5(5)
|
||||
Solution: -2.5(5) -2.5(5) -2.5(5) -2.5(5)
|
||||
Processing: test_solver_data/derivatives/QP_Degenerate_rank_zero_QPE_solver_free.mps
|
||||
Strategy: pf
|
||||
Verbosity: 0
|
||||
Solution: -2.5(5) -2.5(5)
|
||||
Solution: -2.5(5) -2.5(5) -2.5(5) -2.5(5)
|
||||
Processing: test_solver_data/masters/cgal/QP_Degenerate_rank_zero_QPE_solver.mps
|
||||
Strategy: fe
|
||||
Verbosity: 0
|
||||
Solution: -2.5(4) -2.5(4) -2.5(4) -2.5(4)
|
||||
Solution: -2.5(4) -2.5(4) -2.5(4) -2.5(4) -2.5(4) -2.5(4) -2.5(4) -2.5(4)
|
||||
Processing: test_solver_data/masters/cgal/QP_Degenerate_rank_zero_QPE_solver.mps
|
||||
Strategy: pe
|
||||
Verbosity: 0
|
||||
Solution: -2.5(4) -2.5(4) -2.5(4) -2.5(4)
|
||||
Solution: -2.5(4) -2.5(4) -2.5(4) -2.5(4) -2.5(4) -2.5(4) -2.5(4) -2.5(4)
|
||||
Processing: test_solver_data/masters/cgal/QP_Degenerate_rank_zero_QPE_solver.mps
|
||||
Strategy: eb
|
||||
Verbosity: 0
|
||||
Solution: -2.5(4) -2.5(4) -2.5(4) -2.5(4)
|
||||
Solution: -2.5(4) -2.5(4) -2.5(4) -2.5(4) -2.5(4) -2.5(4) -2.5(4) -2.5(4)
|
||||
Processing: test_solver_data/masters/cgal/QP_Degenerate_rank_zero_QPE_solver.mps
|
||||
Strategy: ff
|
||||
Verbosity: 0
|
||||
Solution: -2.5(4) -2.5(4) -2.5(4) -2.5(4)
|
||||
Solution: -2.5(4) -2.5(4) -2.5(4) -2.5(4) -2.5(4) -2.5(4) -2.5(4) -2.5(4)
|
||||
Processing: test_solver_data/masters/cgal/QP_Degenerate_rank_zero_QPE_solver.mps
|
||||
Strategy: pf
|
||||
Verbosity: 0
|
||||
Solution: -2.5(4) -2.5(4) -2.5(4) -2.5(4)
|
||||
Solution: -2.5(4) -2.5(4) -2.5(4) -2.5(4) -2.5(4) -2.5(4) -2.5(4) -2.5(4)
|
||||
Processing: test_solver_data/derivatives/Ub_LP_Chvatal_8_1_a_QPE_solver_shifted.mps
|
||||
Strategy: fe
|
||||
Verbosity: 0
|
||||
|
|
@ -2023,63 +2023,63 @@ Processing: test_solver_data/masters/cgal/LP_KM3_Dual_QPE_solver.mps
|
|||
Processing: test_solver_data/derivatives/QP_translation_bug_shifted.mps
|
||||
Strategy: fe
|
||||
Verbosity: 0
|
||||
Solution: -22(4) -22(4)
|
||||
Solution: -6(4) -6(4) -6(4) -6(4)
|
||||
Processing: test_solver_data/derivatives/QP_translation_bug_shifted.mps
|
||||
Strategy: pe
|
||||
Verbosity: 0
|
||||
Solution: -22(4) -22(4)
|
||||
Solution: -6(4) -6(4) -6(4) -6(4)
|
||||
Processing: test_solver_data/derivatives/QP_translation_bug_shifted.mps
|
||||
Strategy: eb
|
||||
Verbosity: 0
|
||||
Solution: -22(4) -22(4)
|
||||
Solution: -6(4) -6(4) -6(4) -6(4)
|
||||
Processing: test_solver_data/derivatives/QP_translation_bug_shifted.mps
|
||||
Strategy: ff
|
||||
Verbosity: 0
|
||||
Solution: -22(4) -22(4)
|
||||
Solution: -6(4) -6(4) -6(4) -6(4)
|
||||
Processing: test_solver_data/derivatives/QP_translation_bug_shifted.mps
|
||||
Strategy: pf
|
||||
Verbosity: 0
|
||||
Solution: -22(4) -22(4)
|
||||
Solution: -6(4) -6(4) -6(4) -6(4)
|
||||
Processing: test_solver_data/derivatives/QP_translation_bug_free.mps
|
||||
Strategy: fe
|
||||
Verbosity: 0
|
||||
Solution: 0(4) 0(4)
|
||||
Solution: 0(4) 0(4) 0(4) 0(4)
|
||||
Processing: test_solver_data/derivatives/QP_translation_bug_free.mps
|
||||
Strategy: pe
|
||||
Verbosity: 0
|
||||
Solution: 0(4) 0(4)
|
||||
Solution: 0(4) 0(4) 0(4) 0(4)
|
||||
Processing: test_solver_data/derivatives/QP_translation_bug_free.mps
|
||||
Strategy: eb
|
||||
Verbosity: 0
|
||||
Solution: 0(4) 0(4)
|
||||
Solution: 0(4) 0(4) 0(4) 0(4)
|
||||
Processing: test_solver_data/derivatives/QP_translation_bug_free.mps
|
||||
Strategy: ff
|
||||
Verbosity: 0
|
||||
Solution: 0(4) 0(4)
|
||||
Solution: 0(4) 0(4) 0(4) 0(4)
|
||||
Processing: test_solver_data/derivatives/QP_translation_bug_free.mps
|
||||
Strategy: pf
|
||||
Verbosity: 0
|
||||
Solution: 0(4) 0(4)
|
||||
Solution: 0(4) 0(4) 0(4) 0(4)
|
||||
Processing: test_solver_data/masters/cgal/QP_translation_bug.mps
|
||||
Strategy: fe
|
||||
Verbosity: 0
|
||||
Solution: 0(4) 0(4) 0(4) 0(4)
|
||||
Solution: 0(4) 0(4) 0(4) 0(4) 0(4) 0(4) 0(4) 0(4)
|
||||
Processing: test_solver_data/masters/cgal/QP_translation_bug.mps
|
||||
Strategy: pe
|
||||
Verbosity: 0
|
||||
Solution: 0(4) 0(4) 0(4) 0(4)
|
||||
Solution: 0(4) 0(4) 0(4) 0(4) 0(4) 0(4) 0(4) 0(4)
|
||||
Processing: test_solver_data/masters/cgal/QP_translation_bug.mps
|
||||
Strategy: eb
|
||||
Verbosity: 0
|
||||
Solution: 0(4) 0(4) 0(4) 0(4)
|
||||
Solution: 0(4) 0(4) 0(4) 0(4) 0(4) 0(4) 0(4) 0(4)
|
||||
Processing: test_solver_data/masters/cgal/QP_translation_bug.mps
|
||||
Strategy: ff
|
||||
Verbosity: 0
|
||||
Solution: 0(4) 0(4) 0(4) 0(4)
|
||||
Solution: 0(4) 0(4) 0(4) 0(4) 0(4) 0(4) 0(4) 0(4)
|
||||
Processing: test_solver_data/masters/cgal/QP_translation_bug.mps
|
||||
Strategy: pf
|
||||
Verbosity: 0
|
||||
Solution: 0(4) 0(4) 0(4) 0(4)
|
||||
Solution: 0(4) 0(4) 0(4) 0(4) 0(4) 0(4) 0(4) 0(4)
|
||||
Processing: test_solver_data/derivatives/PD_Dual_Eq_QPE_solver_shifted.mps
|
||||
Strategy: fe
|
||||
Verbosity: 0
|
||||
|
|
@ -2443,61 +2443,61 @@ Processing: test_solver_data/masters/cgal/Ub_LP_Chvatal_8_1_d_QPE_solver.mps
|
|||
Processing: test_solver_data/derivatives/Unbounded_asymmetric_shifted.mps
|
||||
Strategy: fe
|
||||
Verbosity: 0
|
||||
Solution: -76(4) -76(4)
|
||||
Solution: -60(4) -60(4) -60(4) -60(4)
|
||||
Processing: test_solver_data/derivatives/Unbounded_asymmetric_shifted.mps
|
||||
Strategy: pe
|
||||
Verbosity: 0
|
||||
Solution: -76(4) -76(4)
|
||||
Solution: -60(4) -60(4) -60(4) -60(4)
|
||||
Processing: test_solver_data/derivatives/Unbounded_asymmetric_shifted.mps
|
||||
Strategy: eb
|
||||
Verbosity: 0
|
||||
Solution: -76(4) -76(4)
|
||||
Solution: -60(4) -60(4) -60(4) -60(4)
|
||||
Processing: test_solver_data/derivatives/Unbounded_asymmetric_shifted.mps
|
||||
Strategy: ff
|
||||
Verbosity: 0
|
||||
Solution: -76(4) -76(4)
|
||||
Solution: -60(4) -60(4) -60(4) -60(4)
|
||||
Processing: test_solver_data/derivatives/Unbounded_asymmetric_shifted.mps
|
||||
Strategy: pf
|
||||
Verbosity: 0
|
||||
Solution: -76(4) -76(4)
|
||||
Solution: -60(4) -60(4) -60(4) -60(4)
|
||||
Processing: test_solver_data/derivatives/Unbounded_asymmetric_free.mps
|
||||
Strategy: fe
|
||||
Verbosity: 0
|
||||
Solution: -22(6) -22(6)
|
||||
Solution: -22(6) -22(6) -22(6) -22(6)
|
||||
Processing: test_solver_data/derivatives/Unbounded_asymmetric_free.mps
|
||||
Strategy: pe
|
||||
Verbosity: 0
|
||||
Solution: -22(6) -22(6)
|
||||
Solution: -22(6) -22(6) -22(6) -22(6)
|
||||
Processing: test_solver_data/derivatives/Unbounded_asymmetric_free.mps
|
||||
Strategy: eb
|
||||
Verbosity: 0
|
||||
Solution: -22(6) -22(6)
|
||||
Solution: -22(6) -22(6) -22(6) -22(6)
|
||||
Processing: test_solver_data/derivatives/Unbounded_asymmetric_free.mps
|
||||
Strategy: ff
|
||||
Verbosity: 0
|
||||
Solution: -22(6) -22(6)
|
||||
Solution: -22(6) -22(6) -22(6) -22(6)
|
||||
Processing: test_solver_data/derivatives/Unbounded_asymmetric_free.mps
|
||||
Strategy: pf
|
||||
Verbosity: 0
|
||||
Solution: -22(6) -22(6)
|
||||
Solution: -22(6) -22(6) -22(6) -22(6)
|
||||
Processing: test_solver_data/masters/cgal/Unbounded_asymmetric.mps
|
||||
Strategy: fe
|
||||
Verbosity: 0
|
||||
Solution: -22(4) -22(4)
|
||||
Solution: -22(4) -22(4) -22(4) -22(4)
|
||||
Processing: test_solver_data/masters/cgal/Unbounded_asymmetric.mps
|
||||
Strategy: pe
|
||||
Verbosity: 0
|
||||
Solution: -22(4) -22(4)
|
||||
Solution: -22(4) -22(4) -22(4) -22(4)
|
||||
Processing: test_solver_data/masters/cgal/Unbounded_asymmetric.mps
|
||||
Strategy: eb
|
||||
Verbosity: 0
|
||||
Solution: -22(4) -22(4)
|
||||
Solution: -22(4) -22(4) -22(4) -22(4)
|
||||
Processing: test_solver_data/masters/cgal/Unbounded_asymmetric.mps
|
||||
Strategy: ff
|
||||
Verbosity: 0
|
||||
Solution: -22(4) -22(4)
|
||||
Solution: -22(4) -22(4) -22(4) -22(4)
|
||||
Processing: test_solver_data/masters/cgal/Unbounded_asymmetric.mps
|
||||
Strategy: pf
|
||||
Verbosity: 0
|
||||
Solution: -22(4) -22(4)
|
||||
Solution: -22(4) -22(4) -22(4) -22(4)
|
||||
All test cases were successfully passed.
|
||||
|
|
|
|||
|
|
@ -30,6 +30,4 @@ QMATRIX
|
|||
x0 x1 -32
|
||||
x1 x0 -32
|
||||
x1 x1 8
|
||||
x1 x2 4
|
||||
x2 x1 -4
|
||||
ENDATA
|
||||
|
|
|
|||
|
|
@ -9,10 +9,9 @@ ROWS
|
|||
COLUMNS
|
||||
x0 obj -64
|
||||
x0 c0 -4
|
||||
x1 obj 33
|
||||
x1 obj 21
|
||||
x1 c0 2
|
||||
x1 c1 1
|
||||
x2 obj -8
|
||||
x2 c1 1
|
||||
RHS
|
||||
rhs c0 -8
|
||||
|
|
@ -26,6 +25,4 @@ QMATRIX
|
|||
x0 x1 -32
|
||||
x1 x0 -32
|
||||
x1 x1 8
|
||||
x1 x2 4
|
||||
x2 x1 -4
|
||||
ENDATA
|
||||
|
|
|
|||
|
|
@ -24,8 +24,6 @@ BOUNDS
|
|||
MI BND x2
|
||||
QMATRIX
|
||||
x0 x0 2
|
||||
x0 x1 30
|
||||
x1 x0 -30
|
||||
x1 x1 2
|
||||
x2 x2 2
|
||||
ENDATA
|
||||
|
|
|
|||
|
|
@ -8,8 +8,8 @@ ROWS
|
|||
E c1
|
||||
E c2
|
||||
COLUMNS
|
||||
x0 obj 57
|
||||
x1 obj -37
|
||||
x0 obj -3
|
||||
x1 obj -7
|
||||
x2 obj -2
|
||||
RHS
|
||||
BOUNDS
|
||||
|
|
@ -18,8 +18,6 @@ BOUNDS
|
|||
LO BND x2 3
|
||||
QMATRIX
|
||||
x0 x0 2
|
||||
x0 x1 30
|
||||
x1 x0 -30
|
||||
x1 x1 2
|
||||
x2 x2 2
|
||||
ENDATA
|
||||
|
|
|
|||
|
|
@ -31,6 +31,4 @@ QMATRIX
|
|||
x0 x1 -32
|
||||
x1 x0 -32
|
||||
x1 x1 8
|
||||
x1 x2 4
|
||||
x2 x1 -4
|
||||
ENDATA
|
||||
|
|
|
|||
|
|
@ -10,10 +10,9 @@ COLUMNS
|
|||
x0 obj -64
|
||||
x0 c0 -4
|
||||
x0 c1 1
|
||||
x1 obj 33
|
||||
x1 obj 21
|
||||
x1 c0 2
|
||||
x1 c1 1
|
||||
x2 obj -8
|
||||
x2 c1 1
|
||||
RHS
|
||||
rhs c0 -8
|
||||
|
|
@ -27,6 +26,4 @@ QMATRIX
|
|||
x0 x1 -32
|
||||
x1 x0 -32
|
||||
x1 x1 8
|
||||
x1 x2 4
|
||||
x2 x1 -4
|
||||
ENDATA
|
||||
|
|
|
|||
|
|
@ -30,6 +30,4 @@ QMATRIX
|
|||
x0 x1 -32
|
||||
x1 x0 -32
|
||||
x1 x1 8
|
||||
x1 x2 4
|
||||
x2 x1 -4
|
||||
ENDATA
|
||||
|
|
|
|||
|
|
@ -9,10 +9,9 @@ ROWS
|
|||
COLUMNS
|
||||
x0 obj -64
|
||||
x0 c0 -4
|
||||
x1 obj 33
|
||||
x1 obj 21
|
||||
x1 c0 2
|
||||
x1 c1 1
|
||||
x2 obj -8
|
||||
x2 c1 1
|
||||
RHS
|
||||
rhs c0 -8
|
||||
|
|
@ -26,6 +25,4 @@ QMATRIX
|
|||
x0 x1 -32
|
||||
x1 x0 -32
|
||||
x1 x1 8
|
||||
x1 x2 4
|
||||
x2 x1 -4
|
||||
ENDATA
|
||||
|
|
|
|||
|
|
@ -35,6 +35,4 @@ QMATRIX
|
|||
x0 x1 -32
|
||||
x1 x0 -32
|
||||
x1 x1 8
|
||||
x1 x2 4
|
||||
x2 x1 -4
|
||||
ENDATA
|
||||
|
|
|
|||
|
|
@ -9,10 +9,10 @@ ROWS
|
|||
COLUMNS
|
||||
x0 obj -128
|
||||
x0 c0 -4
|
||||
x1 obj 61
|
||||
x1 obj 49
|
||||
x1 c0 2
|
||||
x1 c1 1
|
||||
x2 obj -16
|
||||
x2 obj -8
|
||||
x2 c1 1
|
||||
RHS
|
||||
rhs c0 -8
|
||||
|
|
@ -26,6 +26,4 @@ QMATRIX
|
|||
x0 x1 -32
|
||||
x1 x0 -32
|
||||
x1 x1 8
|
||||
x1 x2 4
|
||||
x2 x1 -4
|
||||
ENDATA
|
||||
|
|
|
|||
|
|
@ -22,11 +22,6 @@ RHS
|
|||
QMATRIX
|
||||
x1 x1 128
|
||||
x1 x2 -32
|
||||
x1 x3 0
|
||||
x2 x1 -32
|
||||
x2 x2 8
|
||||
x2 x3 4
|
||||
x3 x1 0
|
||||
x3 x2 -4
|
||||
x3 x3 0
|
||||
ENDATA
|
||||
|
|
|
|||
|
|
@ -26,12 +26,6 @@ RHS
|
|||
rhs c3 0
|
||||
QMATRIX
|
||||
x1 x1 2
|
||||
x1 x2 30
|
||||
x1 x3 0
|
||||
x2 x1 -30
|
||||
x2 x2 2
|
||||
x2 x3 0
|
||||
x3 x1 0
|
||||
x3 x2 0
|
||||
x3 x3 2
|
||||
ENDATA
|
||||
|
|
|
|||
|
|
@ -22,11 +22,6 @@ RHS
|
|||
QMATRIX
|
||||
x1 x1 128
|
||||
x1 x2 -32
|
||||
x1 x3 0
|
||||
x2 x1 -32
|
||||
x2 x2 8
|
||||
x2 x3 4
|
||||
x3 x1 0
|
||||
x3 x2 -4
|
||||
x3 x3 0
|
||||
ENDATA
|
||||
|
|
|
|||
|
|
@ -22,11 +22,6 @@ RHS
|
|||
DMATRIX
|
||||
x1 x1 64
|
||||
x1 x2 -16
|
||||
x1 x3 0
|
||||
x2 x1 -16
|
||||
x2 x2 4
|
||||
x2 x3 2
|
||||
x3 x1 0
|
||||
x3 x2 -2
|
||||
x3 x3 0
|
||||
ENDATA
|
||||
|
|
|
|||
|
|
@ -26,11 +26,6 @@ BOUNDS
|
|||
DMATRIX
|
||||
x1 x1 64
|
||||
x1 x2 -16
|
||||
x1 x3 0
|
||||
x2 x1 -16
|
||||
x2 x2 4
|
||||
x2 x3 2
|
||||
x3 x1 0
|
||||
x3 x2 -2
|
||||
x3 x3 0
|
||||
ENDATA
|
||||
|
|
|
|||
Loading…
Reference in New Issue