112 bool Improved =
false;
118 std::vector< COptItem * >::const_iterator itOptItem =
mpOptItem->begin();
124 std::set< size_t >::const_iterator itInformant =
mInformants[index].begin();
125 std::set< size_t >::const_iterator endInformant =
mInformants[index].end();
129 for (; i && itInformant != endInformant; --i, ++itInformant)
130 if (
mBestValues[*itInformant] < BestInformantValue)
136 for (; pIndividual != pEnd;
137 ++pIndividual, ++pVelocity, ++pBestPosition, ++itOptItem, ++itSetCalculateVariable, ++pBestInformantPosition)
143 *pIndividual += *pVelocity;
163 (**itSetCalculateVariable)(*pIndividual);
200 std::vector< COptItem * >::const_iterator itOptItem =
mpOptItem->begin();
205 for (; pIndividual != pEnd;
206 ++pIndividual, ++pVelocity, ++pBestPosition, ++itOptItem, ++itSetCalculateVariable)
223 if (la < 1.8 || !(mn > 0.0))
237 la = log10(mx) + log10(-mn);
253 while ((*pIndividual < mn) || (*pIndividual > mx));
267 if (la < 1.8 || !(mn > 0.0))
283 *pIndividual = (mx + mn) * 0.5;
299 *pBestPosition = *pIndividual;
303 (**itSetCalculateVariable)(*pIndividual);
438 for (; pValue != pEnd; ++pValue)
441 if (*pValue == std::numeric_limits<C_FLOAT64>::infinity())
444 Delta = *pValue - Mean;
447 Variance += Delta * (*pValue - Mean);
469 for (; pIndividual != pIndividualEnd; ++pIndividual)
471 pFirstMoment = FirstMoments.
array();
472 pSecondMoment = SecondMoments.
array();
473 pValue = pIndividual->
array();
475 for (; pFirstMoment != pEnd; ++pFirstMoment, ++pSecondMoment, ++pValue)
477 *pFirstMoment += *pValue;
478 *pSecondMoment += *pValue * *pValue;
482 pFirstMoment = FirstMoments.
array();
483 pSecondMoment = SecondMoments.
array();
485 for (; pFirstMoment != pEnd; ++pFirstMoment, ++pSecondMoment)
487 Variance = (*pSecondMoment - *pFirstMoment * *pFirstMoment /
mSwarmSize) / (mSwarmSize - 1);
511 std::vector< COptItem * >::const_iterator itOptItem =
mpOptItem->begin();
516 for (; pIndividual != pEnd;
517 ++pIndividual, ++pVelocity, ++pBestPosition, ++itOptItem, ++itSetCalculateVariable)
535 *pBestPosition = *pIndividual;
540 (**itSetCalculateVariable)(*pIndividual);
virtual C_INT32 checkConstraint() const
unsigned C_INT32 mIteration
const C_FLOAT64 & evaluate()
C_FLOAT64 mEvaluationValue
virtual bool initialize()
bool move(const size_t &index)
virtual C_FLOAT64 getRandomNormal(const C_FLOAT64 &mean, const C_FLOAT64 &sd)
void resize(size_t size, const bool ©=false)
COptProblem * mpOptProblem
virtual void output(const COutputInterface::Activity &activity)
bool create(const size_t &index)
CMatrix< C_FLOAT64 > mBestPositions
virtual bool progressItem(const size_t &handle)
unsigned C_INT32 mIterationLimit
static CRandom * createGenerator(CRandom::Type type=CRandom::mt19937, unsigned C_INT32 seed=0)
virtual C_FLOAT64 getRandomCC()
CVector< C_FLOAT64 > mValues
size_t addItem(const std::string &name, const std::string &value, const std::string *pEndValue=NULL)
const std::vector< UpdateMethod * > * mpSetCalculateVariable
const Value & getValue() const
void shuffle(const size_t &swaps=C_INVALID_INDEX)
bool setValue(const std::string &name, const CType &value)
const C_FLOAT64 * getLowerBoundValue() const
virtual bool setSolution(const C_FLOAT64 &value, const CVector< C_FLOAT64 > &variables)
CPermutation * mpPermutation
virtual bool finishItem(const size_t &handle)
virtual void resize(size_t rows, size_t cols, const bool ©=false)
virtual bool checkFunctionalConstraints()
bool reachedStdDeviation()
const C_FLOAT64 & getStartValue() const
unsigned C_INT32 mSwarmSize
const std::vector< COptItem * > * mpOptItem
std::vector< std::set< size_t > > mInformants
COptMethodPS(const COptMethodPS &src, const CCopasiContainer *pParent=NULL)
CVector< CVector< C_FLOAT64 > > mIndividuals
const C_FLOAT64 * getUpperBoundValue() const
bool addParameter(const CCopasiParameter ¶meter)
CMatrix< C_FLOAT64 > mVelocities
const C_FLOAT64 & getCalculateValue() const
CCopasiObject * addObjectReference(const std::string &name, CType &reference, const unsigned C_INT32 &flag=0)
CProcessReport * mpCallBack
virtual bool initialize()
CVector< C_FLOAT64 > mBestValues