SoPlex
Loading...
Searching...
No Matches
SSVectorBase< R > Class Template Reference

Semi sparse vector. More...

#include <ssvectorbase.h>

Inheritance diagram for SSVectorBase< R >:
VectorBase< R > IdxSet

Public Member Functions

SSVectorBase< Rational > & assign (const SVectorBase< Rational > &rhs)
 Assigns only the elements of rhs.
Methods for setup SSVectorBases

/**

int index (int n) const
 Returns index of the n 'th nonzero element.
value (int n) const
 Returns value of the n 'th nonzero element.
int pos (int i) const
 Finds the position of index i in the IdxSet, or -1 if i doesn't exist.
int size () const
 Returns the number of nonzeros.
void add (int i, R x)
 Adds nonzero (i, x) to SSVectorBase.
void setValue (int i, R x)
 Sets i 'th element to x.
void scaleValue (int i, int scaleExp)
 Scale i 'th element by a.
void clearIdx (int i)
 Clears element i.
void clearNum (int n)
 Sets n 'th nonzero element to 0 (index n must exist).
Methods independent of the Status
operator[] (int i) const
 Returns i 'th value.
const int * indexMem () const
 Returns array indices.
const R * values () const
 Returns array values.
const IdxSetindices () const
 Returns indices.
int * altIndexMem ()
 Returns array indices.
R * altValues ()
 Returns array values.
IdxSetaltIndices ()
 Returns indices.
Arithmetic operations
template<class S>
SSVectorBase< R > & operator+= (const VectorBase< S > &vec)
 Addition.
template<class S>
SSVectorBase< R > & operator+= (const SVectorBase< S > &vec)
 Addition.
template<class S>
SSVectorBase< R > & operator+= (const SSVectorBase< S > &vec)
 Addition.
template<class S>
SSVectorBase< R > & operator-= (const VectorBase< S > &vec)
 Subtraction.
template<class S>
SSVectorBase< R > & operator-= (const SVectorBase< S > &vec)
 Subtraction.
template<class S>
SSVectorBase< R > & operator-= (const SSVectorBase< S > &vec)
 Subtraction.
template<class S>
SSVectorBase< R > & operator*= (S x)
 Scaling.
template<class S>
operator* (const SSVectorBase< S > &w)
template<class S, class T>
SSVectorBase< R > & multAdd (S xx, const SVectorBase< T > &vec)
 Addition of a scaled vector.
template<class S, class T>
SSVectorBase< R > & multAdd (S x, const VectorBase< T > &vec)
 Addition of a scaled vector.
template<class S, class T>
SSVectorBase< R > & assignPWproduct4setup (const SSVectorBase< S > &x, const SSVectorBase< T > &y)
 Assigns pair wise vector product to SSVectorBase.
template<class S, class T>
SSVectorBase< R > & assign2product (const SSVectorBase< S > &x, const SVSetBase< T > &A)
 Assigns \(x^T \cdot A\) to SSVectorBase.
template<class S, class T>
SSVectorBase< R > & assign2product4setup (const SVSetBase< S > &A, const SSVectorBase< T > &x, Timer *timeSparse, Timer *timeFull, int &nCallsSparse, int &nCallsFull)
 Assigns SSVectorBase to \(A \cdot x\) for a setup x.
template<class S, class T>
SSVectorBase< R > & assign2productAndSetup (const SVSetBase< S > &A, SSVectorBase< T > &x)
 Assigns SSVectorBase to \(A \cdot x\) thereby setting up x.
maxAbs () const
 Maximum absolute value, i.e., infinity norm.
length2 () const
 Squared euclidian norm.
length () const
 Floating point approximation of euclidian norm (without any approximation guarantee).
Miscellaneous
int dim () const
 Dimension of VectorBase.
void reDim (int newdim)
 Resets dimension to newdim.
void setSize (int n)
 Sets number of nonzeros (thereby unSetup SSVectorBase).
void reMem (int newsize)
 Resets memory consumption to newsize.
void clear ()
 Clears vector.
bool isConsistent () const
 consistency check.
Constructors / Destructors
 SSVectorBase (int p_dim, std::shared_ptr< Tolerances > tol=nullptr)
 Default constructor.
template<class S>
 SSVectorBase (const SSVectorBase< S > &vec)
 Copy constructor.
 SSVectorBase (const SSVectorBase< R > &vec)
 Copy constructor.
template<class S>
 SSVectorBase (const VectorBase< S > &vec)
 Constructs nonsetup copy of vec.
template<class S>
void setup_and_assign (SSVectorBase< S > &rhs)
 Sets up rhs vector, and assigns it.
template<class S>
SSVectorBase< R > & assign (const SVectorBase< S > &rhs)
 Assigns only the elements of rhs.
template<class S>
SSVectorBase< R > & operator= (const SSVectorBase< S > &rhs)
 Assignment operator.
SSVectorBase< R > & operator= (const SSVectorBase< R > &rhs)
 Assignment operator.
template<class S>
SSVectorBase< R > & operator= (const SVectorBase< S > &rhs)
 Assignment operator.
template<class S>
SSVectorBase< R > & operator= (const VectorBase< S > &rhs)
 Assignment operator.
 ~SSVectorBase ()
 destructor
Public Member Functions inherited from VectorBase< R >
bool isConsistent () const
 Consistency check.
Rational operator* (const VectorBase< Rational > &vec) const
 Inner product.
 VectorBase ()
 Constructor.
 VectorBase (int dimen, R *p_val)
 VectorBase (int p_dimen)
template<typename S>
 VectorBase (const VectorBase< S > &vec)
 VectorBase (const VectorBase< R > &&vec) noexcept
 VectorBase (const VectorBase< R > &vec)
template<class S>
VectorBase< R > & operator= (const VectorBase< S > &vec)
 Assignment operator.
VectorBase< R > & operator= (const VectorBase< R > &vec)
 Assignment operator.
VectorBase< R > & operator= (const VectorBase< R > &&vec)
 Move assignment operator.
VectorBase< R > & scaleAssign (int scaleExp, const VectorBase< R > &vec)
 scale and assign
VectorBase< R > & scaleAssign (const int *scaleExp, const VectorBase< R > &vec, bool negateExp=false)
 scale and assign
template<class S>
VectorBase< R > & operator= (const SVectorBase< S > &vec)
 Assignment operator.
template<class S>
VectorBase< R > & operator= (const SSVectorBase< S > &vec)
 Assignment operator.
template<class S>
VectorBase< R > & assign (const SVectorBase< S > &vec)
 Assign values of vec.
template<class S>
VectorBase< R > & assign (const SSVectorBase< S > &vec)
 Assign values of vec.
void clear ()
 Set vector to contain all-zeros (keeping the same length).
template<class S>
VectorBase< R > & operator+= (const VectorBase< S > &vec)
 Addition.
template<class S>
VectorBase< R > & operator+= (const SVectorBase< S > &vec)
 Addition.
template<class S>
VectorBase< R > & operator+= (const SSVectorBase< S > &vec)
 Addition.
template<class S>
VectorBase< R > & operator-= (const VectorBase< S > &vec)
 Subtraction.
template<class S>
VectorBase< R > & operator-= (const SVectorBase< S > &vec)
 Subtraction.
template<class S>
VectorBase< R > & operator-= (const SSVectorBase< S > &vec)
 Subtraction.
template<class S>
VectorBase< R > & operator*= (const S &x)
 Scaling.
template<class S>
VectorBase< R > & operator/= (const S &x)
 Division.
operator* (const VectorBase< R > &vec) const
 Inner product.
operator* (const SVectorBase< R > &vec) const
 Inner product.
operator* (const SSVectorBase< R > &vec) const
 Inner product.
maxAbs () const
 Maximum absolute value, i.e., infinity norm.
minAbs () const
 Minimum absolute value.
length () const
 Floating point approximation of euclidian norm (without any approximation guarantee).
length2 () const
 Squared norm.
template<class S, class T>
VectorBase< R > & multAdd (const S &x, const VectorBase< T > &vec)
 Addition of scaled vector.
template<class S, class T>
VectorBase< R > & multAdd (const S &x, const SVectorBase< T > &vec)
 Addition of scaled vector.
template<class S, class T>
VectorBase< R > & multSub (const S &x, const SVectorBase< T > &vec)
 Subtraction of scaled vector.
template<class S, class T>
VectorBase< R > & multAdd (const S &x, const SSVectorBase< T > &vec)
 Addition of scaled vector.
int dim () const
 Dimension of vector.
R & operator[] (int n)
 Return n 'th value by reference.
const R & operator[] (int n) const
 Return n 'th value.
const std::vector< R > & vec ()
 Return underlying std::vector.
R * get_ptr ()
 Conversion to C-style pointer.
const R * get_const_ptr () const
 Conversion to C-style pointer.
std::vector< R >::const_iterator begin () const
std::vector< R >::iterator begin ()
std::vector< R >::const_iterator end () const
std::vector< R >::iterator end ()
int memSize () const
void reDim (int newdim, const bool setZero=true)
 Resets VectorBase's dimension to newdim.
void reSize (int newsize)
 Resets VectorBase's memory size to newsize.
const VectorBase< R > operator- (const VectorBase< R > &vec) const
const VectorBase< R > operator+ (const VectorBase< R > &v) const

Protected Attributes

std::shared_ptr< Tolerances_tolerances
Protected Attributes inherited from VectorBase< R >
std::vector< R > val
 Values of vector.
Protected Attributes inherited from IdxSet
int num
 number of used indices
int len
 length of array idx
int * idx
 array of indices
bool freeArray
 true iff idx should be freed inside of this object

Private Member Functions

Private helpers
template<class S, class T>
SSVectorBase< R > & assign2product1 (const SVSetBase< S > &A, const SSVectorBase< T > &x)
 Assignment helper.
template<class S, class T>
SSVectorBase< R > & assign2productShort (const SVSetBase< S > &A, const SSVectorBase< T > &x)
 Assignment helper.
template<class S, class T>
SSVectorBase< R > & assign2productFull (const SVSetBase< S > &A, const SSVectorBase< T > &x)
 Assignment helper.

Friends

class VectorBase< R >
template<class S>
class DSVectorBase

Data

bool setupStatus
 Is the SSVectorBase set up?
void setMax (int newmax)
 Allocates enough space to accommodate newmax values.

Additional Inherited Members

Protected Member Functions inherited from IdxSet
 IdxSet (int n, int imem[], int l=0)
 constructor.
 IdxSet ()
 default constructor.
virtual ~IdxSet ()
 destructor.
IdxSetoperator= (const IdxSet &set)
 assignment operator.
 IdxSet (const IdxSet &)
 copy constructor.
int index (int n) const
 access n 'th index.
int size () const
 returns the number of used indices.
int max () const
 returns the maximal number of indices which can be stored in IdxSet.
int dim () const
 returns the maximal index.
int pos (int i) const
 returns the position of index i.
void add (int n)
 appends n uninitialized indices.
void add (const IdxSet &set)
 appends all indices of set.
void add (int n, const int i[])
 appends n indices in i.
void addIdx (int i)
 appends index i.
void remove (int n, int m)
 removes indices at position numbers n through m.
void remove (int n)
 removes n 'th index.
void clear ()
 removes all indices.
bool isConsistent () const
 consistency check.

Detailed Description

template<class R>
class soplex::SSVectorBase< R >

Semi sparse vector.

This class implements semi-sparse vectors. Such are VectorBases where the indices of its nonzero elements can be stored in an extra IdxSet. Only elements with absolute value > #getEpsilon() are considered to be nonzero. Since really storing the nonzeros is not always convenient, an SSVectorBase provides two different stati: setup and not setup. An SSVectorBase being setup means that the nonzero indices are available, otherwise an SSVectorBase is just an ordinary VectorBase with an empty IdxSet. Note that due to arithmetic operation, zeros can slip in, i.e., it is only guaranteed that at least every non-zero is in the IdxSet.

Definition at line 56 of file ssvectorbase.h.

Constructor & Destructor Documentation

◆ SSVectorBase() [1/4]

template<class R>
SSVectorBase ( int p_dim,
std::shared_ptr< Tolerances > tol = nullptr )
explicit

◆ SSVectorBase() [2/4]

template<class R>
template<class S>
SSVectorBase ( const SSVectorBase< S > & vec)

Copy constructor.

Definition at line 706 of file ssvectorbase.h.

◆ SSVectorBase() [3/4]

template<class R>
SSVectorBase ( const SSVectorBase< R > & vec)

Copy constructor.

The redundancy with the copy constructor below is necessary since otherwise the compiler doesn't realize that it could use the more general one with S = R and generates a shallow copy constructor.

Definition at line 723 of file ssvectorbase.h.

◆ SSVectorBase() [4/4]

template<class R>
template<class S>
SSVectorBase ( const VectorBase< S > & vec)
explicit

Constructs nonsetup copy of vec.

Definition at line 738 of file ssvectorbase.h.

◆ ~SSVectorBase()

template<class R>
~SSVectorBase ( )

destructor

Definition at line 909 of file ssvectorbase.h.

Member Function Documentation

◆ add()

template<class R>
void add ( int i,
R x )

Adds nonzero (i, x) to SSVectorBase.

No nonzero with index i must exist in the SSVectorBase.

Definition at line 238 of file ssvectorbase.h.

◆ altIndexMem()

template<class R>
int * altIndexMem ( )

Returns array indices.

Definition at line 341 of file ssvectorbase.h.

◆ altIndices()

template<class R>
IdxSet & altIndices ( )

Returns indices.

Definition at line 355 of file ssvectorbase.h.

◆ altValues()

template<class R>
R * altValues ( )

Returns array values.

Definition at line 348 of file ssvectorbase.h.

◆ assign() [1/2]

SSVectorBase< Rational > & assign ( const SVectorBase< Rational > & rhs)

Assigns only the elements of rhs.

Definition at line 865 of file basevectors.h.

◆ assign() [2/2]

template<class R>
template<class S>
SSVectorBase< R > & assign ( const SVectorBase< S > & rhs)

◆ assign2product()

template<class R>
template<class S, class T>
SSVectorBase< R > & assign2product ( const SSVectorBase< S > & x,
const SVSetBase< T > & A )

Assigns \(x^T \cdot A\) to SSVectorBase.

Definition at line 508 of file basevectors.h.

References IdxSet::addIdx(), clear(), dim(), SVSetBase< R >::num(), SSVectorBase(), and VectorBase< R >::val.

◆ assign2product1()

template<class R>
template<class S, class T>
SSVectorBase< R > & assign2product1 ( const SVSetBase< S > & A,
const SSVectorBase< T > & x )
private

◆ assign2product4setup()

template<class R>
template<class S, class T>
SSVectorBase< R > & assign2product4setup ( const SVSetBase< S > & A,
const SSVectorBase< T > & x,
Timer * timeSparse,
Timer * timeFull,
int & nCallsSparse,
int & nCallsFull )

Assigns SSVectorBase to \(A \cdot x\) for a setup x.

Definition at line 539 of file basevectors.h.

References SSVectorBase().

◆ assign2productAndSetup()

template<class R>
template<class S, class T>
SSVectorBase< R > & assign2productAndSetup ( const SVSetBase< S > & A,
SSVectorBase< T > & x )

◆ assign2productFull()

template<class R>
template<class S, class T>
SSVectorBase< R > & assign2productFull ( const SVSetBase< S > & A,
const SSVectorBase< T > & x )
private

◆ assign2productShort()

template<class R>
template<class S, class T>
SSVectorBase< R > & assign2productShort ( const SVSetBase< S > & A,
const SSVectorBase< T > & x )
private

◆ assignPWproduct4setup()

template<class R>
template<class S, class T>
SSVectorBase< R > & assignPWproduct4setup ( const SSVectorBase< S > & x,
const SSVectorBase< T > & y )

Assigns pair wise vector product to SSVectorBase.

Assigns pair wise vector product of setup x and setup y to SSVectorBase.

Definition at line 447 of file basevectors.h.

References clear(), dim(), index(), setupStatus, size(), SSVectorBase(), and VectorBase< R >::val.

◆ clear()

◆ clearIdx()

template<class R>
void clearIdx ( int i)

Clears element i.

Definition at line 283 of file ssvectorbase.h.

◆ clearNum()

template<class R>
void clearNum ( int n)

Sets n 'th nonzero element to 0 (index n must exist).

Definition at line 299 of file ssvectorbase.h.

Referenced by SSVectorBase< Real >::setValue().

◆ dim()

◆ index()

◆ indexMem()

template<class R>
const int * indexMem ( ) const

Returns array indices.

Definition at line 323 of file ssvectorbase.h.

◆ indices()

template<class R>
const IdxSet & indices ( ) const

Returns indices.

Definition at line 335 of file ssvectorbase.h.

◆ isConsistent()

◆ length()

template<class R>
R length ( ) const

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

Definition at line 581 of file ssvectorbase.h.

◆ length2()

template<class R>
R length2 ( ) const

Squared euclidian norm.

Definition at line 565 of file ssvectorbase.h.

Referenced by SSVectorBase< Real >::length().

◆ maxAbs()

template<class R>
R maxAbs ( ) const

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

Definition at line 544 of file ssvectorbase.h.

◆ multAdd() [1/2]

template<class R>
template<class S, class T>
SSVectorBase< R > & multAdd ( S x,
const VectorBase< T > & vec )

Addition of a scaled vector.

Definition at line 511 of file ssvectorbase.h.

◆ multAdd() [2/2]

template<class R>
template<class S, class T>
SSVectorBase< R > & multAdd ( S xx,
const SVectorBase< T > & vec )

Addition of a scaled vector.

Todo
SSVectorBase::multAdd() should be rewritten without pointer arithmetic.
Todo
SSVectorBase::multAdd() should be rewritten without pointer arithmetic.

Definition at line 387 of file basevectors.h.

References IdxSet::addIdx(), IdxSet::idx, isConsistent(), VectorBase< R >::multAdd(), IdxSet::num, SSVectorBase(), VectorBase< R >::val, and VectorBase< R >::vec().

◆ operator*()

template<class R>
template<class S>
R operator* ( const SSVectorBase< S > & w)

Definition at line 461 of file ssvectorbase.h.

◆ operator*=()

template<class R>
template<class S>
SSVectorBase< R > & operator*= ( S x)

Scaling.

Definition at line 446 of file ssvectorbase.h.

◆ operator+=() [1/3]

template<class R>
template<class S>
SSVectorBase< R > & operator+= ( const SSVectorBase< S > & vec)

Addition.

Definition at line 388 of file ssvectorbase.h.

◆ operator+=() [2/3]

template<class R>
template<class S>
SSVectorBase< R > & operator+= ( const SVectorBase< S > & vec)

Addition.

Definition at line 348 of file basevectors.h.

References VectorBase< R >::operator+=(), setupStatus, SSVectorBase(), and VectorBase< R >::vec().

◆ operator+=() [3/3]

template<class R>
template<class S>
SSVectorBase< R > & operator+= ( const VectorBase< S > & vec)

Addition.

Definition at line 369 of file ssvectorbase.h.

◆ operator-=() [1/3]

template<class R>
template<class S>
SSVectorBase< R > & operator-= ( const SSVectorBase< S > & vec)

Subtraction.

Definition at line 425 of file ssvectorbase.h.

◆ operator-=() [2/3]

template<class R>
template<class S>
SSVectorBase< R > & operator-= ( const SVectorBase< S > & vec)

Subtraction.

Definition at line 367 of file basevectors.h.

References VectorBase< R >::operator-=(), setupStatus, SSVectorBase(), and VectorBase< R >::vec().

◆ operator-=() [3/3]

template<class R>
template<class S>
SSVectorBase< R > & operator-= ( const VectorBase< S > & vec)

Subtraction.

Definition at line 406 of file ssvectorbase.h.

◆ operator=() [1/4]

template<class R>
SSVectorBase< R > & operator= ( const SSVectorBase< R > & rhs)

Assignment operator.

Definition at line 848 of file ssvectorbase.h.

◆ operator=() [2/4]

template<class R>
template<class S>
SSVectorBase< R > & operator= ( const SSVectorBase< S > & rhs)

Assignment operator.

Definition at line 802 of file ssvectorbase.h.

◆ operator=() [3/4]

template<class R>
template<class S>
SSVectorBase< R > & operator= ( const SVectorBase< S > & rhs)

Assignment operator.

Definition at line 899 of file basevectors.h.

References assign(), clear(), and SSVectorBase().

◆ operator=() [4/4]

template<class R>
template<class S>
SSVectorBase< R > & operator= ( const VectorBase< S > & rhs)

Assignment operator.

Definition at line 898 of file ssvectorbase.h.

◆ operator[]()

template<class R>
R operator[] ( int i) const

Returns i 'th value.

Definition at line 317 of file ssvectorbase.h.

◆ pos()

template<class R>
int pos ( int i) const

Finds the position of index i in the IdxSet, or -1 if i doesn't exist.

Definition at line 221 of file ssvectorbase.h.

Referenced by SSVectorBase< Real >::add(), SSVectorBase< Real >::clearIdx(), SSVectorBase< Real >::isConsistent(), and SSVectorBase< Real >::setValue().

◆ reDim()

template<class R>
void reDim ( int newdim)

Resets dimension to newdim.

Definition at line 599 of file ssvectorbase.h.

◆ reMem()

template<class R>
void reMem ( int newsize)

Resets memory consumption to newsize.

Definition at line 624 of file ssvectorbase.h.

◆ scaleValue()

template<class R>
void scaleValue ( int i,
int scaleExp )

Scale i 'th element by a.

Definition at line 272 of file ssvectorbase.h.

◆ setMax()

template<class R>
void setMax ( int newmax)
private

◆ setSize()

template<class R>
void setSize ( int n)

Sets number of nonzeros (thereby unSetup SSVectorBase).

Definition at line 614 of file ssvectorbase.h.

◆ setup_and_assign()

template<class R>
template<class S>
void setup_and_assign ( SSVectorBase< S > & rhs)

Sets up rhs vector, and assigns it.

Definition at line 751 of file ssvectorbase.h.

◆ setValue()

template<class R>
void setValue ( int i,
R x )

Sets i 'th element to x.

Definition at line 248 of file ssvectorbase.h.

◆ size()

◆ value()

template<class R>
R value ( int n) const

Returns value of the n 'th nonzero element.

Definition at line 212 of file ssvectorbase.h.

Referenced by SVectorBase< R >::operator=().

◆ values()

template<class R>
const R * values ( ) const

Returns array values.

Definition at line 329 of file ssvectorbase.h.

◆ DSVectorBase

template<class R>
template<class S>
friend class DSVectorBase
friend

Definition at line 61 of file ssvectorbase.h.

◆ VectorBase< R >

template<class R>
friend class VectorBase< R >
friend

Definition at line 1 of file ssvectorbase.h.

Member Data Documentation

◆ _tolerances

template<class R>
std::shared_ptr<Tolerances> _tolerances
protected

◆ setupStatus

template<class R>
bool setupStatus
private