61 ClassImp(TQpDataBase);
66 TQpDataBase::TQpDataBase()
77 TQpDataBase::TQpDataBase(Int_t nx,Int_t my,Int_t mz)
87 fXupBound.ResizeTo(fNx);
88 fXupIndex.ResizeTo(fNx);
89 fXloBound.ResizeTo(fNx);
90 fXloIndex.ResizeTo(fNx);
92 fCupBound.ResizeTo(fMz);
93 fCupIndex.ResizeTo(fMz);
94 fCloBound.ResizeTo(fMz);
95 fCloIndex.ResizeTo(fMz);
102 TQpDataBase::TQpDataBase(
const TQpDataBase &another) : TObject(another)
111 void TQpDataBase::RandomlyChooseBoundedVariables(
112 TVectorD &x,TVectorD &dualx,TVectorD &xlow,TVectorD &ixlow,
113 TVectorD &xupp,TVectorD &ixupp,Double_t &ix,Double_t percentLowerOnly,
114 Double_t percentUpperOnly,Double_t percentBound)
116 const Int_t n = x.GetNrows();
121 for (i = 0; i < n; i++) {
122 const Double_t r = Drand(ix);
124 if (r < percentLowerOnly) {
126 xlow [i] = (Drand(ix)-0.5)*3.0;
130 else if (r < percentLowerOnly+percentUpperOnly) {
134 xupp [i] = (Drand(ix)-0.5)*3.0;
136 else if (r < percentLowerOnly+percentUpperOnly+percentBound) {
138 xlow [i] = (Drand(ix)-0.5)*3.0;
140 xupp [i] = xlow[i]+Drand(ix)*10.0;
151 for (i = 0; i < n; i++) {
152 if (ixlow[i] == 0.0 && ixupp[i] == 0.0 ) {
154 x [i] = 20.0*Drand(ix)-10.0;
157 else if (ixlow[i] != 0.0 && ixupp[i] != 0.0) {
159 const Double_t r = Drand(ix);
163 dualx[i] = 10.0*Drand(ix);
165 else if ( r > .66 ) {
168 dualx[i] = -10.0*Drand(ix);
172 const Double_t theta = .99*Drand(ix)+.005;
173 x [i] = (1-theta)*xlow[i]+theta*xupp[i];
177 else if (ixlow[i] != 0.0) {
179 if (Drand(ix) < .33 ) {
182 dualx[i] = 10.0*Drand(ix);
186 x [i] = xlow[i]+0.005+10.0*Drand(ix);
191 if (Drand(ix) > .66 ) {
194 dualx[i] = -10.0*Drand(ix);
198 x [i] = xupp[i]-0.005-10.0*Drand(ix);
209 TQpDataBase &TQpDataBase::operator=(
const TQpDataBase &source)
211 if (
this != &source) {
212 TObject::operator=(source);
217 fG .ResizeTo(source.fG) ; fG = source.fG ;
218 fBa .ResizeTo(source.fBa) ; fBa = source.fBa ;
219 fXupBound.ResizeTo(source.fXupBound); fXupBound = source.fXupBound;
220 fXupIndex.ResizeTo(source.fXupIndex); fXupIndex = source.fXupIndex;
221 fXloBound.ResizeTo(source.fXloBound); fXloBound = source.fXloBound;
222 fXloIndex.ResizeTo(source.fXloIndex); fXloIndex = source.fXloIndex;
223 fCupBound.ResizeTo(source.fCupBound); fCupBound = source.fCupBound;
224 fCupIndex.ResizeTo(source.fCupIndex); fCupIndex = source.fCupIndex;
225 fCloBound.ResizeTo(source.fCloBound); fCloBound = source.fCloBound;
226 fCloIndex.ResizeTo(source.fCloIndex); fCloIndex = source.fCloIndex;