Logo ROOT   6.16/01
Reference Guide
TQpDataBase.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_TQpDataBase
44#define ROOT_TQpDataBase
45
46#include "TError.h"
47
48#include "TQpVar.h"
49
50#include "TMatrixD.h"
51
52//////////////////////////////////////////////////////////////////////////
53// //
54// TQpDataBase //
55// //
56// Data for the general QP formulation //
57// //
58//////////////////////////////////////////////////////////////////////////
59
60class TQpDataBase : public TObject
61{
62
63protected:
64
65 // as part of setting up a random test problem, generate a random
66 // set of upper, lower, and two-sided bounds
67 static void RandomlyChooseBoundedVariables(TVectorD &x,TVectorD &dualx,TVectorD &blx,TVectorD &ixlow,
68 TVectorD &bux,TVectorD &ixupp,Double_t &ix,Double_t percentLowerOnly,
69 Double_t percentUpperOnly,Double_t percentBound);
70
71public:
72
76
77 TVectorD fG; // linear part of Objective function
78 TVectorD fBa; // vector of equality constraint
79 TVectorD fXupBound; // Bounds on variables
83 TVectorD fCupBound; // Inequality constraints
87
89 TQpDataBase(Int_t nx,Int_t my,Int_t mz);
90 TQpDataBase(const TQpDataBase &another);
91 virtual ~TQpDataBase() {}
92
93 virtual void PutQIntoAt(TMatrixDBase &M,Int_t row,Int_t col) = 0;
94 virtual void PutAIntoAt(TMatrixDBase &M,Int_t row,Int_t col) = 0;
95 virtual void PutCIntoAt(TMatrixDBase &M,Int_t row,Int_t col) = 0;
96
97 virtual void Qmult (Double_t beta,TVectorD& y,Double_t alpha,const TVectorD& x) = 0;
98 virtual void Amult (Double_t beta,TVectorD& y,Double_t alpha,const TVectorD& x) = 0;
99 virtual void Cmult (Double_t beta,TVectorD& y,Double_t alpha,const TVectorD& x) = 0;
100 virtual void ATransmult(Double_t beta,TVectorD& y,Double_t alpha,const TVectorD& x) = 0;
101 virtual void CTransmult(Double_t beta,TVectorD& y,Double_t alpha,const TVectorD& x) = 0;
102
103 virtual void GetDiagonalOfQ(TVectorD &dQ) = 0;
104
105 virtual TVectorD &GetG () { return fG; }
106 virtual TVectorD &GetBa () { return fBa; }
107
108 virtual TVectorD &GetXupperBound () { return fXupBound; }
109 virtual TVectorD &GetiXupperBound() { return fXupIndex; }
110 virtual TVectorD &GetXlowerBound () { return fXloBound; }
111 virtual TVectorD &GetiXlowerBound() { return fXloIndex; }
112 virtual TVectorD &GetSupperBound () { return fCupBound; }
113 virtual TVectorD &GetiSupperBound() { return fCupIndex; }
114 virtual TVectorD &GetSlowerBound () { return fCloBound; }
115 virtual TVectorD &GetiSlowerBound() { return fCloIndex; }
116
117 virtual Double_t DataNorm () = 0;
118 virtual void DataRandom (TVectorD &x,TVectorD &y,TVectorD &z,TVectorD &s) = 0;
119 virtual Double_t ObjectiveValue(TQpVar *vars) = 0;
120
121 TQpDataBase &operator= (const TQpDataBase &source);
122
123 ClassDef(TQpDataBase,1) // Qp Base Data class
124};
125#endif
int Int_t
Definition: RtypesCore.h:41
double Double_t
Definition: RtypesCore.h:55
#define ClassDef(name, id)
Definition: Rtypes.h:324
Linear Algebra Package.
Definition: TMatrixTBase.h:85
Mother of all ROOT objects.
Definition: TObject.h:37
TQpDataBase & operator=(const TQpDataBase &source)
Assignment operator.
virtual void GetDiagonalOfQ(TVectorD &dQ)=0
virtual Double_t ObjectiveValue(TQpVar *vars)=0
virtual TVectorD & GetBa()
Definition: TQpDataBase.h:106
virtual TVectorD & GetG()
Definition: TQpDataBase.h:105
TVectorD fXupIndex
Definition: TQpDataBase.h:80
virtual void PutQIntoAt(TMatrixDBase &M, Int_t row, Int_t col)=0
virtual TVectorD & GetiXupperBound()
Definition: TQpDataBase.h:109
virtual void PutAIntoAt(TMatrixDBase &M, Int_t row, Int_t col)=0
virtual void Amult(Double_t beta, TVectorD &y, Double_t alpha, const TVectorD &x)=0
TVectorD fXloBound
Definition: TQpDataBase.h:81
TVectorD fCloIndex
Definition: TQpDataBase.h:86
virtual void Cmult(Double_t beta, TVectorD &y, Double_t alpha, const TVectorD &x)=0
virtual void ATransmult(Double_t beta, TVectorD &y, Double_t alpha, const TVectorD &x)=0
TVectorD fCupIndex
Definition: TQpDataBase.h:84
virtual TVectorD & GetSlowerBound()
Definition: TQpDataBase.h:114
virtual Double_t DataNorm()=0
TVectorD fG
Definition: TQpDataBase.h:77
TVectorD fXupBound
Definition: TQpDataBase.h:79
virtual TVectorD & GetiSupperBound()
Definition: TQpDataBase.h:113
TQpDataBase()
Default constructor.
Definition: TQpDataBase.cxx:66
TVectorD fXloIndex
Definition: TQpDataBase.h:82
virtual void PutCIntoAt(TMatrixDBase &M, Int_t row, Int_t col)=0
virtual void CTransmult(Double_t beta, TVectorD &y, Double_t alpha, const TVectorD &x)=0
virtual TVectorD & GetXlowerBound()
Definition: TQpDataBase.h:110
virtual ~TQpDataBase()
Definition: TQpDataBase.h:91
TVectorD fCupBound
Definition: TQpDataBase.h:83
virtual TVectorD & GetSupperBound()
Definition: TQpDataBase.h:112
virtual TVectorD & GetiSlowerBound()
Definition: TQpDataBase.h:115
virtual void DataRandom(TVectorD &x, TVectorD &y, TVectorD &z, TVectorD &s)=0
virtual void Qmult(Double_t beta, TVectorD &y, Double_t alpha, const TVectorD &x)=0
TVectorD fCloBound
Definition: TQpDataBase.h:85
TVectorD fBa
Definition: TQpDataBase.h:78
virtual TVectorD & GetXupperBound()
Definition: TQpDataBase.h:108
static void RandomlyChooseBoundedVariables(TVectorD &x, TVectorD &dualx, TVectorD &blx, TVectorD &ixlow, TVectorD &bux, TVectorD &ixupp, Double_t &ix, Double_t percentLowerOnly, Double_t percentUpperOnly, Double_t percentBound)
Randomly choose x and its boundaries.
virtual TVectorD & GetiXlowerBound()
Definition: TQpDataBase.h:111
Definition: TQpVar.h:60
double beta(double x, double y)
Calculates the beta function.
Double_t y[n]
Definition: legend1.C:17
Double_t x[n]
Definition: legend1.C:17
static constexpr double s