42 mEvaluationValue(std::numeric_limits<
C_FLOAT64 >::
max()),
65 mEvaluationValue(std::numeric_limits<
C_FLOAT64 >::
max()),
116 bool Continue =
true;
121 std::vector< CVector < C_FLOAT64 > * >::iterator itSrc =
mIndividual.begin();
122 std::vector< CVector < C_FLOAT64 > * >::iterator endSrc = itSrc +
mPopulationSize;
123 std::vector< CVector < C_FLOAT64 > * >::iterator itTarget = endSrc;
125 std::vector< CVector < C_FLOAT64 > * >::iterator itSrcVariance =
mVariance.begin();
126 std::vector< CVector < C_FLOAT64 > * >::iterator itTargetVariance = itSrcVariance +
mPopulationSize;
128 C_FLOAT64 * pVariance, * pVarianceEnd, * pParentVariance;
131 for (i = 0; itSrc != endSrc && Continue; ++itSrc, ++itSrcVariance, ++i)
135 for (j = 1; j <
childrate; ++j, ++itTarget, ++itTargetVariance)
138 **itTarget = **itSrc;
139 **itTargetVariance = **itSrcVariance;
146 pVariance = (*itTargetVariance)->array();
148 pParentVariance =
mVariance[Parent]->array();
150 for (; pVariance != pVarianceEnd; ++pVariance, ++pParentVariance)
151 *pVariance = (*pVariance + *pParentVariance) * .5;
164 std::vector< CVector < C_FLOAT64 > * >::iterator end =
mIndividual.end();
167 C_FLOAT64 * pVariable, * pVariableEnd, * pVariance, * pMaxVariance;
171 bool Continue =
true;
176 for (i =
mPopulationSize; it != end && Continue; ++it, ++itVariance, ++i)
178 pVariable = (*it)->array();
180 pVariance = (*itVariance)->array();
185 for (j = 0; pVariable != pVariableEnd; ++pVariable, ++pVariance, ++pMaxVariance, ++j)
190 COptItem & OptItem = *(*mpOptItem)[j];
200 for (l = 0; l < 10; l++)
220 (*(*mpSetCalculateVariable)[j])(mut);
238 size_t sweepNum = TotalPopulation;
243 for (i = 0; i < sweepNum; i++)
249 for (j = 0; j < TotalPopulation - 1; j++)
251 if ((
mPhi[j] == 0 &&
mPhi[j + 1] == 0) ||
272 if (wasSwapped ==
false)
break;
302 bool Continue =
true;
304 std::vector< CVector < C_FLOAT64 > * >::iterator it =
306 std::vector< CVector < C_FLOAT64 > * >::iterator end =
308 std::vector< CVector < C_FLOAT64 > * >::iterator itVariance =
311 C_FLOAT64 * pVariable, * pVariableEnd, * pVariance, * pMaxVariance;
318 pVariable = (*it)->array();
320 pVariance = (*itVariance)->array();
323 for (j = 0; pVariable != pVariableEnd; ++pVariable, ++pVariance, ++pMaxVariance, ++j)
326 COptItem & OptItem = *(*mpOptItem)[j];
341 mut += mut * std::numeric_limits< C_FLOAT64 >::epsilon();
354 mut -= mut * std::numeric_limits< C_FLOAT64 >::epsilon();
362 (*(*mpSetCalculateVariable)[j])(mut);
377 for (i = first; it < end ; ++it, ++itVariance, ++i)
379 pVariable = (*it)->array();
381 pVariance = (*itVariance)->array();
384 for (j = 0; pVariable != pVariableEnd; ++pVariable, ++pVariance, ++pMaxVariance, ++j)
387 COptItem & OptItem = *(*mpOptItem)[j];
402 if (la < 1.8 || !(mn > 0.0))
409 la = log10(mx) + log10(-mn);
422 while ((mut < mn) || (mut > mx));
434 if (la < 1.8 || !(mn > 0.0))
443 mut = (mx + mn) * 0.5;
457 mut += mut * std::numeric_limits< C_FLOAT64 >::epsilon();
470 mut -= mut * std::numeric_limits< C_FLOAT64 >::epsilon();
478 (*(*mpSetCalculateVariable)[j])(mut);
521 if (
mPf < 0.0 || 1.0 <
mPf)
547 COptItem & OptItem = *(*mpOptItem)[i];
561 mValue = std::numeric_limits<C_FLOAT64>::infinity();
562 mBestValue = std::numeric_limits<C_FLOAT64>::infinity();
575 mTau = varphi / sqrt(2 * sqrt(
double(mVariableSize)));
576 mTauPrime = varphi / sqrt(2 *
double(mVariableSize));
607 std::vector< COptItem * >::const_iterator it =
mpOptItem->begin();
608 std::vector< COptItem * >::const_iterator end =
mpOptItem->end();
611 for (; it != end; ++it, pValue++)
613 switch ((*it)->checkConstraint())
616 phiCalc = *(*it)->getLowerBoundValue() - *pValue;
617 phiVal += phiCalc * phiCalc;
621 phiCalc = *pValue - *(*it)->getUpperBoundValue();
622 phiVal += phiCalc * phiCalc;
630 for (; it != end; ++it)
632 phiCalc = (*it)->getConstraintViolation();
635 phiVal += phiCalc * phiCalc;
643 bool Continue =
true;
649 size_t Stalled10, Stalled20, Stalled40, Stalled80;
650 Stalled10 = Stalled20 = Stalled40 = Stalled80 = 0;
691 mGeneration++, Stalled10++, Stalled20++, Stalled40++, Stalled80++)
697 Stalled10 = Stalled20 = Stalled40 = Stalled80 = 0;
699 else if (Stalled40 > 40)
702 Stalled10 = Stalled20 = Stalled40 = 0;
704 else if (Stalled20 > 20)
707 Stalled10 = Stalled20 = 0;
709 else if (Stalled10 > 10)
734 Stalled10 = Stalled20 = Stalled40 = Stalled80 = 0;
C_FLOAT64 phi(size_t indvNum)
virtual C_INT32 checkConstraint() const
CVector< C_FLOAT64 > mValue
virtual bool initialize()
unsigned C_INT32 mPopulationSize
std::vector< CVector< C_FLOAT64 > * > mVariance
bool checkLowerBound(const C_FLOAT64 &value) const
virtual C_FLOAT64 getRandomNormal(const C_FLOAT64 &mean, const C_FLOAT64 &sd)
virtual C_FLOAT64 getRandomOO()
C_FLOAT64 mEvaluationValue
unsigned C_INT32 mGenerations
void resize(size_t size, const bool ©=false)
COptProblem * mpOptProblem
const std::vector< COptItem * > * mpOptContraints
virtual void output(const COutputInterface::Activity &activity)
virtual ~COptMethodSRES()
virtual bool progressItem(const size_t &handle)
std::vector< CVector< C_FLOAT64 > * > mIndividual
bool checkUpperBound(const C_FLOAT64 &value) const
bool swap(size_t from, size_t to)
virtual C_FLOAT64 getRandomNormal01()
static CRandom * createGenerator(CRandom::Type type=CRandom::mt19937, unsigned C_INT32 seed=0)
virtual C_FLOAT64 getRandomCC()
virtual unsigned C_INT32 getRandomU()
size_t addItem(const std::string &name, const std::string &value, const std::string *pEndValue=NULL)
CVector< C_FLOAT64 > mMaxVariance
const Value & getValue() const
bool setValue(const std::string &name, const CType &value)
const C_FLOAT64 * getLowerBoundValue() const
unsigned C_INT32 mGeneration
virtual bool setSolution(const C_FLOAT64 &value, const CVector< C_FLOAT64 > &variables)
virtual bool finishItem(const size_t &handle)
const C_FLOAT64 & getStartValue() const
const std::vector< COptItem * > * mpOptItem
const C_FLOAT64 * getUpperBoundValue() const
CVector< C_FLOAT64 > mPhi
bool addParameter(const CCopasiParameter ¶meter)
virtual bool initialize()
bool creation(size_t first)
const C_FLOAT64 & getCalculateValue() const
bool evaluate(const CVector< C_FLOAT64 > &individual)
CCopasiObject * addObjectReference(const std::string &name, CType &reference, const unsigned C_INT32 &flag=0)
COptMethodSRES(const COptMethodSRES &src, const CCopasiContainer *pParent=NULL)
CProcessReport * mpCallBack