COPASI API  4.16.103
Public Member Functions | Private Member Functions | Private Attributes | Friends | List of all members
COptMethodSteepestDescent Class Reference

#include <COptMethodSteepestDescent.h>

Inheritance diagram for COptMethodSteepestDescent:
Inheritance graph
[legend]
Collaboration diagram for COptMethodSteepestDescent:
Collaboration graph
[legend]

Public Member Functions

 COptMethodSteepestDescent (const COptMethodSteepestDescent &src, const CCopasiContainer *pParent=NULL)
 
virtual bool optimise ()
 
virtual ~COptMethodSteepestDescent ()
 
- Public Member Functions inherited from COptMethod
 COptMethod (const COptMethod &src, const CCopasiContainer *pParent=NULL)
 
bool isBounded (void)
 
virtual bool isValidProblem (const CCopasiProblem *pProblem)
 
void setProblem (COptProblem *problem)
 
virtual ~COptMethod ()
 
- Public Member Functions inherited from CCopasiMethod
 CCopasiMethod (const CCopasiMethod &src, const CCopasiContainer *pParent=NULL)
 
const CCopasiMethod::SubTypegetSubType () const
 
const CCopasiTask::TypegetType () const
 
virtual void load (CReadConfig &configBuffer, CReadConfig::Mode mode=CReadConfig::SEARCH)
 
virtual void print (std::ostream *ostream) const
 
virtual void printResult (std::ostream *ostream) const
 
virtual bool setCallBack (CProcessReport *pCallBack)
 
virtual ~CCopasiMethod ()
 
- Public Member Functions inherited from CCopasiParameterGroup
bool addGroup (const std::string &name)
 
bool addParameter (const CCopasiParameter &parameter)
 
bool addParameter (const std::string &name, const CCopasiParameter::Type type)
 
template<class CType >
bool addParameter (const std::string &name, const CCopasiParameter::Type type, const CType &value)
 
void addParameter (CCopasiParameter *pParameter)
 
CCopasiParameterGroupassertGroup (const std::string &name)
 
template<class CType >
CCopasiParameterassertParameter (const std::string &name, const CCopasiParameter::Type type, const CType &defaultValue)
 
index_iterator beginIndex () const
 
name_iterator beginName () const
 
 CCopasiParameterGroup (const CCopasiParameterGroup &src, const CCopasiContainer *pParent=NULL)
 
 CCopasiParameterGroup (const std::string &name, const CCopasiContainer *pParent=NULL, const std::string &objectType="ParameterGroup")
 
void clear ()
 
virtual bool elevateChildren ()
 
index_iterator endIndex () const
 
name_iterator endName () const
 
CCopasiParameterGroupgetGroup (const std::string &name)
 
const CCopasiParameterGroupgetGroup (const std::string &name) const
 
CCopasiParameterGroupgetGroup (const size_t &index)
 
const CCopasiParameterGroupgetGroup (const size_t &index) const
 
size_t getIndex (const std::string &name) const
 
std::string getKey (const std::string &name) const
 
std::string getKey (const size_t &index) const
 
virtual const std::string & getName (const size_t &index) const
 
virtual const CObjectInterfacegetObject (const CCopasiObjectName &cn) const
 
CCopasiParametergetParameter (const std::string &name)
 
const CCopasiParametergetParameter (const std::string &name) const
 
CCopasiParametergetParameter (const size_t &index)
 
const CCopasiParametergetParameter (const size_t &index) const
 
CCopasiParameter::Type getType (const std::string &name) const
 
CCopasiParameter::Type getType (const size_t &index) const
 
std::string getUniqueParameterName (const CCopasiParameter *pParameter) const
 
const CCopasiParameter::ValuegetValue (const std::string &name) const
 
const CCopasiParameter::ValuegetValue (const size_t &index) const
 
CCopasiParameter::ValuegetValue (const std::string &name)
 
CCopasiParameter::ValuegetValue (const size_t &index)
 
CCopasiParameterGroupoperator= (const CCopasiParameterGroup &rhs)
 
bool removeParameter (const std::string &name)
 
bool removeParameter (const size_t &index)
 
template<class CType >
bool setValue (const std::string &name, const CType &value)
 
template<class CType >
bool setValue (const size_t &index, const CType &value)
 
size_t size () const
 
bool swap (const size_t &iFrom, const size_t &iTo)
 
bool swap (index_iterator &from, index_iterator &to)
 
virtual ~CCopasiParameterGroup ()
 
- Public Member Functions inherited from CCopasiParameter
 CCopasiParameter (const CCopasiParameter &src, const CCopasiContainer *pParent=NULL)
 
 CCopasiParameter (const std::string &name, const Type &type, const void *pValue=NULL, const CCopasiContainer *pParent=NULL, const std::string &objectType="Parameter")
 
virtual CCopasiObjectName getCN () const
 
virtual const std::string & getKey () const
 
virtual std::string getObjectDisplayName (bool regular=true, bool richtext=false) const
 
const CCopasiParameter::TypegetType () const
 
const ValuegetValue () const
 
ValuegetValue ()
 
virtual voidgetValuePointer () const
 
CCopasiObjectgetValueReference () const
 
bool isValidValue (const C_FLOAT64 &value) const
 
bool isValidValue (const C_INT32 &value) const
 
bool isValidValue (const unsigned C_INT32 &value) const
 
bool isValidValue (const bool &value) const
 
bool isValidValue (const std::string &value) const
 
bool isValidValue (const CCopasiObjectName &value) const
 
bool isValidValue (const std::vector< CCopasiParameter * > &value) const
 
CCopasiParameteroperator= (const CCopasiParameter &rhs)
 
template<class CType >
bool setValue (const CType &value)
 
bool setValue (const std::vector< CCopasiParameter * > &value)
 
virtual ~CCopasiParameter ()
 
- Public Member Functions inherited from CCopasiContainer
virtual bool add (CCopasiObject *pObject, const bool &adopt=true)
 
 CCopasiContainer (const std::string &name, const CCopasiContainer *pParent=NULL, const std::string &type="CN", const unsigned C_INT32 &flag=CCopasiObject::Container)
 
 CCopasiContainer (const CCopasiContainer &src, const CCopasiContainer *pParent=NULL)
 
virtual std::string getChildObjectUnits (const CCopasiObject *pObject) const
 
virtual const objectMapgetObjects () const
 
virtual std::string getUnits () const
 
virtual const CCopasiObjectgetValueObject () const
 
virtual bool remove (CCopasiObject *pObject)
 
virtual ~CCopasiContainer ()
 
- Public Member Functions inherited from CCopasiObject
void addDirectDependency (const CCopasiObject *pObject)
 
 CCopasiObject (const CCopasiObject &src, const CCopasiContainer *pParent=NULL)
 
void clearDirectDependencies ()
 
void clearRefresh ()
 
bool dependsOn (DataObjectSet candidates, const DataObjectSet &context=DataObjectSet()) const
 
void getAllDependencies (DataObjectSet &dependencies, const DataObjectSet &context) const
 
virtual const DataObjectSetgetDirectDependencies (const DataObjectSet &context=DataObjectSet()) const
 
CCopasiContainergetObjectAncestor (const std::string &type) const
 
CCopasiDataModelgetObjectDataModel ()
 
const CCopasiDataModelgetObjectDataModel () const
 
const std::string & getObjectName () const
 
CCopasiContainergetObjectParent () const
 
const std::string & getObjectType () const
 
virtual const
CObjectInterface::ObjectSet
getPrerequisites () const
 
virtual RefreshgetRefresh () const
 
UpdateMethodgetUpdateMethod () const
 
bool hasCircularDependencies (DataObjectSet &candidates, DataObjectSet &verified, const DataObjectSet &context) const
 
bool hasUpdateMethod () const
 
bool isArray () const
 
bool isContainer () const
 
bool isDataModel () const
 
bool isMatrix () const
 
bool isNameVector () const
 
bool isNonUniqueName () const
 
virtual bool isPrerequisiteForContext (const CObjectInterface *pObject, const CMath::SimulationContextFlag &context, const CObjectInterface::ObjectSet &changedObjects) const
 
bool isReference () const
 
bool isRoot () const
 
bool isSeparator () const
 
bool isStaticString () const
 
bool isValueBool () const
 
bool isValueDbl () const
 
bool isValueInt () const
 
bool isValueInt64 () const
 
bool isValueString () const
 
bool isVector () const
 
virtual bool mustBeDeleted (const DataObjectSet &deletedObjects) const
 
void removeDirectDependency (const CCopasiObject *pObject)
 
void setDirectDependencies (const DataObjectSet &directDependencies)
 
bool setObjectName (const std::string &name)
 
virtual bool setObjectParent (const CCopasiContainer *pParent)
 
void setObjectValue (const C_FLOAT64 &value)
 
void setObjectValue (const C_INT32 &value)
 
void setObjectValue (const bool &value)
 
template<class CType >
void setRefresh (CType *pType, void(CType::*method)(void))
 
template<class CType >
void setUpdateMethod (CType *pType, void(CType::*method)(const C_FLOAT64 &))
 
template<class CType >
void setUpdateMethod (CType *pType, void(CType::*method)(const C_INT32 &))
 
template<class CType >
void setUpdateMethod (CType *pType, void(CType::*method)(const bool &))
 
virtual ~CCopasiObject ()
 
- Public Member Functions inherited from CObjectInterface
 CObjectInterface ()
 
virtual ~CObjectInterface ()
 

Private Member Functions

virtual bool cleanup ()
 
 COptMethodSteepestDescent (const CCopasiContainer *pParent=NULL)
 
C_FLOAT64 descentLine (const C_FLOAT64 &x)
 
const C_FLOAT64evaluate ()
 
void gradient ()
 
virtual bool initialize ()
 
void initObjects ()
 

Private Attributes

C_FLOAT64 mBestValue
 
bool mContinue
 
unsigned C_INT32 mCurrentIteration
 
CVector< C_FLOAT64mGradient
 
CVector< C_FLOAT64mIndividual
 
unsigned C_INT32 mIterations
 
FDescentmpDescent
 
C_FLOAT64 mTolerance
 
C_FLOAT64 mValue
 
size_t mVariableSize
 

Friends

COptMethodCOptMethod::createMethod (CCopasiMethod::SubType subType)
 

Additional Inherited Members

- Public Types inherited from CCopasiMethod
enum  SubType {
  unset = 0, RandomSearch, RandomSearchMaster, SimulatedAnnealing,
  CoranaWalk, DifferentialEvolution, ScatterSearch, GeneticAlgorithm,
  EvolutionaryProgram, SteepestDescent, HybridGASA, GeneticAlgorithmSR,
  HookeJeeves, LevenbergMarquardt, NelderMead, SRES,
  Statistics, ParticleSwarm, Praxis, TruncatedNewton,
  Newton, deterministic, LSODAR, directMethod,
  stochastic, tauLeap, adaptiveSA, hybrid,
  hybridLSODA, hybridODE45, DsaLsodar, tssILDM,
  tssILDMModified, tssCSP, mcaMethodReder, scanMethod,
  lyapWolf, sensMethod, EFMAlgorithm, EFMBitPatternTreeAlgorithm,
  EFMBitPatternAlgorithm, Householder, crossSectionMethod, linearNoiseApproximation
}
 
- Public Types inherited from CCopasiParameterGroup
typedef parameterGroup::iterator index_iterator
 
typedef
CCopasiContainer::objectMap::iterator 
name_iterator
 
typedef std::vector
< CCopasiParameter * > 
parameterGroup
 
- Public Types inherited from CCopasiParameter
enum  Type {
  DOUBLE = 0, UDOUBLE, INT, UINT,
  BOOL, GROUP, STRING, CN,
  KEY, FILE, EXPRESSION, INVALID
}
 
- Public Types inherited from CCopasiContainer
typedef std::multimap
< std::string, CCopasiObject * > 
objectMap
 
- Public Types inherited from CCopasiObject
typedef std::set< const
CCopasiObject * > 
DataObjectSet
 
typedef std::vector< Refresh * > DataUpdateSequence
 
- Public Types inherited from CObjectInterface
typedef std::set< const
CObjectInterface * > 
ObjectSet
 
typedef std::vector
< CObjectInterface * > 
UpdateSequence
 
- Static Public Member Functions inherited from COptMethod
static COptMethodcreateMethod (CCopasiMethod::SubType subType=CCopasiMethod::RandomSearch)
 
- Static Public Member Functions inherited from CCopasiObject
static std::vector< Refresh * > buildUpdateSequence (const DataObjectSet &objects, const DataObjectSet &uptoDateObjects, const DataObjectSet &context=DataObjectSet())
 
static void setRenameHandler (CRenameHandler *rh)
 
- Static Public Attributes inherited from CCopasiMethod
static const std::string SubTypeName []
 
static const char * XMLSubType []
 
- Static Public Attributes inherited from CCopasiParameter
static const std::string TypeName []
 
static const char * XMLType []
 
- Static Public Attributes inherited from CCopasiContainer
static const std::vector
< CCopasiContainer * > 
EmptyList
 
- Protected Types inherited from CCopasiObject
enum  Flag {
  Container = 0x1, Vector = 0x2, Matrix = 0x4, NameVector = 0x8,
  Reference = 0x10, ValueBool = 0x20, ValueInt = 0x40, ValueInt64 = 0x80,
  ValueDbl = 0x100, NonUniqueName = 0x200, StaticString = 0x400, ValueString = 0x800,
  Separator = 0x1000, ModelEntity = 0x2000, Array = 0x4000, DataModel = 0x8000,
  Root = 0x10000, Gui = 0x20000
}
 
- Protected Member Functions inherited from COptMethod
 COptMethod (const CCopasiTask::Type &taskType, const SubType &subType, const CCopasiContainer *pParent=NULL)
 
- Protected Member Functions inherited from CCopasiMethod
 CCopasiMethod (const CCopasiTask::Type &taskType, const SubType &subType, const CCopasiContainer *pParent=NULL)
 
- Protected Member Functions inherited from CCopasiParameterGroup
 CCopasiParameterGroup ()
 
- Protected Member Functions inherited from CCopasiContainer
template<class CType >
CCopasiObjectaddMatrixReference (const std::string &name, CType &reference, const unsigned C_INT32 &flag=0)
 
template<class CType >
CCopasiObjectaddObjectReference (const std::string &name, CType &reference, const unsigned C_INT32 &flag=0)
 
template<class CType >
CCopasiObjectaddVectorReference (const std::string &name, CType &reference, const unsigned C_INT32 &flag=0)
 
void initObjects ()
 
- Protected Member Functions inherited from CCopasiObject
 CCopasiObject ()
 
 CCopasiObject (const std::string &name, const CCopasiContainer *pParent=NULL, const std::string &type="CN", const unsigned C_INT32 &flag=0)
 
- Protected Attributes inherited from COptMethod
const bool mBounds
 
const std::vector< COptItem * > * mpOptContraints
 
const std::vector< COptItem * > * mpOptItem
 
COptProblemmpOptProblem
 
COptTaskmpParentTask
 
const std::vector
< UpdateMethod * > * 
mpSetCalculateVariable
 
- Protected Attributes inherited from CCopasiMethod
CProcessReportmpCallBack
 
- Protected Attributes inherited from CCopasiParameter
std::string mKey
 
CCopasiObjectmpValueReference
 
size_t mSize
 
Value mValue
 
- Protected Attributes inherited from CCopasiContainer
objectMap mObjects
 
- Static Protected Attributes inherited from CCopasiObject
static CRenameHandlersmpRenameHandler = NULL
 

Detailed Description

Definition at line 32 of file COptMethodSteepestDescent.h.

Constructor & Destructor Documentation

COptMethodSteepestDescent::COptMethodSteepestDescent ( const CCopasiContainer pParent = NULL)
private

Default Constructor

Definition at line 26 of file COptMethodSteepestDescent.cpp.

References CCopasiParameterGroup::addParameter(), C_FLOAT64, C_INT32, CCopasiParameter::DOUBLE, and CCopasiParameter::UINT.

26  :
28  mIterations(100),
29  mTolerance(1e-6),
30  mContinue(true),
31  mBestValue(std::numeric_limits< C_FLOAT64 >::infinity()),
32  mValue(0.0),
33  mVariableSize(0),
34  mIndividual(0),
35  mGradient(0),
38 {
39  addParameter("Iteration Limit", CCopasiParameter::UINT, (unsigned C_INT32) 100);
40  addParameter("Tolerance", CCopasiParameter::DOUBLE, (C_FLOAT64) 1e-6);
41 }
#define C_INT32
Definition: copasi.h:90
#define C_FLOAT64
Definition: copasi.h:92
bool addParameter(const CCopasiParameter &parameter)
C_FLOAT64 descentLine(const C_FLOAT64 &x)
COptMethodSteepestDescent::COptMethodSteepestDescent ( const COptMethodSteepestDescent src,
const CCopasiContainer pParent = NULL 
)

Copy Constructor

Parameters
constCOptMethodSteepestDescent & src

Definition at line 43 of file COptMethodSteepestDescent.cpp.

44  : COptMethod(src, pParent),
47  mContinue(src.mContinue),
49  mValue(src.mValue),
52  mGradient(src.mGradient),
55 {}
C_FLOAT64 descentLine(const C_FLOAT64 &x)
COptMethodSteepestDescent::~COptMethodSteepestDescent ( )
virtual

Destructor

Definition at line 57 of file COptMethodSteepestDescent.cpp.

References cleanup(), mpDescent, and pdelete.

58 {
60 
61  cleanup();
62 }
#define pdelete(p)
Definition: copasi.h:215

Member Function Documentation

bool COptMethodSteepestDescent::cleanup ( )
privatevirtual

Cleanup arrays and pointers.

Returns
bool success

Reimplemented from COptMethod.

Definition at line 198 of file COptMethodSteepestDescent.cpp.

Referenced by initialize(), and ~COptMethodSteepestDescent().

199 {
200  // pdelete all used variables
201  return true;
202 }
C_FLOAT64 COptMethodSteepestDescent::descentLine ( const C_FLOAT64 x)
private

Descent int the direction of the gradient with step x and evaluate the objective function

Parameters
constC_FLOAT64 & x
Returns
const C_FLOAT64 objectiveValue

Definition at line 250 of file COptMethodSteepestDescent.cpp.

References evaluate(), mGradient, mIndividual, COptMethod::mpSetCalculateVariable, and mVariableSize.

Referenced by optimise().

251 {
252  for (size_t i = 0; i < mVariableSize; i++)
253  (*(*mpSetCalculateVariable)[i])(mIndividual[i] + x * mGradient[i]);
254 
255  return evaluate();
256 }
const std::vector< UpdateMethod * > * mpSetCalculateVariable
Definition: COptMethod.h:65
const C_FLOAT64 & COptMethodSteepestDescent::evaluate ( )
private

Evaluate the objective function for the current parameters

Returns
const C_FLOAT64 & objectiveValue

Definition at line 259 of file COptMethodSteepestDescent.cpp.

References COptProblem::calculate(), COptProblem::checkFunctionalConstraints(), COptProblem::checkParametricConstraints(), COptProblem::getCalculateValue(), mBestValue, mContinue, COptMethod::mpOptProblem, and mValue.

Referenced by descentLine(), gradient(), and optimise().

260 {
261  // evaluate the fitness
263 
265 
266  // when we leave the either the parameter or functional domain
267  // we penalize the objective value by forcing it to be larger
268  // than the best value recorded so far.
269  if (mValue < mBestValue &&
272  mValue = mBestValue + fabs(mBestValue - mValue);
273 
274  return mValue;
275 }
COptProblem * mpOptProblem
Definition: COptMethod.h:56
virtual bool calculate()
virtual bool checkFunctionalConstraints()
virtual bool checkParametricConstraints()
const C_FLOAT64 & getCalculateValue() const
void COptMethodSteepestDescent::gradient ( )
private

Calculate the gradient of the objective at the current parameters

Definition at line 223 of file COptMethodSteepestDescent.cpp.

References C_FLOAT64, evaluate(), mContinue, mGradient, COptMethod::mpOptItem, and mVariableSize.

Referenced by optimise().

224 {
225  size_t i;
226 
227  C_FLOAT64 y;
228  C_FLOAT64 x;
229 
230  y = evaluate();
231 
232  for (i = 0; i < mVariableSize && mContinue; i++)
233  {
234  if ((x = *(*mpOptItem)[i]->getObjectValue()) != 0.0)
235  {
236  (*(*mpSetCalculateVariable)[i])(x * 1.001);
237  mGradient[i] = (y - evaluate()) / (x * 0.001);
238  }
239 
240  else
241  {
242  (*(*mpSetCalculateVariable)[i])(1e-7);
243  mGradient[i] = (y - evaluate()) / 1e-7;
244  }
245 
246  (*(*mpSetCalculateVariable)[i])(x);
247  }
248 }
const std::vector< COptItem * > * mpOptItem
Definition: COptMethod.h:70
#define C_FLOAT64
Definition: copasi.h:92
bool COptMethodSteepestDescent::initialize ( )
privatevirtual

Initialize arrays and pointer.

Returns
bool success

Reimplemented from COptMethod.

Definition at line 204 of file COptMethodSteepestDescent.cpp.

References cleanup(), CCopasiParameter::getValue(), COptMethod::initialize(), mBestValue, mContinue, mGradient, mIndividual, mIterations, COptMethod::mpOptItem, mTolerance, mVariableSize, CCopasiParameter::Value::pDOUBLE, CCopasiParameter::Value::pUINT, and CVector< CType >::resize().

Referenced by optimise().

205 {
206  cleanup();
207 
208  if (!COptMethod::initialize()) return false;
209 
210  mIterations = * getValue("Iteration Limit").pUINT;
211  mTolerance = * getValue("Tolerance").pDOUBLE;
212 
213  mContinue = true;
214  mVariableSize = mpOptItem->size();
217 
218  mBestValue = std::numeric_limits<C_FLOAT64>::infinity();
219 
220  return true;
221 }
virtual bool initialize()
Definition: COptMethod.cpp:189
void resize(size_t size, const bool &copy=false)
Definition: CVector.h:301
const Value & getValue() const
unsigned C_INT32 * pUINT
const std::vector< COptItem * > * mpOptItem
Definition: COptMethod.h:70
void COptMethodSteepestDescent::initObjects ( )
private

Initialize contained objects.

Definition at line 277 of file COptMethodSteepestDescent.cpp.

References CCopasiContainer::addObjectReference(), mCurrentIteration, and CCopasiObject::ValueInt.

278 {
280 }
CCopasiObject * addObjectReference(const std::string &name, CType &reference, const unsigned C_INT32 &flag=0)
bool COptMethodSteepestDescent::optimise ( void  )
virtual

Execute the optimization algorithm calling simulation routine when needed. It is noted that this procedure can give feedback of its progress by the callback function set with SetCallback.

Reimplemented from COptMethod.

Definition at line 64 of file COptMethodSteepestDescent.cpp.

References C_FLOAT64, COptItem::checkConstraint(), descentLine(), COutputInterface::DURING, evaluate(), FminBrent(), COptItem::getLowerBoundValue(), COptItem::getStartValue(), COptItem::getUpperBoundValue(), gradient(), initialize(), max, mBestValue, mContinue, mCurrentIteration, mGradient, mIndividual, mIterations, mpDescent, COptMethod::mpOptItem, COptMethod::mpOptProblem, COptMethod::mpParentTask, mTolerance, mVariableSize, CCopasiTask::output(), and COptProblem::setSolution().

65 {
66  if (!initialize()) return false;
67 
68  size_t i, k;
69  C_FLOAT64 tmp, x0, alpha, mn, mx, fmn, fmx;
70  bool calc_grad;
71 
72  // initial point is first guess but we have to make sure that we
73  // are within the parameter domain
74  for (i = 0; i < mVariableSize; i++)
75  {
76  const COptItem & OptItem = *(*mpOptItem)[i];
77 
78  switch (OptItem.checkConstraint(OptItem.getStartValue()))
79  {
80  case - 1:
81  mIndividual[i] = *OptItem.getLowerBoundValue();
82  break;
83 
84  case 1:
85  mIndividual[i] = *OptItem.getUpperBoundValue();
86  break;
87 
88  case 0:
89  mIndividual[i] = OptItem.getStartValue();
90  break;
91  }
92 
93  (*(*mpSetCalculateVariable)[i])(mIndividual[i]);
94  }
95 
96  fmx = mBestValue = evaluate();
97 
99 
100  // We found a new best value lets report it.
101  //if (mpReport) mpReport->printBody();
103 
104  bool SolutionFound = false;
105 
106  for (mCurrentIteration = 0; mCurrentIteration < mIterations && mContinue && !SolutionFound; mCurrentIteration++)
107  {
108  // calculate the direction of steepest descent
109  // by central finite differences
110  gradient();
111  // minimise the function in this direction
112  // find brackets for the minimisation
113  // mn = 0.0; md = 1.0;
114  // mnbrak(&mn, &md, &mx, &fmn, &fmd, &fmx, descent_line);
115  // make sure that no parameter will exceed its bounds
117 
118  for (i = 0; i < mVariableSize; i++)
119  {
120  if (fabs(mGradient[i]) > std::numeric_limits< C_FLOAT64 >::epsilon())
121  {
122  if (mGradient[i] > 0)
123  {
124  tmp = *(*mpOptItem)[i]->getUpperBoundValue();
125  }
126 
127  else
128  {
129  tmp = *(*mpOptItem)[i]->getLowerBoundValue();
130  }
131 
132  // calculate the size of the largest jump
133  tmp = (tmp - mIndividual[i]) / mGradient[i];
134 
135  // keep it if it is the smallest
136  if (tmp < x0) x0 = tmp;
137  }
138  else mGradient[i] = 0.0;
139  }
140 
141  if (x0 < mTolerance) x0 = mTolerance;
142 
143  // we will move at a rate of 1/10 this size
144  mn = mx = alpha = 0.0;
145 
146  for (k = 0, calc_grad = false; (k < 9) && !calc_grad && !SolutionFound; k++)
147  {
148  // set the minimum to the last successful step
149  mn = mx;
150  fmn = fmx;
151  // increment alpha
152  alpha += 0.1 * x0;
153  // set the maximum to it
154  mx = alpha;
155 
156  // take one step in that direction
157  fmx = descentLine(alpha);
158 
159  fmx = evaluate();
160 
161  // if this was an upward step find the minimum
162  if (fmx > fmn)
163  {
164  //md = mn + (mx-mn)/2;
165  //Brent(mn, md, mx, descent_line, &alpha, &tmp, 1e-6, 50);
166 
167  FminBrent(mn, mx, mpDescent, &alpha, &tmp, mTolerance, 5);
168 
169  // take one step in that direction
170  fmx = descentLine(alpha);
171 
172  // time to evaluate the new steepest descent direction
173  calc_grad = true;
174  }
175 
176  if (fabs(fmx - mBestValue) < mTolerance)
177  SolutionFound = true;
178  }
179 
180  for (i = 0; i < mVariableSize; i++)
181  mIndividual[i] = *(*mpOptItem)[i]->getObjectValue();
182 
183  if (fmx < mBestValue)
184  {
185  mBestValue = fmx;
186 
188 
189  // We found a new best value lets report it.
190  //if (mpReport) mpReport->printBody();
192  }
193  }
194 
195  return true;
196 }
virtual C_INT32 checkConstraint() const
Definition: COptItem.cpp:401
COptTask * mpParentTask
Definition: COptMethod.h:58
COptProblem * mpOptProblem
Definition: COptMethod.h:56
virtual void output(const COutputInterface::Activity &activity)
const C_FLOAT64 * getLowerBoundValue() const
Definition: COptItem.h:191
virtual bool setSolution(const C_FLOAT64 &value, const CVector< C_FLOAT64 > &variables)
int FminBrent(double a, double b, FDescent *pF, double *min, double *fmin, double tol, int maxiter)
Definition: FminBrent.cpp:30
const C_FLOAT64 & getStartValue() const
Definition: COptItem.cpp:199
const std::vector< COptItem * > * mpOptItem
Definition: COptMethod.h:70
#define C_FLOAT64
Definition: copasi.h:92
const C_FLOAT64 * getUpperBoundValue() const
Definition: COptItem.h:198
C_FLOAT64 descentLine(const C_FLOAT64 &x)
#define max(a, b)
Definition: f2c.h:176

Friends And Related Function Documentation

Member Data Documentation

C_FLOAT64 COptMethodSteepestDescent::mBestValue
private

The best value found so far.

Definition at line 123 of file COptMethodSteepestDescent.h.

Referenced by evaluate(), initialize(), and optimise().

bool COptMethodSteepestDescent::mContinue
private

Indicates whether there the executions shall continue

Definition at line 118 of file COptMethodSteepestDescent.h.

Referenced by evaluate(), gradient(), initialize(), and optimise().

unsigned C_INT32 COptMethodSteepestDescent::mCurrentIteration
private

The current iteration

Definition at line 153 of file COptMethodSteepestDescent.h.

Referenced by initObjects(), and optimise().

CVector< C_FLOAT64 > COptMethodSteepestDescent::mGradient
private

The gradient vector for the objective function

Definition at line 143 of file COptMethodSteepestDescent.h.

Referenced by descentLine(), gradient(), initialize(), and optimise().

CVector< C_FLOAT64 > COptMethodSteepestDescent::mIndividual
private

A vector of parameters of the current individual

Definition at line 138 of file COptMethodSteepestDescent.h.

Referenced by descentLine(), initialize(), and optimise().

unsigned C_INT32 COptMethodSteepestDescent::mIterations
private

The maximum number of iterations.

Definition at line 108 of file COptMethodSteepestDescent.h.

Referenced by initialize(), and optimise().

FDescent* COptMethodSteepestDescent::mpDescent
private

Functor pointing to the descent method.

Definition at line 148 of file COptMethodSteepestDescent.h.

Referenced by optimise(), and ~COptMethodSteepestDescent().

C_FLOAT64 COptMethodSteepestDescent::mTolerance
private

The tolerance

Definition at line 113 of file COptMethodSteepestDescent.h.

Referenced by initialize(), and optimise().

C_FLOAT64 COptMethodSteepestDescent::mValue
private

array of values of objective function f/ individuals

Definition at line 128 of file COptMethodSteepestDescent.h.

Referenced by evaluate().

size_t COptMethodSteepestDescent::mVariableSize
private

number of parameters

Definition at line 133 of file COptMethodSteepestDescent.h.

Referenced by descentLine(), gradient(), initialize(), and optimise().


The documentation for this class was generated from the following files: