10 #include "CoinHelperFunctions.hpp"
11 #include "CoinFinite.hpp"
18 using namespace Couenne;
24 for (
register std::set <CouenneScalar *, CouenneSparseVector::compare_scalars>::const_iterator
25 i = rhs.
elem_. begin ();
35 for (
register std::set <CouenneScalar *, CouenneSparseVector::compare_scalars>::const_iterator
36 i = rhs.
elem_. begin ();
44 #define copy_vectors(from, to) { \
45 for (std::set <std::pair <int, CouenneSparseVector *>, CouenneExprMatrix::compare_pair_ind>::const_iterator \
46 rowIt = from. begin (); \
47 rowIt != from. end (); ++rowIt) { \
48 to . insert (std::pair <int, CouenneSparseVector *> (rowIt -> first, new CouenneSparseVector (*(rowIt -> second)))); \
54 varIndices_ (rhs.varIndices_) {
83 elem_ . insert (element);
97 std::set <std::pair <int, CouenneSparseVector *>,
100 if (check == vecMaj.
end ()) {
102 new_vector.second -> add_element (indMin, elem);
103 vecMaj. insert (new_vector);
104 }
else check -> second -> add_element (indMin, elem);
128 for (
register std::set <CouenneScalar *, CouenneSparseVector::compare_scalars>::const_iterator
129 i1 =
elem_. begin (),
130 i2 = v2.
elem_. begin ();
132 ((i1 !=
elem_.end ()) &&
133 (i2 != v2.
elem_.end ()));) {
135 while ((i1 !=
elem_.end ()) && ((*i1) -> getIndex () < (*i2) -> getIndex ())) ++i1;
if (i1 ==
elem_.
end ())
return prod;
136 while ((i2 != v2.
elem_.end ()) && ((*i2) -> getIndex () < (*i1) -> getIndex ())) ++i2;
if (i2 == v2.
elem_.
end ())
return prod;
139 (*((*i1) -> getElem ())) () *
140 (*((*i2) -> getElem ())) ();
158 colIt != columns.
end (); ++colIt) {
160 double single =
operator* (*(colIt -> second));
176 rowIt !=
row_.
end (); ++rowIt) {
178 double single = post.
operator* (*(rowIt -> second));
215 for (
register std::set <CouenneScalar *, CouenneSparseVector::compare_scalars>::iterator
232 printf (
"Vector (%ld) (",
elem_ . size ());
234 for (std::set <CouenneScalar *, CouenneSparseVector::compare_scalars>::const_iterator i =
elem_ . begin ();
237 if (i !=
elem_ . begin ())
242 if ((++cnt) %
WRAP == 0)
253 printf (
"Matrix (%ld x %ld):\n",
263 printf (
"Row [%d]: ", (*i) . first);
264 (*i) . second ->
print ();
274 printf (
"Col [%d]: ", (*i) . first);
275 (*i) . second ->
print ();
280 printf (
"varIndices: (");
281 for (std::vector <expression *>::const_iterator
CouenneSparseVector & operator=(const CouenneSparseVector &rhs)
CouenneSparseVector & operator*(const CouenneSparseVector &factor) const
matrix * vector
std::vector< expression * > varIndices_
if used in sdp cuts, contains indices of x_i used in X_ij = x_i * x_j
void add_element(int row, int column, expression *elem)
Insertion into matrix.
std::set< CouenneScalar *, compare_scalars > elem_
void add_element(int index, expression *elem)
Insertion into vector.
double multiply_thres(const CouenneSparseVector &v2, double thres) const
stops multiplication if above threshold
~CouenneSparseVector()
Destructor.
expression clone (points to another expression)
double operator*(const CouenneSparseVector &factor) const
vector * vector (dot product)
long unsigned int size()
return size of (square sub-) matrix
#define copy_vectors(from, to)
~CouenneExprMatrix()
Destructor.
void print() const
Pretty print.
std::set< std::pair< int, CouenneSparseVector * >, compare_pair_ind > row_
row major
expression * elem_
element
int index_
index of element in vector
void check_and_insert(int indMaj, int indMin, std::set< std::pair< int, CouenneSparseVector * >, CouenneExprMatrix::compare_pair_ind > &vecMaj, expression *elem)
used by add_elem below
CouenneExprMatrix & operator=(const CouenneExprMatrix &rhs)
Assignment operator.
std::set< std::pair< int, CouenneSparseVector * >, compare_pair_ind > col_
col major
void print() const
Pretty print.