Logo ROOT  
Reference Guide
 
Loading...
Searching...
No Matches
TQpProbSparse.cxx
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#include "TQpProbSparse.h"
44#include "TMatrixD.h"
45#include "TQpLinSolverSparse.h"
46
47////////////////////////////////////////////////////////////////////////////////
48///
49/// \class TQpProbSparse
50///
51/// dense matrix problem formulation
52///
53////////////////////////////////////////////////////////////////////////////////
54
56
57////////////////////////////////////////////////////////////////////////////////
58/// Constructor
59
62{
63 // We do not want more constrains than variables
64 R__ASSERT(nx-my-mz > 0);
65}
66
67
68////////////////////////////////////////////////////////////////////////////////
69/// Copy constructor
70
75
76
77////////////////////////////////////////////////////////////////////////////////
78/// Setup the data
79
82 Double_t *xlo,Bool_t *ixlo,
83 Double_t *xup,Bool_t *ixup,
85 Double_t *bA,
89{
90 TVectorD vc ; vc .Use(fNx,c);
92 TVectorD vxlo; vxlo.Use(fNx,xlo);
93 TVectorD vxup; vxup.Use(fNx,xup);
96 if (fMy > 0) {
97 mA .Use(fMy,fNx,nnzA,irowA,icolA,A);
98 vbA .Use(fMy,bA);
99 }
103 if (fMz > 0) {
104 mC .Use(fMz,fNx,nnzC,irowC,icolC,C);
105 vclo.Use(fMz,clo);
106 vcup.Use(fMz,cup);
107 }
108
111 for (Int_t ix = 0; ix < fNx; ix++) {
112 vixlo[ix] = (ixlo[ix]) ? 1.0 : 0.0;
113 vixup[ix] = (ixup[ix]) ? 1.0 : 0.0;
114 }
115
118 for (Int_t ic = 0; ic < fMz; ic++) {
119 viclo[ic] = (iclo[ic]) ? 1.0 : 0.0;
120 vicup[ic] = (icup[ic]) ? 1.0 : 0.0;
121 }
122
125
126 return data;
127}
128
129
130////////////////////////////////////////////////////////////////////////////////
131/// Setup the data
132
135 TVectorD &xlo, TVectorD &ixlo,
136 TVectorD &xup, TVectorD &ixup,
141{
145
146 R__ASSERT(mQ.GetNrows() == fNx && mQ.GetNcols() == fNx);
147 if (fMy > 0) R__ASSERT(mA.GetNrows() == fMy && mA.GetNcols() == fNx);
148 else R__ASSERT(mA.GetNrows() == fMy);
149 if (fMz > 0) R__ASSERT(mC.GetNrows() == fMz && mC.GetNcols() == fNx);
150 else R__ASSERT(mC.GetNrows() == fMz);
151
152 R__ASSERT(c.GetNrows() == fNx);
153 R__ASSERT(xlo.GetNrows() == fNx);
154 R__ASSERT(ixlo.GetNrows() == fNx);
155 R__ASSERT(xup.GetNrows() == fNx);
156 R__ASSERT(ixup.GetNrows() == fNx);
157
158 R__ASSERT(bA.GetNrows() == fMy);
159 R__ASSERT(clo.GetNrows() == fMz);
160 R__ASSERT(iclo.GetNrows() == fMz);
161 R__ASSERT(cup.GetNrows() == fMz);
162 R__ASSERT(icup.GetNrows() == fMz);
163
165
166 return data;
167}
168
169
170////////////////////////////////////////////////////////////////////////////////
171/// Setup the residuals
172
174{
176 return new TQpResidual(fNx,fMy,fMz,data->fXloIndex,data->fXupIndex,data->fCloIndex,data->fCupIndex);
177}
178
179
180////////////////////////////////////////////////////////////////////////////////
181/// Setup the variables
182
184{
186
187 return new TQpVar(fNx,fMy,fMz,data->fXloIndex,data->fXupIndex,data->fCloIndex,data->fCupIndex);
188}
189
190
191////////////////////////////////////////////////////////////////////////////////
192/// Setup the linear solver
193
199
200
201////////////////////////////////////////////////////////////////////////////////
202/// Assembles a single vector object from three given vectors .
203/// rhs_out (output) final joined vector
204/// rhs1_in (input) first part of rhs
205/// rhs2_in (input) middle part of rhs
206/// rhs3_in (input) last part of rhs .
207
209{
210 rhs.SetSub(0,rhs1_in);
211 if (fMy > 0) rhs.SetSub(fNx, rhs2_in);
212 if (fMz > 0) rhs.SetSub(fNx+fMy,rhs3_in);
213}
214
215
216////////////////////////////////////////////////////////////////////////////////
217/// Extracts three component vectors from a given aggregated vector.
218/// vars_in (input) aggregated vector
219/// x_in (output) first part of vars
220/// y_in (output) middle part of vars
221/// z_in (output) last part of vars
222
224{
225 x_in = vars_in.GetSub(0,fNx-1);
226 if (fMy > 0) y_in = vars_in.GetSub(fNx, fNx+fMy-1);
227 if (fMz > 0) z_in = vars_in.GetSub(fNx+fMy,fNx+fMy+fMz-1);
228}
229
230
231////////////////////////////////////////////////////////////////////////////////
232/// Create a random QP problem
233
235{
237 soln = this->MakeVariables(data);
238 data->SetNonZeros(nnzQ,nnzA,nnzC);
239 data->DataRandom(soln->fX,soln->fY,soln->fZ,soln->fS);
240}
241
242
243////////////////////////////////////////////////////////////////////////////////
244/// Assignment operator
245
247{
248 if (this != &source) {
250 }
251 return *this;
252}
#define c(i)
Definition RSha256.hxx:101
#define ClassImp(name)
Definition Rtypes.h:382
ROOT::Detail::TRangeCast< T, true > TRangeDynCast
TRangeDynCast is an adapter class that allows the typed iteration through a TCollection.
#define R__ASSERT(e)
Checks condition e and reports a fatal error if it's false.
Definition TError.h:125
Option_t Option_t TPoint TPoint const char GetTextMagnitude GetFillStyle GetLineColor GetLineWidth GetMarkerStyle GetTextAlign GetTextColor GetTextSize void data
Data for the general QP formulation.
Definition TQpDataBase.h:61
Data for the sparse QP formulation.
Implementation of main solver for linear systems.
Implements the aspects of the solvers for dense general QP formulation that are specific to the dense...
default general problem formulation:
Definition TQpProbBase.h:89
TQpProbBase & operator=(const TQpProbBase &source)
Assignment operator.
dense matrix problem formulation
void JoinRHS(TVectorD &rhs_in, TVectorD &rhs1_in, TVectorD &rhs2_in, TVectorD &rhs3_in) override
Assembles a single vector object from three given vectors .
virtual TQpDataBase * MakeData(Double_t *c, Int_t nnzQ, Int_t *irowQ, Int_t *icolQ, Double_t *Q, Double_t *xlo, Bool_t *ixlo, Double_t *xup, Bool_t *ixup, Int_t nnzA, Int_t *irowA, Int_t *icolA, Double_t *A, Double_t *bA, Int_t nnzC, Int_t *irowC, Int_t *icolC, Double_t *C, Double_t *clo, Bool_t *iclo, Double_t *cup, Bool_t *icup)
Setup the data.
TQpProbSparse & operator=(const TQpProbSparse &source)
Assignment operator.
TQpVar * MakeVariables(const TQpDataBase *data) override
Setup the variables.
void MakeRandomData(TQpDataSparse *&data, TQpVar *&soln, Int_t nnzQ, Int_t nnzA, Int_t nnzC)
Create a random QP problem.
TQpResidual * MakeResiduals(const TQpDataBase *data) override
Setup the residuals.
void SeparateVars(TVectorD &x_in, TVectorD &y_in, TVectorD &z_in, TVectorD &vars_in) override
Extracts three component vectors from a given aggregated vector.
TQpLinSolverBase * MakeLinSys(const TQpDataBase *data) override
Setup the linear solver.
The Residuals class calculates and stores the quantities that appear on the right-hand side of the li...
Definition TQpResidual.h:62
Class containing the variables for the general QP formulation.
Definition TQpVar.h:60
Int_t GetNrows() const
Definition TVectorT.h:75