ROOT  6.06/09
Reference Guide
TQpDataSparse.h
Go to the documentation of this file.
1 // @(#)root/quadp:$Id$
2 // Author: Eddy Offermann May 2004
3 
4 /*************************************************************************
5  * Copyright (C) 1995-2000, Rene Brun and Fons Rademakers. *
6  * All rights reserved. *
7  * *
8  * For the licensing terms see $ROOTSYS/LICENSE. *
9  * For the list of contributors see $ROOTSYS/README/CREDITS. *
10  *************************************************************************/
11 
12 /*************************************************************************
13  * Parts of this file are copied from the OOQP distribution and *
14  * are subject to the following license: *
15  * *
16  * COPYRIGHT 2001 UNIVERSITY OF CHICAGO *
17  * *
18  * The copyright holder hereby grants you royalty-free rights to use, *
19  * reproduce, prepare derivative works, and to redistribute this software*
20  * to others, provided that any changes are clearly documented. This *
21  * software was authored by: *
22  * *
23  * E. MICHAEL GERTZ gertz@mcs.anl.gov *
24  * Mathematics and Computer Science Division *
25  * Argonne National Laboratory *
26  * 9700 S. Cass Avenue *
27  * Argonne, IL 60439-4844 *
28  * *
29  * STEPHEN J. WRIGHT swright@cs.wisc.edu *
30  * Computer Sciences Department *
31  * University of Wisconsin *
32  * 1210 West Dayton Street *
33  * Madison, WI 53706 FAX: (608)262-9777 *
34  * *
35  * Any questions or comments may be directed to one of the authors. *
36  * *
37  * ARGONNE NATIONAL LABORATORY (ANL), WITH FACILITIES IN THE STATES OF *
38  * ILLINOIS AND IDAHO, IS OWNED BY THE UNITED STATES GOVERNMENT, AND *
39  * OPERATED BY THE UNIVERSITY OF CHICAGO UNDER PROVISION OF A CONTRACT *
40  * WITH THE DEPARTMENT OF ENERGY. *
41  *************************************************************************/
42 
43 #ifndef ROOT_TQpDataSparse
44 #define ROOT_TQpDataSparse
45 
46 #ifndef ROOT_TQpDataBase
47 #include "TQpDataBase.h"
48 #endif
49 #ifndef ROOT_TQpVar
50 #include "TQpVar.h"
51 #endif
52 
53 #ifndef ROOT_TMatrixDSparse
54 #include "TMatrixDSparse.h"
55 #endif
56 
57 //////////////////////////////////////////////////////////////////////////
58 // //
59 // TQpDataSparse //
60 // //
61 // Data for the dense QP formulation //
62 // //
63 //////////////////////////////////////////////////////////////////////////
64 
65 class TQpDataSparse : public TQpDataBase
66 {
67 
68 protected:
69 
70  // these variables will be "Used" not copied
71  TMatrixDSparse fQ; // quadratic part of Objective function
72  TMatrixDSparse fA; // Equality constraints
73  TMatrixDSparse fC; // Inequality constraints
74 
75 public:
76 
78  // data objects of the specified dimensions
80 
81  // sets up pointers to the data objects that are passed as arguments
84  TVectorD &iclow,TVectorD &cupp,TVectorD &icupp);
85  TQpDataSparse(const TQpDataSparse &another);
86 
87  virtual ~TQpDataSparse() {}
88 
89  void SetNonZeros(Int_t nnzQ,Int_t nnzA,Int_t nnzC);
90 
91  virtual void PutQIntoAt(TMatrixDBase &M,Int_t row,Int_t col);
92  // insert the Hessian Q into the matrix M for the fundamental
93  // linear system, where M is stored as a TMatrixDSparse
94  virtual void PutAIntoAt(TMatrixDBase &M,Int_t row,Int_t col);
95  // insert the constraint matrix A into the matrix M for the
96  // fundamental linear system, where M is stored as a TMatrixDSparse
97  virtual void PutCIntoAt(TMatrixDBase &M,Int_t row,Int_t col);
98  // insert the constraint matrix C into the matrix M for the
99  // fundamental linear system, where M is stored as a
100  // TMatrixDSparse
101 
102  virtual void Qmult (Double_t beta,TVectorD& y,Double_t alpha,const TVectorD& x);
103  // y = beta * y + alpha * Q * x
104  virtual void Amult (Double_t beta,TVectorD& y,Double_t alpha,const TVectorD& x);
105  // y = beta * y + alpha * A * x
106  virtual void Cmult (Double_t beta,TVectorD& y,Double_t alpha,const TVectorD& x);
107  // y = beta * y + alpha * C * x
108  virtual void ATransmult(Double_t beta,TVectorD& y,Double_t alpha,const TVectorD& x);
109  // y = beta * y + alpha * A^T * x
110  virtual void CTransmult(Double_t beta,TVectorD& y,Double_t alpha,const TVectorD& x);
111  // y = beta * y + alpha * C^T * x
112 
113  virtual void GetDiagonalOfQ(TVectorD &dQ); // extract the diagonal of Q and put it in the vector dQ
114 
115  virtual Double_t DataNorm();
116  virtual void DataRandom(TVectorD &x,TVectorD &y,TVectorD &z,TVectorD &s);
117  // Create a random problem (x,y,z,s)
118  // the solution to the random problem
119  virtual void Print(Option_t *opt="") const;
120 
121  virtual Double_t ObjectiveValue(TQpVar *vars);
122 
123  TQpDataSparse &operator= (const TQpDataSparse &source);
124 
125  ClassDef(TQpDataSparse,1) // Qp Data class for Sparse formulation
126 };
127 #endif
const int nx
Definition: kalman.C:16
virtual void PutQIntoAt(TMatrixDBase &M, Int_t row, Int_t col)
Insert the Hessian Q into the matrix M at index (row,col) for the fundamental linear system...
const char Option_t
Definition: RtypesCore.h:62
TMatrixDSparse fQ
Definition: TQpDataSparse.h:71
int Int_t
Definition: RtypesCore.h:41
virtual void Print(Option_t *opt="") const
Print class members.
TMatrixDSparse fC
Definition: TQpDataSparse.h:73
static double A[]
virtual void ATransmult(Double_t beta, TVectorD &y, Double_t alpha, const TVectorD &x)
calculate y = beta*y + alpha*(fA^T*x)
double beta(double x, double y)
Calculates the beta function.
virtual void PutCIntoAt(TMatrixDBase &M, Int_t row, Int_t col)
Insert the constraint matrix C into the matrix M at index (row,col) for the fundamental linear system...
Double_t x[n]
Definition: legend1.C:17
#define ClassDef(name, id)
Definition: Rtypes.h:254
virtual void DataRandom(TVectorD &x, TVectorD &y, TVectorD &z, TVectorD &s)
Choose randomly a QP problem.
virtual ~TQpDataSparse()
Definition: TQpDataSparse.h:87
void SetNonZeros(Int_t nnzQ, Int_t nnzA, Int_t nnzC)
Allocate space for the appropriate number of non-zeros in the matrices.
static double C[]
virtual Double_t ObjectiveValue(TQpVar *vars)
Return value of the objective function.
virtual Double_t DataNorm()
Return the largest component of several vectors in the data class.
virtual void Amult(Double_t beta, TVectorD &y, Double_t alpha, const TVectorD &x)
calculate y = beta*y + alpha*(fA*x)
double Double_t
Definition: RtypesCore.h:55
virtual void CTransmult(Double_t beta, TVectorD &y, Double_t alpha, const TVectorD &x)
calculate y = beta*y + alpha*(fC^T*x)
TMatrixDSparse fA
Definition: TQpDataSparse.h:72
Double_t y[n]
Definition: legend1.C:17
virtual void GetDiagonalOfQ(TVectorD &dQ)
Return in vector dq the diagonal of matrix fQ.
TQpDataSparse & operator=(const TQpDataSparse &source)
Assignment operator.
virtual void PutAIntoAt(TMatrixDBase &M, Int_t row, Int_t col)
Insert the constraint matrix A into the matrix M at index (row,col) for the fundamental linear system...
Definition: TQpVar.h:65
virtual void Qmult(Double_t beta, TVectorD &y, Double_t alpha, const TVectorD &x)
calculate y = beta*y + alpha*(fQ*x)
static double Q[]
virtual void Cmult(Double_t beta, TVectorD &y, Double_t alpha, const TVectorD &x)
calculate y = beta*y + alpha*(fC*x)