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

#include <COptMethodHookeJeeves.h>

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

Public Member Functions

 COptMethodHookeJeeves (const COptMethodHookeJeeves &src, const CCopasiContainer *pParent=NULL)
 
virtual bool optimise ()
 
virtual ~COptMethodHookeJeeves ()
 
- 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

C_FLOAT64 bestNearby ()
 
virtual bool cleanup ()
 
 COptMethodHookeJeeves (const CCopasiContainer *pParent=NULL)
 
bool evaluate ()
 
virtual bool initialize ()
 
void initObjects ()
 

Private Attributes

CVector< C_FLOAT64mBefore
 
C_FLOAT64 mBestValue
 
bool mContinue
 
CVector< C_FLOAT64mDelta
 
C_FLOAT64 mEvaluationValue
 
size_t mhIteration
 
CVector< C_FLOAT64mIndividual
 
unsigned C_INT32 mIteration
 
unsigned C_INT32 mIterationLimit
 
CVector< C_FLOAT64mNew
 
C_FLOAT64 mRho
 
C_FLOAT64 mTolerance
 
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 30 of file COptMethodHookeJeeves.h.

Constructor & Destructor Documentation

COptMethodHookeJeeves::COptMethodHookeJeeves ( const COptMethodHookeJeeves src,
const CCopasiContainer pParent = NULL 
)

Copy Constructor

Parameters
constCOptMethodHookeJeeves & src
constCCopasiContainer * pParent (default: NULL)

Definition at line 51 of file COptMethodHookeJeeves.cpp.

References initObjects().

52  :
53  COptMethod(src, pParent)
54 {
55  initObjects();
56 }
COptMethodHookeJeeves::~COptMethodHookeJeeves ( )
virtual

Destructor

Definition at line 58 of file COptMethodHookeJeeves.cpp.

References cleanup().

59 {cleanup();}
COptMethodHookeJeeves::COptMethodHookeJeeves ( const CCopasiContainer pParent = NULL)
private

Default Constructor

Parameters
constCCopasiContainer * pParent (default: NULL)

Definition at line 41 of file COptMethodHookeJeeves.cpp.

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

Member Function Documentation

C_FLOAT64 COptMethodHookeJeeves::bestNearby ( )
private

Finds the best value in the neighborhood of mNew and updates mNew

Returns
C_FLOAT64 bestValue

Definition at line 293 of file COptMethodHookeJeeves.cpp.

References C_FLOAT64, COptItem::checkConstraint(), evaluate(), COptItem::getLowerBoundValue(), COptItem::getUpperBoundValue(), mBestValue, mDelta, mEvaluationValue, mIndividual, mNew, COptMethod::mpSetCalculateVariable, and mVariableSize.

Referenced by optimise().

294 {
295  C_FLOAT64 minf = mBestValue;
296  size_t i;
297 
298  mIndividual = mNew;
299 
300  for (i = 0; i < mVariableSize; i++)
301  (*(*mpSetCalculateVariable)[i])(mIndividual[i]);
302 
303  for (i = 0; i < mVariableSize; i++)
304  {
305  C_FLOAT64 & mut = mIndividual[i];
306  COptItem & OptItem = *(*mpOptItem)[i];
307  mut = mNew[i] + mDelta[i];
308 
309  // force it to be within the bounds
310  switch (OptItem.checkConstraint(mut))
311  {
312  case - 1:
313  mut = *OptItem.getLowerBoundValue();
314  break;
315 
316  case 1:
317  mut = *OptItem.getUpperBoundValue();
318  break;
319  }
320 
321  // We need to set the value here so that further checks take
322  // account of the value.
323  (*(*mpSetCalculateVariable)[i])(mut);
324 
325  if (!evaluate()) break;
326 
327  if (mEvaluationValue < minf)
328  minf = mEvaluationValue;
329  else
330  {
331  mDelta[i] = - mDelta[i];
332  mut = mNew[i] + mDelta[i];
333 
334  // force it to be within the bounds
335  switch (OptItem.checkConstraint(mut))
336  {
337  case - 1:
338  mut = *OptItem.getLowerBoundValue();
339  break;
340 
341  case 1:
342  mut = *OptItem.getUpperBoundValue();
343  break;
344  }
345 
346  // We need to set the value here so that further checks take
347  // account of the value.
348  (*(*mpSetCalculateVariable)[i])(mut);
349 
350  if (!evaluate()) break;
351 
352  if (mEvaluationValue < minf)
353  minf = mEvaluationValue;
354  else
355  {
356  mut = mNew[i];
357  (*(*mpSetCalculateVariable)[i])(mut);
358  }
359  }
360  }
361 
362  mNew = mIndividual;
363 
364  return(minf);
365 }
virtual C_INT32 checkConstraint() const
Definition: COptItem.cpp:401
const std::vector< UpdateMethod * > * mpSetCalculateVariable
Definition: COptMethod.h:65
const C_FLOAT64 * getLowerBoundValue() const
Definition: COptItem.h:191
CVector< C_FLOAT64 > mIndividual
#define C_FLOAT64
Definition: copasi.h:92
const C_FLOAT64 * getUpperBoundValue() const
Definition: COptItem.h:198
CVector< C_FLOAT64 > mNew
CVector< C_FLOAT64 > mDelta
bool COptMethodHookeJeeves::cleanup ( )
privatevirtual

Cleanup arrays and pointers.

Returns
bool success

Reimplemented from COptMethod.

Definition at line 263 of file COptMethodHookeJeeves.cpp.

Referenced by initialize(), optimise(), and ~COptMethodHookeJeeves().

264 {
265  return true;
266 }
bool COptMethodHookeJeeves::evaluate ( )
private

Evaluate the fitness of one individual

Returns
bool continue

Definition at line 268 of file COptMethodHookeJeeves.cpp.

References COptProblem::calculate(), COptProblem::checkFunctionalConstraints(), COptProblem::checkParametricConstraints(), COptProblem::getCalculateValue(), max, mContinue, mEvaluationValue, and COptMethod::mpOptProblem.

Referenced by bestNearby(), and optimise().

269 {
270  // We do not need to check whether the parametric constraints are fulfilled
271  // since the parameters are created within the bounds.
272 
273  // evaluate the fitness
275  {
277  return mContinue;
278  }
279 
281 
282  // check whether the functional constraints are fulfilled
284  mEvaluationValue = std::numeric_limits<C_FLOAT64>::infinity();
285  else
286  // get the value of the objective function
288 
289  return mContinue;
290 }
COptProblem * mpOptProblem
Definition: COptMethod.h:56
virtual bool calculate()
virtual bool checkFunctionalConstraints()
virtual bool checkParametricConstraints()
const C_FLOAT64 & getCalculateValue() const
#define max(a, b)
Definition: f2c.h:176
bool COptMethodHookeJeeves::initialize ( )
privatevirtual

Initialize arrays and pointer.

Returns
bool success

Reimplemented from COptMethod.

Definition at line 233 of file COptMethodHookeJeeves.cpp.

References CProcessReport::addItem(), cleanup(), CCopasiParameter::getValue(), COptMethod::initialize(), mBefore, mBestValue, mDelta, mhIteration, mIndividual, mIteration, mIterationLimit, mNew, CCopasiMethod::mpCallBack, COptMethod::mpOptItem, mRho, mTolerance, mVariableSize, CCopasiParameter::Value::pDOUBLE, CCopasiParameter::Value::pUINT, and CVector< CType >::resize().

Referenced by optimise().

234 {
235  cleanup();
236 
237  if (!COptMethod::initialize()) return false;
238 
239  mIterationLimit = * getValue("Iteration Limit").pUINT;
240  mTolerance = * getValue("Tolerance").pDOUBLE;
241  mRho = * getValue("Rho").pDOUBLE;
242 
243  mIteration = 0;
244 
245  if (mpCallBack)
246  mhIteration =
247  mpCallBack->addItem("Current Iteration",
248  mIteration,
249  & mIterationLimit);
250 
251  mVariableSize = mpOptItem->size();
252 
257 
258  mBestValue = std::numeric_limits<C_FLOAT64>::infinity();
259 
260  return true;
261 }
virtual bool initialize()
Definition: COptMethod.cpp:189
unsigned C_INT32 mIterationLimit
void resize(size_t size, const bool &copy=false)
Definition: CVector.h:301
CVector< C_FLOAT64 > mBefore
size_t addItem(const std::string &name, const std::string &value, const std::string *pEndValue=NULL)
const Value & getValue() const
unsigned C_INT32 * pUINT
CVector< C_FLOAT64 > mIndividual
const std::vector< COptItem * > * mpOptItem
Definition: COptMethod.h:70
CVector< C_FLOAT64 > mNew
CVector< C_FLOAT64 > mDelta
CProcessReport * mpCallBack
void COptMethodHookeJeeves::initObjects ( )
private

Initialize contained objects.

Definition at line 228 of file COptMethodHookeJeeves.cpp.

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

Referenced by COptMethodHookeJeeves().

229 {
231 }
CCopasiObject * addObjectReference(const std::string &name, CType &reference, const unsigned C_INT32 &flag=0)
bool COptMethodHookeJeeves::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. @ return success;

Reimplemented from COptMethod.

Definition at line 61 of file COptMethodHookeJeeves.cpp.

References bestNearby(), C_FLOAT64, COptItem::checkConstraint(), cleanup(), COutputInterface::DURING, evaluate(), CProcessReport::finishItem(), COptItem::getLowerBoundValue(), COptItem::getStartValue(), COptItem::getUpperBoundValue(), initialize(), mBefore, mBestValue, mContinue, mDelta, mEvaluationValue, mhIteration, mIndividual, mIteration, mIterationLimit, mNew, CCopasiMethod::mpCallBack, COptMethod::mpOptProblem, COptMethod::mpParentTask, mRho, mTolerance, mVariableSize, CCopasiTask::output(), CProcessReport::progressItem(), and COptProblem::setSolution().

62 {
63  mContinue = true;
64 
65  if (!initialize())
66  {
67  if (mpCallBack)
69 
70  return false;
71  }
72 
73  C_FLOAT64 newf, steplength, tmp;
74  bool Keep;
75  size_t iadj;
76 
77  // initial point is first guess
78  size_t i;
79 
80  // initialise the guess vector
81  for (i = 0; i < mVariableSize; i++)
82  {
83  C_FLOAT64 & mut = mIndividual[i];
84  COptItem & OptItem = *(*mpOptItem)[i];
85 
86  mut = OptItem.getStartValue();
87 
88  // force it to be within the bounds
89  switch (OptItem.checkConstraint(mut))
90  {
91  case - 1:
92  mut = *OptItem.getLowerBoundValue();
93  break;
94 
95  case 1:
96  mut = *OptItem.getUpperBoundValue();
97  break;
98  }
99 
100  // We need to set the value here so that further checks take
101  // account of the value.
102  (*(*mpSetCalculateVariable)[i])(mut);
103  }
104 
105  mContinue &= evaluate();
106 
107  // The first value is also the best
111 
112  if (!mContinue)
113  {
114  if (mpCallBack)
116 
117  cleanup();
118  return true;
119  }
120 
121  for (i = 0; i < mVariableSize; i++)
122  {
123  mNew[i] = mBefore[i] = mIndividual[i];
124  mDelta[i] = fabs(mIndividual[i] * mRho);
125 
126  if (mDelta[i] == 0.0) mDelta[i] = mRho;
127  }
128 
129  iadj = 0;
130  steplength = mRho;
131 
132  newf = mBestValue;
133 
134  while ((mIteration < mIterationLimit) && (steplength > mTolerance) && mContinue)
135  {
136  // signal another iteration to Gepasi
137  if (mpCallBack)
139 
140  mIteration++;
141  iadj++;
142 
143  /* find best new point, one coord at a time */
144  mNew = mBefore;
145 
146  newf = bestNearby();
147 
148  /* if we made some improvements, pursue that direction */
149  Keep = true;
150 
151  while ((newf < mBestValue) && Keep && mContinue)
152  {
153  // We found a better value
154  mBestValue = newf;
157 
158  iadj = 0;
159 
160  for (i = 0; i < mVariableSize; i++)
161  {
162  C_FLOAT64 & mut = mNew[i];
163  COptItem & OptItem = *(*mpOptItem)[i];
164 
165  /* firstly, arrange the sign of mDelta[] */
166  if (mut <= mBefore[i])
167  mDelta[i] = - fabs(mDelta[i]);
168  else
169  mDelta[i] = fabs(mDelta[i]);
170 
171  /* now, move further in this direction */
172  tmp = mBefore[i];
173  mBefore[i] = mut;
174  mut = mut + mut - tmp;
175 
176  // force it to be within the bounds
177  switch (OptItem.checkConstraint(mut))
178  {
179  case - 1:
180  mut = *OptItem.getLowerBoundValue();
181  break;
182 
183  case 1:
184  mut = *OptItem.getUpperBoundValue();
185  break;
186  }
187 
188  // We need to set the value here so that further checks take
189  // account of the value.
190  (*(*mpSetCalculateVariable)[i])(mut);
191  }
192 
193  newf = bestNearby();
194 
195  /* if the further (optimistic) move was bad.... */
196  if (newf >= mBestValue) break;
197 
198  /* make sure that the differences between the new */
199  /* and the old points are due to actual */
200  /* displacements; beware of roundoff errors that */
201  /* might cause newf < mBestValue */
202  Keep = false;
203 
204  for (i = 0; i < mVariableSize; i++)
205  if (fabs(mNew[i] - mBefore[i]) > (0.5 * fabs(mDelta[i])))
206  {
207  Keep = true;
208  break;
209  }
210  }
211 
212  if ((steplength >= mTolerance) && (newf >= mBestValue))
213  {
214  steplength = steplength * mRho;
215 
216  for (i = 0; i < mVariableSize; i++)
217  mDelta[i] *= mRho;
218  }
219  }
220 
221  if (mpCallBack)
223 
224  cleanup();
225  return true;
226 }
virtual C_INT32 checkConstraint() const
Definition: COptItem.cpp:401
COptTask * mpParentTask
Definition: COptMethod.h:58
unsigned C_INT32 mIterationLimit
COptProblem * mpOptProblem
Definition: COptMethod.h:56
virtual void output(const COutputInterface::Activity &activity)
virtual bool progressItem(const size_t &handle)
CVector< C_FLOAT64 > mBefore
const C_FLOAT64 * getLowerBoundValue() const
Definition: COptItem.h:191
virtual bool setSolution(const C_FLOAT64 &value, const CVector< C_FLOAT64 > &variables)
virtual bool finishItem(const size_t &handle)
CVector< C_FLOAT64 > mIndividual
const C_FLOAT64 & getStartValue() const
Definition: COptItem.cpp:199
#define C_FLOAT64
Definition: copasi.h:92
const C_FLOAT64 * getUpperBoundValue() const
Definition: COptItem.h:198
CVector< C_FLOAT64 > mNew
CVector< C_FLOAT64 > mDelta
CProcessReport * mpCallBack

Friends And Related Function Documentation

Member Data Documentation

CVector< C_FLOAT64 > COptMethodHookeJeeves::mBefore
private

The last individual

Definition at line 134 of file COptMethodHookeJeeves.h.

Referenced by initialize(), and optimise().

C_FLOAT64 COptMethodHookeJeeves::mBestValue
private

The best value found so far

Definition at line 154 of file COptMethodHookeJeeves.h.

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

bool COptMethodHookeJeeves::mContinue
private

Flag indicating whether the computation shall continue

Definition at line 159 of file COptMethodHookeJeeves.h.

Referenced by evaluate(), and optimise().

CVector< C_FLOAT64 > COptMethodHookeJeeves::mDelta
private

The step taken

Definition at line 144 of file COptMethodHookeJeeves.h.

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

C_FLOAT64 COptMethodHookeJeeves::mEvaluationValue
private

The value of the last evaluation.

Definition at line 149 of file COptMethodHookeJeeves.h.

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

size_t COptMethodHookeJeeves::mhIteration
private

Handle to the process report item "Current Iteration"

Definition at line 119 of file COptMethodHookeJeeves.h.

Referenced by initialize(), and optimise().

CVector< C_FLOAT64 > COptMethodHookeJeeves::mIndividual
private

The current individual

Definition at line 129 of file COptMethodHookeJeeves.h.

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

unsigned C_INT32 COptMethodHookeJeeves::mIteration
private

The number of iterations

Definition at line 114 of file COptMethodHookeJeeves.h.

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

unsigned C_INT32 COptMethodHookeJeeves::mIterationLimit
private

The maximum number of iterations

Definition at line 99 of file COptMethodHookeJeeves.h.

Referenced by initialize(), and optimise().

CVector< C_FLOAT64 > COptMethodHookeJeeves::mNew
private

The new individual

Definition at line 139 of file COptMethodHookeJeeves.h.

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

C_FLOAT64 COptMethodHookeJeeves::mRho
private

The length of steps taken

Definition at line 109 of file COptMethodHookeJeeves.h.

Referenced by initialize(), and optimise().

C_FLOAT64 COptMethodHookeJeeves::mTolerance
private

The tolerance

Definition at line 104 of file COptMethodHookeJeeves.h.

Referenced by initialize(), and optimise().

size_t COptMethodHookeJeeves::mVariableSize
private

number of parameters

Definition at line 124 of file COptMethodHookeJeeves.h.

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


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