#include <ClpQuadraticObjective.hpp>
Inheritance diagram for ClpQuadraticObjective:
Public Member Functions | |
Stuff | |
virtual double * | gradient (const double *solution, double &offset, bool refresh) |
virtual void | resize (int newNumberColumns) |
Resize objective. | |
virtual void | deleteSome (int numberToDelete, const int *which) |
Delete columns in objective. | |
Constructors and destructors | |
ClpQuadraticObjective () | |
Default Constructor. | |
ClpQuadraticObjective (const double *linearObjective, int numberColumns, const CoinBigIndex *start, const int *column, const double *element, int numberExtendedColumns_=-1) | |
Constructor from objective. | |
ClpQuadraticObjective (const ClpQuadraticObjective &) | |
Copy constructor. | |
ClpQuadraticObjective (const ClpQuadraticObjective &rhs, int numberColumns, const int *whichColumns) | |
ClpQuadraticObjective & | operator= (const ClpQuadraticObjective &rhs) |
Assignment operator. | |
virtual | ~ClpQuadraticObjective () |
Destructor. | |
virtual ClpObjective * | clone () const |
Clone. | |
virtual ClpObjective * | subsetClone (int numberColumns, const int *whichColumns) const |
void | loadQuadraticObjective (const int numberColumns, const CoinBigIndex *start, const int *column, const double *element, int numberExtendedColumns=-1) |
void | loadQuadraticObjective (const CoinPackedMatrix &matrix) |
void | deleteQuadraticObjective () |
Get rid of quadratic objective. | |
Gets and sets | |
CoinPackedMatrix * | quadraticObjective () const |
Quadratic objective. | |
double * | linearObjective () const |
Linear objective. | |
int | numberExtendedColumns () const |
Length of linear objective which could be bigger. | |
int | numberColumns () const |
Number of columns in quadratic objective. | |
Private Attributes | |
Private member data | |
Quadratic objective | |
CoinPackedMatrix * | quadraticObjective_ |
double * | objective_ |
Objective. | |
double * | gradient_ |
Gradient. | |
int | numberColumns_ |
Useful to have number of columns about. | |
int | numberExtendedColumns_ |
Also length of linear objective which could be bigger. |
Definition at line 15 of file ClpQuadraticObjective.hpp.
|
Subset constructor. Duplicates are allowed and order is as given. Definition at line 86 of file ClpQuadraticObjective.cpp. References gradient_, numberColumns_, numberExtendedColumns_, objective_, and quadraticObjective_.
00089 : ClpObjective(rhs) 00090 { 00091 objective_=NULL; 00092 int extra = rhs.numberExtendedColumns_-rhs.numberColumns_; 00093 numberColumns_=0; 00094 if (numberColumns>0) { 00095 // check valid lists 00096 int numberBad=0; 00097 int i; 00098 for (i=0;i<numberColumns;i++) 00099 if (whichColumn[i]<0||whichColumn[i]>=rhs.numberColumns_) 00100 numberBad++; 00101 if (numberBad) 00102 throw CoinError("bad column list", "subset constructor", 00103 "ClpQuadraticObjective"); 00104 numberColumns_ = numberColumns; 00105 numberExtendedColumns_ = numberColumns+extra; 00106 objective_ = new double[numberExtendedColumns_]; 00107 for (i=0;i<numberColumns_;i++) 00108 objective_[i]=rhs.objective_[whichColumn[i]]; 00109 memcpy(objective_+numberColumns_,rhs.objective_+rhs.numberColumns_, 00110 (numberExtendedColumns_-numberColumns_)*sizeof(double)); 00111 if (rhs.gradient_) { 00112 gradient_ = new double[numberExtendedColumns_]; 00113 for (i=0;i<numberColumns_;i++) 00114 gradient_[i]=rhs.gradient_[whichColumn[i]]; 00115 memcpy(gradient_+numberColumns_,rhs.gradient_+rhs.numberColumns_, 00116 (numberExtendedColumns_-numberColumns_)*sizeof(double)); 00117 } 00118 } 00119 if (rhs.quadraticObjective_) { 00120 quadraticObjective_ = new CoinPackedMatrix(*rhs.quadraticObjective_, 00121 numberColumns,whichColumn, 00122 numberColumns,whichColumn); 00123 } else { 00124 quadraticObjective_=NULL; 00125 } 00126 } |
|
Returns gradient. If Quadratic then solution may be NULL, also returns an offset (to be added to current one) If refresh is false then uses last solution Implements ClpObjective. Definition at line 174 of file ClpQuadraticObjective.cpp. References gradient_, numberColumns_, numberExtendedColumns_, and objective_.
00175 { 00176 offset=0.0; 00177 if (!quadraticObjective_||!solution) { 00178 return objective_; 00179 } else { 00180 if (refresh||!gradient_) { 00181 if (!gradient_) 00182 gradient_ = new double[numberExtendedColumns_]; 00183 const int * columnQuadratic = quadraticObjective_->getIndices(); 00184 const int * columnQuadraticStart = quadraticObjective_->getVectorStarts(); 00185 const int * columnQuadraticLength = quadraticObjective_->getVectorLengths(); 00186 const double * quadraticElement = quadraticObjective_->getElements(); 00187 double offset=0.0; 00188 memcpy(gradient_,objective_,numberExtendedColumns_*sizeof(double)); 00189 int iColumn; 00190 for (iColumn=0;iColumn<numberColumns_;iColumn++) { 00191 double valueI = solution[iColumn]; 00192 int j; 00193 for (j=columnQuadraticStart[iColumn]; 00194 j<columnQuadraticStart[iColumn]+columnQuadraticLength[iColumn];j++) { 00195 int jColumn = columnQuadratic[j]; 00196 double valueJ = solution[jColumn]; 00197 double elementValue = quadraticElement[j]; 00198 elementValue *= 0.5; 00199 offset += valueI*valueJ*elementValue; 00200 double gradientI = valueJ*elementValue; 00201 double gradientJ = valueI*elementValue; 00202 offset -= gradientI*valueI; 00203 gradient_[iColumn] += gradientI; 00204 offset -= gradientJ*valueJ; 00205 gradient_[jColumn] += gradientJ; 00206 } 00207 } 00208 } 00209 return gradient_; 00210 } 00211 } |
|
Load up quadratic objective. This is stored as a CoinPackedMatrix Definition at line 342 of file ClpQuadraticObjective.cpp. References gradient_, numberColumns_, numberExtendedColumns_, and objective_.
00344 { 00345 delete quadraticObjective_; 00346 quadraticObjective_ = new CoinPackedMatrix(true,numberColumns,numberColumns, 00347 start[numberColumns],element,column,start,NULL); 00348 numberColumns_=numberColumns; 00349 if (numberExtended>numberExtendedColumns_) { 00350 if (objective_) { 00351 // make correct size 00352 double * newArray = new double[numberExtended]; 00353 memcpy(newArray,objective_,numberColumns_*sizeof(double)); 00354 delete [] objective_; 00355 objective_ = newArray; 00356 memset(objective_+numberColumns_,0,(numberExtended-numberColumns_)*sizeof(double)); 00357 } 00358 if (gradient_) { 00359 // make correct size 00360 double * newArray = new double[numberExtended]; 00361 memcpy(newArray,gradient_,numberColumns_*sizeof(double)); 00362 delete [] gradient_; 00363 gradient_ = newArray; 00364 memset(gradient_+numberColumns_,0,(numberExtended-numberColumns_)*sizeof(double)); 00365 } 00366 numberExtendedColumns_ = numberExtended; 00367 } else { 00368 numberExtendedColumns_ = numberColumns_; 00369 } 00370 } |
|
Subset clone. Duplicates are allowed and order is as given. Reimplemented from ClpObjective. Definition at line 224 of file ClpQuadraticObjective.cpp. References ClpQuadraticObjective().
00226 { 00227 return new ClpQuadraticObjective(*this, numberColumns, whichColumns); 00228 } |