public void UpdateEvolutionPaths(Matrix <double> eigenvectors, Matrix <double> invertedSqrtEigenvalues, AdaptationParameters adaptationParameters, SelectionParameters selectionParameters, long FFE, Vector <double> means, Vector <double> previousMeans) { int problemSize = PSigma.Count; Matrix <double> invertedSqrtCovarianceMatrix = eigenvectors * invertedSqrtEigenvalues * eigenvectors.Transpose(); Vector <double> meanDifferenceDivBySigma = (means - previousMeans) / Sigma; PSigma *= 1 - adaptationParameters.CSigma; PSigma += invertedSqrtCovarianceMatrix * PathUpdateCoefficient(adaptationParameters.CSigma, selectionParameters.MuEff, meanDifferenceDivBySigma); HSigma = Convert.ToInt32(PSigma.DotProduct(PSigma) / (1.0 - Math.Pow(1.0 - adaptationParameters.CSigma, 2.0 * FFE / selectionParameters.Lambda)) / problemSize < 2.0 + 4.0 / (problemSize + 1.0)); PC *= 1.0 - adaptationParameters.CC; PC += HSigma * PathUpdateCoefficient(adaptationParameters.CC, selectionParameters.MuEff, meanDifferenceDivBySigma); }
public void AdaptStepSize(AdaptationParameters adaptationParameters) { Sigma *= Math.Exp(adaptationParameters.CSigma / adaptationParameters.Damping * (PSigma.L2Norm() / adaptationParameters.ChiN - 1.0)); }