- 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:
Bernd Gärtner 2006-09-28 14:29:33 +00:00
parent c8303d9b37
commit 68fc833cb5
25 changed files with 226 additions and 340 deletions

View File

@ -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);

View File

@ -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).

View File

@ -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;
};

View File

@ -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;

View File

@ -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;

View File

@ -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) {

View File

@ -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
{

View File

@ -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:

View File

@ -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:

View File

@ -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.

View File

@ -30,6 +30,4 @@ QMATRIX
x0 x1 -32
x1 x0 -32
x1 x1 8
x1 x2 4
x2 x1 -4
ENDATA

View File

@ -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

View File

@ -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

View File

@ -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

View File

@ -31,6 +31,4 @@ QMATRIX
x0 x1 -32
x1 x0 -32
x1 x1 8
x1 x2 4
x2 x1 -4
ENDATA

View File

@ -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

View File

@ -30,6 +30,4 @@ QMATRIX
x0 x1 -32
x1 x0 -32
x1 x1 8
x1 x2 4
x2 x1 -4
ENDATA

View File

@ -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

View File

@ -35,6 +35,4 @@ QMATRIX
x0 x1 -32
x1 x0 -32
x1 x1 8
x1 x2 4
x2 x1 -4
ENDATA

View File

@ -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

View File

@ -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

View File

@ -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

View File

@ -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

View File

@ -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

View File

@ -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