71 mpParmSubtaskCN(NULL),
72 mpParmObjectiveExpression(NULL),
74 mpParmRandomizeStartValues(NULL),
75 mpParmCalculateStatistics(NULL),
77 mpGrpConstraints(NULL),
79 mpConstraintItems(NULL),
81 mpObjectiveExpression(NULL),
83 mInitialRefreshMethods(),
85 mRefreshConstraints(),
92 mConstraintCounter(0),
93 mFailedConstraintCounter(0),
98 mHaveStatistics(false),
109 mWorstValue(src.mWorstValue),
110 mpParmSubtaskCN(NULL),
111 mpParmObjectiveExpression(NULL),
112 mpParmMaximize(NULL),
113 mpParmRandomizeStartValues(NULL),
114 mpParmCalculateStatistics(NULL),
116 mpGrpConstraints(NULL),
118 mpConstraintItems(NULL),
120 mpObjectiveExpression(NULL),
122 mInitialRefreshMethods(),
124 mRefreshConstraints(),
125 mCalculateValue(src.mCalculateValue),
126 mSolutionVariables(src.mSolutionVariables),
127 mOriginalVariables(src.mOriginalVariables),
128 mSolutionValue(src.mSolutionValue),
131 mConstraintCounter(0),
132 mFailedConstraintCounter(0),
136 mStoreResults(src.mStoreResults),
137 mHaveStatistics(src.mHaveStatistics),
138 mGradient(src.mGradient)
174 if ((pParameter =
getParameter(
"Steady-State")) != NULL)
216 if (pObjectiveFunction != NULL &&
228 elevate<CCopasiParameterGroup, CCopasiParameterGroup>(
mpGrpItems);
232 std::vector<CCopasiParameter *> * pValue =
233 mpGrpItems->CCopasiParameter::getValue().pGROUP;
238 for (; it != end; ++it)
239 if (!elevate<COptItem, CCopasiParameterGroup>(*it))
return false;
242 static_cast<std::vector<COptItem * > *
>(
mpGrpItems->CCopasiParameter::getValue().pVOID);
247 if (!mpGrpConstraints)
return false;
249 pValue = mpGrpConstraints->CCopasiParameter::getValue().pGROUP;
251 it = pValue->begin();
254 for (; it != end; ++it)
255 if (!elevate<COptItem, CCopasiParameterGroup>(*it))
return false;
258 static_cast<std::vector<COptItem * > *
>(mpGrpConstraints->CCopasiParameter::getValue().pVOID);
307 std::vector< CCopasiContainer * > ListOfContainer;
330 mWorstValue = (*
mpParmMaximize ? - std::numeric_limits<C_FLOAT64>::infinity() : std::numeric_limits<C_FLOAT64>::infinity());
346 std::vector< CCopasiContainer * > ContainerList;
347 ContainerList.push_back(
mpModel);
353 ContainerList.push_back(pTask);
372 std::vector< COptItem * >::iterator it =
mpOptItems->begin();
373 std::vector< COptItem * >::iterator end =
mpOptItems->end();
381 std::set< const CCopasiObject * > changedObjects;
383 for (i = 0; it != end; ++it, i++)
385 success &= (*it)->compile(ContainerList);
388 changedObjects.insert((*it)->getObject());
392 changedObjects.erase(NULL);
399 std::set< const CCopasiObject * > Objects;
401 for (i = 0; it != end; ++it, i++)
403 success &= (*it)->compile(ContainerList);
405 Objects.insert((*it)->getDirectDependencies().begin(),
406 (*it)->getDirectDependencies().end());
429 std::vector<COptItem * >::iterator it =
mpOptItems->begin();
430 std::vector<COptItem * >::iterator end =
mpOptItems->end();
432 std::set< const CCopasiObject * > ChangedObjects;
439 for (; it != end; ++it, pTmp++)
441 if ((*it)->getObject())
443 (*(*it)->COptItem::getUpdateMethod())(*pTmp);
444 (*it)->setStartValue(*pTmp);
446 ChangedObjects.insert((*it)->getObject());
455 for (; it != end; ++it, pTmp++)
457 if ((*it)->getObject())
460 (*(*it)->COptItem::getUpdateMethod())(*pTmp);
462 ChangedObjects.insert((*it)->getObject());
469 std::vector< Refresh * >::iterator itUpdate = UpdateSequence.begin();
470 std::vector< Refresh * >::iterator endUpdate = UpdateSequence.end();
472 for (; itUpdate != endUpdate; ++itUpdate)
498 std::vector< COptItem * >::const_iterator it =
mpOptItems->begin();
499 std::vector< COptItem * >::const_iterator end =
mpOptItems->end();
501 for (; it != end; ++it)
502 if ((*it)->checkConstraint())
return false;
513 for (; itRefresh != endRefresh; ++itRefresh)
521 for (; it != end; ++it)
522 if ((*it)->checkConstraint())
541 bool success =
false;
562 for (; it != end; ++it)
571 for (; it != end; ++it)
616 mGradient = std::numeric_limits<C_FLOAT64>::quiet_NaN();
619 for (i = 0; i < imax; i++)
641 for (i = 0; i < imax; i++)
645 if (fabs(Current) > resolution)
648 Delta = 1.0 / (Current * factor);
653 Delta = 1.0 / resolution;
688 bool Continue =
true;
690 if (value == -std::numeric_limits< C_FLOAT64 >::infinity())
703 {
return *(*mpOptItems)[index];}
711 assert(pDataModel != NULL);
762 if (pTasks == NULL && pDataModel)
763 pTasks = pDataModel->getTaskList();
767 size_t i, imax = pTasks->
size();
769 for (i = 0; i < imax; i++)
770 if ((*pTasks)[i]->
getType() == subtaskType)
783 std::vector< CCopasiContainer * > ListOfContainer;
810 std::vector< COptItem * >::iterator it =
mpOptItems->begin();
811 std::vector< COptItem * >::iterator end =
mpOptItems->end();
813 for (; it != end; ++it)
815 (*it)->setStartValue((*it)->getRandomValue());
824 std::vector< COptItem * >::iterator it =
mpOptItems->begin();
825 std::vector< COptItem * >::iterator end =
mpOptItems->end();
827 for (; it != end; ++it)
829 (*it)->rememberStartValue();
860 std::ostream & os = *ostream;
867 os <<
" Objective Function Value:\t" <<
mSolutionValue << std::endl;
871 os <<
" Function Evaluations:\t" <<
mCounter << std::endl;
872 os <<
" CPU Time [s]:\t"
878 std::vector< COptItem * >::const_iterator itItem =
880 std::vector< COptItem * >::const_iterator endItem =
885 for (i = 0; itItem != endItem; ++itItem, i++)
887 os <<
" " << (*itItem)->getObjectDisplayName() <<
": "
894 os <<
"Problem Description:" << std::endl;
896 os <<
"Subtask: " << std::endl;
901 os <<
"No Subtask specified.";
907 os <<
"Objective Function:" << std::endl;
912 os <<
"List of Optimization Items:" << std::endl;
914 std::vector< COptItem * >::const_iterator itItem =
916 std::vector< COptItem * >::const_iterator endItem =
919 for (; itItem != endItem; ++itItem)
920 os <<
" " << **itItem << std::endl;
925 for (; itItem != endItem; ++itItem)
926 os <<
" " << **itItem << std::endl;
CCopasiDataModel * getObjectDataModel()
std::string * pEXPRESSION
virtual Refresh * getRefresh() const
CCopasiParameterGroup * mpGrpItems
CCopasiContainer * getObjectAncestor(const std::string &type) const
CCopasiVectorN< CFunction > & loadedFunctions()
CCopasiTask::Type getSubtaskType() const
CVector< C_FLOAT64 > mSolutionVariables
virtual bool setInfix(const std::string &infix)
void incrementEvaluations(unsigned C_INT32 increment)
bool swap(const size_t &iFrom, const size_t &iTo)
std::vector< Refresh * > mInitialRefreshMethods
bool swapOptItem(const size_t &iFrom, const size_t &iTo)
COptItem & getOptItem(const size_t &index)
unsigned C_INT32 mCounter
CCopasiProblem * getProblem()
virtual CCopasiObjectName getCN() const
void restoreModel(const bool &updateModel)
bool * mpParmCalculateStatistics
virtual size_t size() const
virtual bool initialize(const OutputFlag &of, COutputHandler *pOutputHandler, std::ostream *pOstream)
std::vector< COptItem * > * mpConstraintItems
std::vector< UpdateMethod * > mUpdateMethods
CVector< C_FLOAT64 > mGradient
unsigned C_INT32 mFailedCounter
const std::vector< COptItem * > & getConstraintList() const
virtual bool initialize()
size_t getOptItemSize() const
const CVector< C_FLOAT64 > & getVariableGradients() const
virtual bool setModel(CModel *pModel)
const std::vector< UpdateMethod * > & getCalculateVariableUpdateMethods() const
bool removeOptItem(const size_t &index)
bool setObjectCN(const CCopasiObjectName &objectCN)
void resize(size_t size, const bool ©=false)
const std::set< const CCopasiObject * > & getUptoDateObjects() const
const std::string & getDisplayString() const
const bool & getRandomizeStartValues() const
virtual bool calculateStatistics(const C_FLOAT64 &factor=1.0e-003, const C_FLOAT64 &resolution=1.0e-009)
virtual bool compile(std::vector< CCopasiContainer * > listOfContainer=CCopasiContainer::EmptyList)
virtual size_t getIndex(const std::string &name) const
std::ostream & operator<<(std::ostream &os, const COptProblem &o)
virtual bool progressItem(const size_t &handle)
unsigned C_INT32 mConstraintCounter
CRegisteredObjectName * pCN
const CCopasiTimeVariable & getElapsedTime() const
virtual void print(std::ostream *ostream) const
const bool & maximize() const
unsigned C_INT32 mFailedConstraintCounter
virtual bool restore(const bool &updateModel)
virtual bool setCallBack(CProcessReport *pCallBack)
bool removeParameter(const std::string &name)
C_FLOAT64 mCalculateValue
const C_FLOAT64 & getSolutionValue() const
static std::string LL2String(const C_INT64 &value, const C_INT32 &digits=0)
const CDescription & getDescription() const
std::vector< COptItem * > * mpOptItems
const C_FLOAT64 & getExecutionTime() const
std::vector< Refresh * > mRefreshConstraints
virtual const C_FLOAT64 & calcValue()
const std::vector< COptItem * > & getOptItemList() const
void initializeParameter()
std::ostream * getStream() const
size_t addItem(const std::string &name, const std::string &value, const std::string *pEndValue=NULL)
CCopasiParameterGroup * mpGrpConstraints
std::string * mpParmSubtaskCN
void rememberStartValues()
const Value & getValue() const
void randomizeStartValues()
const CVector< C_FLOAT64 > & getSolutionVariables() const
std::vector< Refresh * > mRefreshMethods
virtual bool setSolution(const C_FLOAT64 &value, const CVector< C_FLOAT64 > &variables)
CCopasiParameterGroup * assertGroup(const std::string &name)
std::string * mpParmObjectiveExpression
CCopasiParameter * getParameter(const std::string &name)
virtual void printResult(std::ostream *ostream) const
COptItem & addOptItem(const CCopasiObjectName &objectCN)
const C_FLOAT64 & getElapsedTimeSeconds() const
virtual bool initializeSubtaskBeforeOutput()
static CFunctionDB * getFunctionList()
virtual bool checkFunctionalConstraints()
virtual bool elevateChildren()
static const unsigned int ValidSubtasks[]
virtual const DataObjectSet & getDirectDependencies(const DataObjectSet &context=DataObjectSet()) const
virtual bool process(const bool &useInitialValues)
void setRandomizeStartValues(const bool &randomize)
C_INT64 getSeconds(const bool &bounded=false) const
bool * mpParmRandomizeStartValues
bool compileIfNecessary(CProcessReport *pProcessReport)
const std::string getObjectiveFunction()
virtual void print(std::ostream *ostream) const
static CCopasiMessage getLastMessage()
bool addParameter(const CCopasiParameter ¶meter)
static std::vector< Refresh * > buildUpdateSequence(const DataObjectSet &objects, const DataObjectSet &uptoDateObjects, const DataObjectSet &context=DataObjectSet())
CVector< C_FLOAT64 > mOriginalVariables
virtual bool checkParametricConstraints()
CCopasiParameter * assertParameter(const std::string &name, const CCopasiParameter::Type type, const CType &defaultValue)
const bool & getCalculateStatistics() const
bool setSubtaskType(const CCopasiTask::Type &subtaskType)
CCopasiObject * addVectorReference(const std::string &name, CType &reference, const unsigned C_INT32 &flag=0)
virtual bool setCallBack(CProcessReport *pCallBack)
void setMaximize(const bool &maximize)
const unsigned C_INT32 & getFunctionEvaluations() const
std::vector< Refresh * > buildInitialRefreshSequence(std::set< const CCopasiObject * > &changedObjects)
const C_FLOAT64 & getCalculateValue() const
COptProblem(const CCopasiTask::Type &type=CCopasiTask::optimization, const CCopasiContainer *pParent=NULL)
CProcessReport * mpCallBack
CExpression * mpObjectiveExpression
parameterGroup::iterator index_iterator
C_INT64 getMilliSeconds(const bool &bounded=false) const
CCopasiObject * ObjectFromName(const std::vector< CCopasiContainer * > &listOfContainer, const CCopasiObjectName &CN) const
CCopasiObject * addObjectReference(const std::string &name, CType &reference, const unsigned C_INT32 &flag=0)
const CCopasiTask::Type & getType() const
const std::string & getInfix() const
void setCalculateStatistics(const bool &calculate)
CCopasiContainer * getObjectParent() const
std::vector< CObjectInterface * > UpdateSequence
bool setObjectiveFunction(const std::string &infix)