/usr/include/coin/ClpQuadraticObjective.hpp is in coinor-libclp-dev 1.12.0-2.1.
This file is owned by root:root, with mode 0o644.
The actual contents of the file can be viewed below.
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 115 116 117 118 119 120 121 122 123 124 125 126 127 128 129 130 131 132 133 134 135 136 137 138 139 140 141 142 143 144 145 146 147 148 149 150 151 152 153 | /* $Id: ClpQuadraticObjective.hpp 1525 2010-02-26 17:27:59Z mjs $ */
// Copyright (C) 2003, International Business Machines
// Corporation and others. All Rights Reserved.
#ifndef ClpQuadraticObjective_H
#define ClpQuadraticObjective_H
#include "ClpObjective.hpp"
#include "CoinPackedMatrix.hpp"
//#############################################################################
/** Quadratic Objective Class
*/
class ClpQuadraticObjective : public ClpObjective {
public:
///@name Stuff
//@{
/** 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
Uses model for scaling
includeLinear 0 - no, 1 as is, 2 as feasible
*/
virtual double * gradient(const ClpSimplex * model,
const double * solution, double & offset, bool refresh,
int includeLinear = 2);
/// Resize objective
/** Returns reduced gradient.Returns an offset (to be added to current one).
*/
virtual double reducedGradient(ClpSimplex * model, double * region,
bool useFeasibleCosts);
/** Returns step length which gives minimum of objective for
solution + theta * change vector up to maximum theta.
arrays are numberColumns+numberRows
Also sets current objective, predicted and at maximumTheta
*/
virtual double stepLength(ClpSimplex * model,
const double * solution,
const double * change,
double maximumTheta,
double & currentObj,
double & predictedObj,
double & thetaObj);
/// Return objective value (without any ClpModel offset) (model may be NULL)
virtual double objectiveValue(const ClpSimplex * model, const double * solution) const ;
virtual void resize(int newNumberColumns) ;
/// Delete columns in objective
virtual void deleteSome(int numberToDelete, const int * which) ;
/// Scale objective
virtual void reallyScale(const double * columnScale) ;
/** Given a zeroed array sets nonlinear columns to 1.
Returns number of nonlinear columns
*/
virtual int markNonlinear(char * which);
//@}
///@name Constructors and destructors
//@{
/// Default Constructor
ClpQuadraticObjective();
/// Constructor from objective
ClpQuadraticObjective(const double * linearObjective, int numberColumns,
const CoinBigIndex * start,
const int * column, const double * element,
int numberExtendedColumns_ = -1);
/** Copy constructor .
If type is -1 then make sure half symmetric,
if +1 then make sure full
*/
ClpQuadraticObjective(const ClpQuadraticObjective & rhs, int type = 0);
/** Subset constructor. Duplicates are allowed
and order is as given.
*/
ClpQuadraticObjective (const ClpQuadraticObjective &rhs, int numberColumns,
const int * whichColumns) ;
/// Assignment operator
ClpQuadraticObjective & operator=(const ClpQuadraticObjective& rhs);
/// Destructor
virtual ~ClpQuadraticObjective ();
/// Clone
virtual ClpObjective * clone() const;
/** Subset clone. Duplicates are allowed
and order is as given.
*/
virtual ClpObjective * subsetClone (int numberColumns,
const int * whichColumns) const;
/** Load up quadratic objective. This is stored as a CoinPackedMatrix */
void loadQuadraticObjective(const int numberColumns,
const CoinBigIndex * start,
const int * column, const double * element,
int numberExtendedColumns = -1);
void loadQuadraticObjective ( const CoinPackedMatrix& matrix);
/// Get rid of quadratic objective
void deleteQuadraticObjective();
//@}
///@name Gets and sets
//@{
/// Quadratic objective
inline CoinPackedMatrix * quadraticObjective() const {
return quadraticObjective_;
}
/// Linear objective
inline double * linearObjective() const {
return objective_;
}
/// Length of linear objective which could be bigger
inline int numberExtendedColumns() const {
return numberExtendedColumns_;
}
/// Number of columns in quadratic objective
inline int numberColumns() const {
return numberColumns_;
}
/// If a full or half matrix
inline bool fullMatrix() const {
return fullMatrix_;
}
//@}
//---------------------------------------------------------------------------
private:
///@name Private member data
/// Quadratic objective
CoinPackedMatrix * quadraticObjective_;
/// Objective
double * objective_;
/// Gradient
double * gradient_;
/// Useful to have number of columns about
int numberColumns_;
/// Also length of linear objective which could be bigger
int numberExtendedColumns_;
/// True if full symmetric matrix, false if half
bool fullMatrix_;
//@}
};
#endif
|