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

#include <COptMethodTruncatedNewton.h>

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

Public Member Functions

 COptMethodTruncatedNewton (const COptMethodTruncatedNewton &src, const CCopasiContainer *pParent=NULL)
 
virtual bool optimise ()
 
virtual ~COptMethodTruncatedNewton ()
 
- 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 ()
 
 COptMethodTruncatedNewton (const CCopasiContainer *pParent=NULL)
 
const C_FLOAT64evaluate ()
 
bool evaluateFunction (C_INT *n, C_FLOAT64 *x, C_FLOAT64 *f)
 
virtual bool initialize ()
 
void initObjects ()
 
C_INT sFun (C_INT *, C_FLOAT64 *, C_FLOAT64 *, C_FLOAT64 *)
 

Private Attributes

CVector< C_FLOAT64mBest
 
C_FLOAT64 mBestValue
 
bool mContinue
 
CVector< C_FLOAT64mCurrent
 
C_FLOAT64 mEvaluationValue
 
CVector< C_FLOAT64mGradient
 
unsigned C_INT32 mhIteration
 
unsigned C_INT32 mIteration
 
CTruncatedNewtonmpCTruncatedNewton
 
FTruncatedNewtonmpTruncatedNewton
 
C_INT 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 34 of file COptMethodTruncatedNewton.h.

Constructor & Destructor Documentation

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

Copy Constructor

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

Definition at line 39 of file COptMethodTruncatedNewton.cpp.

References initObjects().

COptMethodTruncatedNewton::~COptMethodTruncatedNewton ( )
virtual

Destructor

Definition at line 46 of file COptMethodTruncatedNewton.cpp.

References cleanup(), mpCTruncatedNewton, mpTruncatedNewton, and pdelete.

47 {
50  cleanup();
51 }
#define pdelete(p)
Definition: copasi.h:215
COptMethodTruncatedNewton::COptMethodTruncatedNewton ( const CCopasiContainer pParent = NULL)
private

Member Function Documentation

bool COptMethodTruncatedNewton::cleanup ( )
privatevirtual

Cleanup arrays and pointers.

Returns
bool success

Reimplemented from COptMethod.

Definition at line 256 of file COptMethodTruncatedNewton.cpp.

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

257 {
258  return true;
259 }
const C_FLOAT64 & COptMethodTruncatedNewton::evaluate ( )
private

Evaluate the objective function

Returns
bool continue

Definition at line 313 of file COptMethodTruncatedNewton.cpp.

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

Referenced by optimise(), and sFun().

314 {
315  // We do not need to check whether the parametric constraints are fulfilled
316  // since the parameters are created within the bounds.
319 
320  // when we leave the either the parameter or functional domain
321  // we penalize the objective value by forcing it to be larger
322  // than the best value recorded so far.
327 
328  return mEvaluationValue;
329 }
COptProblem * mpOptProblem
Definition: COptMethod.h:56
virtual bool calculate()
virtual bool checkFunctionalConstraints()
virtual bool checkParametricConstraints()
const C_FLOAT64 & getCalculateValue() const
bool COptMethodTruncatedNewton::evaluateFunction ( C_INT n,
C_FLOAT64 x,
C_FLOAT64 f 
)
private

objective function evaluation for specified parameters

bool COptMethodTruncatedNewton::initialize ( )
privatevirtual

Initialize arrays and pointer.

Returns
bool success

Reimplemented from COptMethod.

Definition at line 239 of file COptMethodTruncatedNewton.cpp.

References C_INT, cleanup(), COptMethod::initialize(), mBest, mBestValue, mContinue, mCurrent, mGradient, COptMethod::mpOptItem, mVariableSize, and CVector< CType >::resize().

Referenced by optimise().

240 {
241  cleanup();
242 
243  if (!COptMethod::initialize()) return false;
244 
245  mVariableSize = (C_INT) mpOptItem->size();
248 
249  mContinue = true;
250  mBestValue = std::numeric_limits<C_FLOAT64>::infinity();
252 
253  return true;
254 }
#define C_INT
Definition: copasi.h:115
virtual bool initialize()
Definition: COptMethod.cpp:189
void resize(size_t size, const bool &copy=false)
Definition: CVector.h:301
const std::vector< COptItem * > * mpOptItem
Definition: COptMethod.h:70
void COptMethodTruncatedNewton::initObjects ( )
private

Initialize contained objects.

Definition at line 53 of file COptMethodTruncatedNewton.cpp.

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

Referenced by COptMethodTruncatedNewton().

54 {
56 }
CCopasiObject * addObjectReference(const std::string &name, CType &reference, const unsigned C_INT32 &flag=0)
bool COptMethodTruncatedNewton::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 58 of file COptMethodTruncatedNewton.cpp.

References CVectorCore< CType >::array(), C_FLOAT64, C_INT, COptItem::checkConstraint(), COutputInterface::DURING, evaluate(), fatalError, COptItem::getLowerBoundValue(), COptItem::getStartValue(), COptItem::getUpperBoundValue(), initialize(), max, mBest, mBestValue, mContinue, mCurrent, mEvaluationValue, mGradient, mpCTruncatedNewton, COptMethod::mpOptProblem, COptMethod::mpParentTask, mpTruncatedNewton, mVariableSize, CCopasiTask::output(), COptProblem::setSolution(), and CTruncatedNewton::tnbc_().

59 {
60  if (!initialize()) return false;
61 
62  C_FLOAT64 fest;
63  C_INT lw, ierror = 0;
64  lw = 14 * mVariableSize;
65 
69  CVector< C_FLOAT64 > dwork(lw);
70 
73 
74  // initial point is the first guess but we have to make sure that
75  // we are within the parameter domain
76  C_INT i, repeat;
77 
78  for (i = 0; i < mVariableSize; i++)
79  {
80  const COptItem & OptItem = *(*mpOptItem)[i];
81 
82  // :TODO: In COPASI the bounds are not necessarry fixed.
83  // Since evaluate checks for boundaries and constraints this is not
84  // needed. The question remaining is how does tnbc_ handle unconstraint problems?
85  // low[i] = *OptItem.getLowerBoundValue();
86  // up[i] = *OptItem.getUpperBoundValue();
87 
88  mCurrent[i] = OptItem.getStartValue();
89 
90  switch (OptItem.checkConstraint(mCurrent[i]))
91  {
92  case - 1:
93  mCurrent[i] = *OptItem.getLowerBoundValue();
94  break;
95 
96  case 1:
97  mCurrent[i] = *OptItem.getUpperBoundValue();
98  break;
99 
100  case 0:
101  break;
102  }
103 
104  // set the value
105  (*(*mpSetCalculateVariable)[i])(mCurrent[i]);
106  }
107 
108  // Report the first value as the current best
109  mBestValue = evaluate();
110  mBest = mCurrent;
112 
113  repeat = 0;
114 
115  while (repeat < 10 && mContinue)
116  {
117  repeat++;
118 
119  // estimate minimum is 1/10 initial function value
120  fest = (1 - pow(0.9, (C_FLOAT64) repeat)) * mEvaluationValue;
121  ierror = 0;
122 
123  // minimise
124  try
125  {
126  mpCTruncatedNewton->tnbc_(&ierror, &mVariableSize, mCurrent.array(), &fest, mGradient.array(), dwork.array(),
127  &lw, mpTruncatedNewton, low.array(), up.array(), iPivot.array());
128  mEvaluationValue = fest;
129  }
130 
131  // This signals that the user opted to interupt
132  catch (bool)
133  {
134  break;
135  }
136 
137  if (ierror < 0)
138  fatalError(); // Invalid parameter values.
139 
140  // The way the method is currently implemented may lead to parameters just outside the boundaries.
141  // We need to check whether the current value is within the boundaries or whether the corrected
142  // leads to an improved solution.
143 
144  bool withinBounds = true;
145 
146  for (i = 0; i < mVariableSize; i++)
147  {
148  const COptItem & OptItem = *(*mpOptItem)[i];
149 
150  //force it to be within the bounds
151  switch (OptItem.checkConstraint(mCurrent[i]))
152  {
153  case - 1:
154  withinBounds = false;
155  mCurrent[i] = *OptItem.getLowerBoundValue();
156  break;
157 
158  case 1:
159  withinBounds = false;
160  mCurrent[i] = *OptItem.getUpperBoundValue();
161  break;
162 
163  case 0:
164  break;
165  }
166 
167  (*(*mpSetCalculateVariable)[i])(mCurrent[i]);
168  }
169 
170  evaluate();
171 
172  // Is the corrected value better than solution?
174  {
175  // We found a new best value lets report it.
176  // and store that value
177  mBest = mCurrent;
179 
181 
182  // We found a new best value lets report it.
184  }
185 
186  // We found a solution
187  if (withinBounds)
188  break;
189 
190  // Choosing another starting point will be left to the user
191 #ifdef XXXX
192 
193  // Try another starting point
194  for (i = 0; i < mVariableSize; i++)
195  {
196  mCurrent[i] *= 1.2;
197  const COptItem & OptItem = *(*mpOptItem)[i];
198 
199  //force it to be within the bounds
200  switch (OptItem.checkConstraint(mCurrent[i]))
201  {
202  case - 1:
203  mCurrent[i] = *OptItem.getLowerBoundValue();
204  break;
205 
206  case 1:
207  mCurrent[i] = *OptItem.getUpperBoundValue();
208  break;
209 
210  case 0:
211  break;
212  }
213 
214  (*(*mpSetCalculateVariable)[i])(mCurrent[i]);
215  }
216 
217  evaluate();
218 
219  // Check whether we improved
221  {
222  // We found a new best value lets report it.
223  // and store that value
224  mBest = mCurrent;
226 
228 
229  // We found a new best value lets report it.
231  }
232 
233 #endif // XXXX
234  }
235 
236  return true;
237 }
#define C_INT
Definition: copasi.h:115
virtual C_INT32 checkConstraint() const
Definition: COptItem.cpp:401
COptTask * mpParentTask
Definition: COptMethod.h:58
#define fatalError()
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)
const C_FLOAT64 & getStartValue() const
Definition: COptItem.cpp:199
#define C_FLOAT64
Definition: copasi.h:92
CType * array()
Definition: CVector.h:139
const C_FLOAT64 * getUpperBoundValue() const
Definition: COptItem.h:198
int tnbc_(C_INT *, C_INT *, C_FLOAT64 *, C_FLOAT64 *, C_FLOAT64 *, C_FLOAT64 *, C_INT *, FTruncatedNewton *, C_FLOAT64 *, C_FLOAT64 *, C_INT *)
#define max(a, b)
Definition: f2c.h:176
C_INT COptMethodTruncatedNewton::sFun ( C_INT n,
C_FLOAT64 x,
C_FLOAT64 f,
C_FLOAT64 g 
)
private

callback function for evaluation of objective function and its gradient

Definition at line 263 of file COptMethodTruncatedNewton.cpp.

References C_INT, COutputInterface::DURING, evaluate(), mBest, mBestValue, mContinue, mEvaluationValue, COptMethod::mpOptProblem, COptMethod::mpParentTask, COptMethod::mpSetCalculateVariable, CCopasiTask::output(), and COptProblem::setSolution().

264 {
265  C_INT i;
266 
267  // set the parameter values
268  for (i = 0; i < *n; i++)
269  (*(*mpSetCalculateVariable)[i])(x[i]);
270 
271  //carry out the function evaluation
272  *f = evaluate();
273 
274  // Check whether we improved
276  {
277  // We found a new best value lets report it.
278  // and store that value
279  for (i = 0; i < *n; i++)
280  mBest[i] = x[i];
281 
284 
285  // We found a new best value lets report it.
287  }
288 
289  // Calculate the gradient
290  for (i = 0; i < *n && mContinue; i++)
291  {
292  if (x[i] != 0.0)
293  {
294  (*(*mpSetCalculateVariable)[i])(x[i] * 1.001);
295  g[i] = (evaluate() - *f) / (x[i] * 0.001);
296  }
297 
298  else
299  {
300  (*(*mpSetCalculateVariable)[i])(1e-7);
301  g[i] = (evaluate() - *f) / 1e-7;
302  }
303 
304  (*(*mpSetCalculateVariable)[i])(x[i]);
305  }
306 
307  if (!mContinue)
308  throw bool(mContinue);
309 
310  return 0;
311 }
#define C_INT
Definition: copasi.h:115
COptTask * mpParentTask
Definition: COptMethod.h:58
COptProblem * mpOptProblem
Definition: COptMethod.h:56
virtual void output(const COutputInterface::Activity &activity)
const std::vector< UpdateMethod * > * mpSetCalculateVariable
Definition: COptMethod.h:65
virtual bool setSolution(const C_FLOAT64 &value, const CVector< C_FLOAT64 > &variables)

Friends And Related Function Documentation

Member Data Documentation

CVector< C_FLOAT64 > COptMethodTruncatedNewton::mBest
private

The last individual

Definition at line 118 of file COptMethodTruncatedNewton.h.

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

C_FLOAT64 COptMethodTruncatedNewton::mBestValue
private

The best value found so far

Definition at line 123 of file COptMethodTruncatedNewton.h.

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

bool COptMethodTruncatedNewton::mContinue
private

Flag indicating whether the computation shall continue

Definition at line 133 of file COptMethodTruncatedNewton.h.

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

CVector< C_FLOAT64 > COptMethodTruncatedNewton::mCurrent
private

The current solution guess

Definition at line 108 of file COptMethodTruncatedNewton.h.

Referenced by initialize(), and optimise().

C_FLOAT64 COptMethodTruncatedNewton::mEvaluationValue
private

The result of a function evaluation

Definition at line 128 of file COptMethodTruncatedNewton.h.

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

CVector< C_FLOAT64 > COptMethodTruncatedNewton::mGradient
private

The gradient

Definition at line 113 of file COptMethodTruncatedNewton.h.

Referenced by initialize(), and optimise().

unsigned C_INT32 COptMethodTruncatedNewton::mhIteration
private

Handle to the process report item "Current Iteration"

Definition at line 98 of file COptMethodTruncatedNewton.h.

unsigned C_INT32 COptMethodTruncatedNewton::mIteration
private

The tolerance The number of iterations

Definition at line 93 of file COptMethodTruncatedNewton.h.

Referenced by initObjects().

CTruncatedNewton* COptMethodTruncatedNewton::mpCTruncatedNewton
private

CTruncatedNewton function.

Definition at line 143 of file COptMethodTruncatedNewton.h.

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

FTruncatedNewton* COptMethodTruncatedNewton::mpTruncatedNewton
private

Functor pointing to the Truncated Newton method.

Definition at line 138 of file COptMethodTruncatedNewton.h.

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

C_INT COptMethodTruncatedNewton::mVariableSize
private

number of parameters

Definition at line 103 of file COptMethodTruncatedNewton.h.

Referenced by initialize(), and optimise().


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