/** Mutation (exploitation) of some sort */ void CBasicEA::mutate(CNeuralNet & genotypeA) { //TODO:: roll your own for (SNeuronLayer sl : genotypeA.vecLayers) { for (int i = 0; i < sl.numNeurons; i++) { std::transform ( sl.vecNeurons[i].vecWeights.begin () , sl.vecNeurons[i].vecWeights.end(), sl.vecNeurons[i].vecWeights.begin(), [](double weight)->double { return (RandBool()) ? -1 + 2 * (RandInt(0, 100000) / 100000) : weight; }); } } }
//---------------------------- AddFuzzyDeviationToAim ------------------------- // // adds a deviation to the firing angle using fuzzy logic //-------------------------------------- --------------------------------------- void Raven_WeaponSystem::AddFuzzyDeviationToAim(Vector2D& AimingPos) { double distToTarget = Vec2DDistance(m_pOwner->Pos(), m_pOwner->GetTargetSys()->GetTarget()->Pos()); double targetVelocity = m_pOwner->Speed(); double targetVisiblePeriod = m_pOwner->GetTargetSys()->GetTimeTargetHasBeenVisible(); /* Fuzzification */ m_FuzzyModule.Fuzzify("DistToTarget", distToTarget); m_FuzzyModule.Fuzzify("TargetVelocity", targetVelocity); m_FuzzyModule.Fuzzify("TargetVisiblePeriod", targetVisiblePeriod); double derivation = m_FuzzyModule.DeFuzzify("Deviation", FuzzyModule::max_av); bool isDerivationPosition = RandBool(); /* Deviation computing */ Vector2D toPos = AimingPos - m_pOwner->Pos(); if (isDerivationPosition) Vec2DRotateAroundOrigin(toPos, derivation*m_dAimAccuracy); else Vec2DRotateAroundOrigin(toPos, -1 * derivation*m_dAimAccuracy); AimingPos = toPos + m_pOwner->Pos(); }