Scippy

SoPlex

Sequential object-oriented simPlex

SVectorBase< R > Class Template Reference

Sparse vectors. More...

#include <svectorbase.h>

Public Types

typedef Nonzero< R > Element
 

Public Member Functions

SVectorBase< Real > & operator= (const VectorBase< S > &vec)
 Assignment operator (specialization for Real). More...
 
Real operator* (const SVectorBase< S > &w) const
 specialization for inner product for sparse vectors More...
 
Access
int size () const
 Number of used indices. More...
 
int max () const
 Maximal number of indices. More...
 
int dim () const
 Dimension of the vector defined as maximal index + 1. More...
 
int pos (int i) const
 Position of index i. More...
 
operator[] (int i) const
 Value to index i. More...
 
Nonzero< R > & element (int n)
 Reference to the n 'th nonzero element. More...
 
const Nonzero< R > & element (int n) const
 The n 'th nonzero element. More...
 
int & index (int n)
 Reference to index of n 'th nonzero. More...
 
int index (int n) const
 Index of n 'th nonzero. More...
 
R & value (int n)
 Reference to value of n 'th nonzero. More...
 
const R & value (int n) const
 Value of n 'th nonzero. More...
 
void add (int i, const R &v)
 Append one nonzero (i,v). More...
 
void add (int i)
 Append one uninitialized nonzero. More...
 
void add (const SVectorBase &sv)
 Append nonzeros of sv. More...
 
void add (int n, const int i[], const R v[])
 Append n nonzeros. More...
 
template<class S >
void add (int n, const int i[], const S v[])
 Append n nonzeros. More...
 
void add (int n, const Nonzero< R > e[])
 Append n nonzeros. More...
 
void remove (int n, int m)
 Remove nonzeros n thru m. More...
 
void remove (int n)
 Remove n 'th nonzero. More...
 
void clear ()
 Remove all indices. More...
 
void sort ()
 Sort nonzeros to increasing indices. More...
 
Arithmetic operations
maxAbs () const
 Maximum absolute value, i.e., infinity norm. More...
 
minAbs () const
 Minimum absolute value. More...
 
length () const
 Floating point approximation of euclidian norm (without any approximation guarantee). More...
 
length2 () const
 Squared norm. More...
 
SVectorBase< R > & operator*= (const R &x)
 Scaling. More...
 
operator* (const VectorBase< R > &w) const
 Inner product. More...
 
template<class S >
operator* (const SVectorBase< S > &w) const
 inner product for sparse vectors More...
 
Constructions, destruction, and assignment
 SVectorBase (int n=0, Nonzero< R > *p_mem=nullptr)
 Default constructor. More...
 
 SVectorBase (const SVectorBase< R > &sv)=default
 
template<class S >
SVectorBase< R > & operator= (const VectorBase< S > &vec)
 Assignment operator. More...
 
SVectorBase< R > & operator= (const SVectorBase< R > &sv)
 Assignment operator. More...
 
SVectorBase< R > & operator= (const SVectorBase< R > &&sv)
 move assignement operator. More...
 
template<class S >
SVectorBase< R > & operator= (const SVectorBase< S > &sv)
 Assignment operator. More...
 
SVectorBase< Real > & scaleAssign (int scaleExp, const SVectorBase< Real > &sv)
 scale and assign More...
 
SVectorBase< Real > & scaleAssign (const int *scaleExp, const SVectorBase< Real > &sv, bool negateExp=false)
 scale and assign More...
 
template<class S >
SVectorBase< R > & assignArray (const S *rowValues, const int *rowIndices, int rowSize)
 Assignment operator. More...
 
template<class S >
SVectorBase< R > & operator= (const SSVectorBase< S > &sv)
 Assignment operator. More...
 
Memory
Nonzero< R > * mem () const
 get pointer to internal memory. More...
 
void set_size (int s)
 Set size of the vector. More...
 
void set_max (int m)
 Set the maximum number of nonzeros in the vector. More...
 
void setMem (int n, Nonzero< R > *elmem)
 Set the memory area where the nonzeros will be stored. More...
 
Utilities
bool isConsistent () const
 Consistency check. More...
 

Private Attributes

Data
Nonzero< R > * m_elem
 
int memsize
 
int memused
 

Friends

template<class S >
class SVectorBase
 

Detailed Description

template<class R>
class soplex::SVectorBase< R >

Sparse vectors.

Class SVectorBase provides packed sparse vectors. Such are a sparse vectors, with a storage scheme that keeps all data in one contiguous block of memory. This is best suited for using them for parallel computing on a distributed memory multiprocessor.

SVectorBase does not provide any memory management (this will be done by class DSVectorBase). This means, that the constructor of SVectorBase expects memory where to save the nonzeros. Further, adding nonzeros to an SVectorBase may fail if no more memory is available for saving them (see also DSVectorBase).

When nonzeros are added to an SVectorBase, they are appended to the set of nonzeros, i.e., they recieve numbers size(), size()+1 ... . An SVectorBase can hold atmost max() nonzeros, where max() is given in the constructor. When removing nonzeros, the remaining nonzeros are renumbered. However, only the numbers greater than the number of the first removed nonzero are affected.

The following mathematical operations are provided by class SVectorBase (SVectorBase a, b, c; R x):

OperationDescription  
-= subtraction a -= b
+= addition a += b
* skalar product x = a * b
*= scaling a *= x
maxAbs() infinity norm a.maxAbs() == \(\|a\|_{\infty}\)
length() eucledian norm a.length() == \(\sqrt{a^2}\)
length2()square norm a.length2() == \(a^2\)

Operators += and -= should be used with caution, since no efficient implementation is available. One should think of assigning the left handside vector to a dense VectorBase first and perform the addition on it. The same applies to the scalar product *.

There are two numberings of the nonzeros of an SVectorBase. First, an SVectorBase is supposed to act like a linear algebra VectorBase. An index refers to this view of an SVectorBase: operator[]() is provided which returns the value at the given index of the vector, i.e., 0 for all indices which are not in the set of nonzeros. The other view of SVectorBases is that of a set of nonzeros. The nonzeros are numbered from 0 to size()-1. The methods index(int n) and value(int n) allow to access the index and value of the n 'th nonzero. n is referred to as the number of a nonzero.

Todo:
SVectorBase should get a new implementation. There maybe a lot of memory lost due to padding the Nonzero structure. A better idea seems to be class SVectorBase { int size; int used; int* idx; R* val; }; which for several reasons could be faster or slower. If SVectorBase is changed, also DSVectorBase and SVSet have to be modified.

Definition at line 139 of file svectorbase.h.

Member Typedef Documentation

◆ Element

typedef Nonzero<R> Element

Definition at line 157 of file svectorbase.h.

Constructor & Destructor Documentation

◆ SVectorBase() [1/2]

SVectorBase ( int  n = 0,
Nonzero< R > *  p_mem = nullptr 
)
explicit

Default constructor.

The constructor expects one memory block where to store the nonzero elements. This must be passed to the constructor, where the number of Nonzeros needs that fit into the memory must be given and a pointer to the beginning of the memory block. Once this memory has been passed, it shall not be modified until the SVectorBase is no longer used.

Definition at line 625 of file svectorbase.h.

References SVectorBase< R >::setMem().

◆ SVectorBase() [2/2]

SVectorBase ( const SVectorBase< R > &  sv)
default

Member Function Documentation

◆ add() [1/6]

void add ( const SVectorBase< R > &  sv)

Append nonzeros of sv.

Definition at line 314 of file svectorbase.h.

References SVectorBase< R >::add(), SVectorBase< R >::m_elem, and SVectorBase< R >::size().

◆ add() [2/6]

void add ( int  i)

Append one uninitialized nonzero.

Definition at line 300 of file svectorbase.h.

References SVectorBase< R >::m_elem, SVectorBase< R >::max(), SVectorBase< R >::set_size(), and SVectorBase< R >::size().

◆ add() [3/6]

◆ add() [4/6]

void add ( int  n,
const int  i[],
const R  v[] 
)

◆ add() [5/6]

void add ( int  n,
const int  i[],
const S  v[] 
)

◆ add() [6/6]

void add ( int  n,
const Nonzero< R >  e[] 
)

◆ assignArray()

SVectorBase< R > & assignArray ( const S *  rowValues,
const int *  rowIndices,
int  rowSize 
)

Assignment operator.

Definition at line 765 of file svectorbase.h.

References SVectorBase< R >::m_elem, SVectorBase< R >::max(), and SVectorBase< R >::set_size().

Referenced by SVSetBase< R >::add().

◆ clear()

void clear ( )

◆ dim()

int dim ( ) const

Dimension of the vector defined as maximal index + 1.

Definition at line 178 of file svectorbase.h.

References Nonzero< R >::idx, SVectorBase< R >::m_elem, and SVectorBase< R >::size().

Referenced by SSVectorBase< R >::assign(), and VectorBase< R >::operator*().

◆ element() [1/2]

◆ element() [2/2]

const Nonzero< R > & element ( int  n) const

The n 'th nonzero element.

Definition at line 237 of file svectorbase.h.

References SVectorBase< R >::m_elem, and SVectorBase< R >::size().

◆ index() [1/2]

◆ index() [2/2]

int index ( int  n) const

Index of n 'th nonzero.

Definition at line 255 of file svectorbase.h.

References SVectorBase< R >::m_elem, and SVectorBase< R >::size().

◆ isConsistent()

◆ length()

R length ( ) const

Floating point approximation of euclidian norm (without any approximation guarantee).

Definition at line 519 of file svectorbase.h.

References SVectorBase< R >::length2().

◆ length2()

R length2 ( ) const

Squared norm.

Definition at line 525 of file svectorbase.h.

References SVectorBase< R >::m_elem, SVectorBase< R >::size(), and Nonzero< R >::val.

Referenced by SVectorBase< R >::length().

◆ max()

◆ maxAbs()

R maxAbs ( ) const

Maximum absolute value, i.e., infinity norm.

Definition at line 487 of file svectorbase.h.

References SVectorBase< R >::m_elem, SVectorBase< R >::size(), and soplex::spxAbs().

◆ mem()

◆ minAbs()

R minAbs ( ) const

Minimum absolute value.

Definition at line 503 of file svectorbase.h.

References soplex::infinity, SVectorBase< R >::m_elem, SVectorBase< R >::size(), and soplex::spxAbs().

◆ operator*() [1/3]

R operator* ( const SVectorBase< S > &  w) const

inner product for sparse vectors

Definition at line 562 of file svectorbase.h.

References SVectorBase< R >::element(), Nonzero< R >::idx, SVectorBase< R >::m_elem, SVectorBase< R >::size(), and Nonzero< R >::val.

◆ operator*() [2/3]

Real operator* ( const SVectorBase< S > &  w) const

specialization for inner product for sparse vectors

Definition at line 866 of file svectorbase.h.

References SVectorBase< R >::element(), Nonzero< R >::idx, SVectorBase< R >::size(), and Nonzero< R >::val.

◆ operator*() [3/3]

R operator* ( const VectorBase< R > &  w) const

Inner product.

Definition at line 1046 of file basevectors.h.

References Nonzero< R >::idx, and Nonzero< R >::val.

◆ operator*=()

SVectorBase< R > & operator*= ( const R &  x)

Scaling.

Definition at line 541 of file svectorbase.h.

References SVectorBase< R >::m_elem, SVectorBase< R >::size(), and Nonzero< R >::val.

◆ operator=() [1/6]

◆ operator=() [2/6]

SVectorBase< R > & operator= ( const SVectorBase< R > &&  sv)

move assignement operator.

Definition at line 668 of file svectorbase.h.

◆ operator=() [3/6]

SVectorBase< R > & operator= ( const SVectorBase< R > &  sv)

◆ operator=() [4/6]

SVectorBase< R > & operator= ( const SVectorBase< S > &  sv)

◆ operator=() [5/6]

SVectorBase< Real > & operator= ( const VectorBase< S > &  vec)

Assignment operator (specialization for Real).

Definition at line 982 of file basevectors.h.

References VectorBase< R >::dim(), Nonzero< R >::idx, and Nonzero< R >::val.

◆ operator=() [6/6]

SVectorBase< R > & operator= ( const VectorBase< S > &  vec)

◆ operator[]()

R operator[] ( int  i) const

Value to index i.

Definition at line 217 of file svectorbase.h.

References SVectorBase< R >::m_elem, and SVectorBase< R >::pos().

◆ pos()

int pos ( int  i) const

Position of index i.

Returns
Finds the position of the first index i in the index set. If no such index i is found, -1 is returned. Otherwise, index(pos(i)) == i holds.

Definition at line 197 of file svectorbase.h.

References SVectorBase< R >::index(), SVectorBase< R >::m_elem, and SVectorBase< R >::size().

Referenced by SPxLPBase< R >::changeCol(), SPxLPBase< R >::changeElement(), SPxLPBase< R >::changeRow(), SPxLPBase< R >::doRemoveCol(), SPxLPBase< R >::doRemoveRow(), SPxLPBase< R >::isConsistent(), and SVectorBase< R >::operator[]().

◆ remove() [1/2]

void remove ( int  n)

Remove n 'th nonzero.

Definition at line 430 of file svectorbase.h.

References SVectorBase< R >::m_elem, SVectorBase< R >::set_size(), and SVectorBase< R >::size().

◆ remove() [2/2]

◆ scaleAssign() [1/2]

SVectorBase< Real > & scaleAssign ( const int *  scaleExp,
const SVectorBase< Real > &  sv,
bool  negateExp = false 
)

◆ scaleAssign() [2/2]

◆ set_max()

void set_max ( int  m)

Set the maximum number of nonzeros in the vector.

Definition at line 806 of file svectorbase.h.

References SVectorBase< R >::m_elem, and SVectorBase< R >::memsize.

Referenced by SVSetBase< R >::ensureMem(), SVSetBase< R >::memPack(), and SVectorBase< R >::setMem().

◆ set_size()

◆ setMem()

◆ size()

int size ( ) const

Number of used indices.

Definition at line 164 of file svectorbase.h.

References SVectorBase< R >::m_elem, and SVectorBase< R >::memused.

Referenced by SVSetBase< R >::add(), DSVectorBase< R >::add(), SVectorBase< R >::add(), SVSetBase< R >::add2(), SPxLPBase< R >::addCols(), SPxLPBase< R >::addDualActivity(), SPxLPBase< R >::added2Set(), SPxLPBase< R >::addPrimalActivity(), SPxLPBase< R >::addRows(), SSVectorBase< R >::assign(), VectorBase< R >::assign(), SSVectorBase< R >::assign2product1(), SSVectorBase< R >::assign2productAndSetup(), SSVectorBase< R >::assign2productFull(), SSVectorBase< R >::assign2productShort(), SPxLPBase< R >::changeCol(), SPxLPBase< R >::changeRow(), SPxBasisBase< R >::coSolve(), SVSetBase< R >::deleteVec(), SVectorBase< R >::dim(), SPxLPBase< R >::doAddCol(), SPxLPBase< R >::doAddCols(), SPxLPBase< R >::doAddRow(), SPxLPBase< R >::doAddRows(), SPxLPBase< R >::doRemoveCol(), SPxLPBase< R >::doRemoveCols(), SPxLPBase< R >::doRemoveRow(), SPxLPBase< R >::doRemoveRows(), DSVectorBase< R >::DSVectorBase(), DSVectorBase< BP >::DSVectorBase(), SPxMainSM< R >::DuplicateRowsPS::DuplicateRowsPS(), SVectorBase< R >::element(), SVSetBase< R >::ensureMem(), SVectorBase< R >::index(), SPxLPBase< R >::isConsistent(), SVectorBase< R >::isConsistent(), UnitVectorBase< R >::isConsistent(), SVectorBase< R >::length2(), SVectorBase< R >::maxAbs(), SVSetBase< R >::memPack(), SVectorBase< R >::minAbs(), VectorBase< R >::multAdd(), SSVectorBase< R >::multAdd(), VectorBase< R >::multSub(), soplex::operator*(), VectorBase< R >::operator*(), SVectorBase< R >::operator*(), SVectorBase< R >::operator*=(), VectorBase< R >::operator-=(), soplex::operator<<(), SVectorBase< R >::operator=(), DSVectorBase< R >::operator=(), VectorBase< R >::operator=(), SVSetBase< R >::operator=(), SVectorBase< R >::pos(), SVectorBase< R >::remove(), SVectorBase< R >::scaleAssign(), DSVectorBase< R >::setMax(), SPxBasisBase< R >::solve(), SPxBasisBase< R >::solve4update(), SoPlex_getRowVectorRational(), SoPlex_getRowVectorReal(), SVectorBase< R >::sort(), SVectorBase< R >::value(), and SVSetBase< R >::xtend().

◆ sort()

void sort ( )

Sort nonzeros to increasing indices.

Definition at line 449 of file svectorbase.h.

References Nonzero< R >::idx, SVectorBase< R >::m_elem, and SVectorBase< R >::size().

◆ value() [1/2]

◆ value() [2/2]

const R & value ( int  n) const

Value of n 'th nonzero.

Definition at line 273 of file svectorbase.h.

References SVectorBase< R >::m_elem, and SVectorBase< R >::size().

Friends And Related Function Documentation

◆ SVectorBase

friend class SVectorBase
friend

Definition at line 141 of file svectorbase.h.

Member Data Documentation

◆ m_elem

◆ memsize

int memsize
private

Definition at line 150 of file svectorbase.h.

Referenced by SVectorBase< R >::max(), and SVectorBase< R >::set_max().

◆ memused

int memused
private