00001
00002
00003 #ifndef ClpObjective_H
00004 #define ClpObjective_H
00005
00006
00007
00008 class ClpSimplex;
00009 class ClpModel;
00010
00016 class ClpObjective {
00017
00018 public:
00019
00021
00022
00029 virtual double * gradient(const ClpSimplex * model,
00030 const double * solution,
00031 double & offset,bool refresh,
00032 int includeLinear=2)=0;
00035 virtual double reducedGradient(ClpSimplex * model, double * region,
00036 bool useFeasibleCosts)=0;
00043 virtual double stepLength(ClpSimplex * model,
00044 const double * solution,
00045 const double * change,
00046 double maximumTheta,
00047 double & currentObj,
00048 double & predictedObj,
00049 double & thetaObj)=0;
00051 virtual double objectiveValue(const ClpSimplex * model, const double * solution) const = 0;
00053 virtual void resize(int newNumberColumns) = 0;
00055 virtual void deleteSome(int numberToDelete, const int * which) = 0;
00057 virtual void reallyScale(const double * columnScale) =0;
00061 virtual int markNonlinear(char * which);
00063 virtual void newXValues() {}
00065
00066
00068
00069
00070 ClpObjective();
00071
00073 ClpObjective(const ClpObjective &);
00074
00076 ClpObjective & operator=(const ClpObjective& rhs);
00077
00079 virtual ~ClpObjective ();
00080
00082 virtual ClpObjective * clone() const = 0;
00087 virtual ClpObjective * subsetClone (int numberColumns,
00088 const int * whichColumns) const;
00089
00091
00093
00094
00095 inline int type()
00096 { return type_;}
00098 inline int activated() const
00099 {return activated_;}
00101 inline void setActivated(int value)
00102 {activated_=value;}
00103
00105 inline double nonlinearOffset () const
00106 { return offset_;}
00108
00109
00110
00111 protected:
00113
00114
00115 double offset_;
00117 int type_;
00119 int activated_;
00121 };
00122
00123 #endif