public Ages.EvaluatedIndividual Generation() { Ages.GoThroughGenerations(); Ages.EvaluatedIndividual champ = Ages.Champions.Last(); return(champ); }
private void Work() { Ages.EvaluatedIndividual champ = _series.GA.Generation(); CartesianIndividual champVals = (CartesianIndividual)champ.Individual; float mse = champ.Score.Value * 1000; double logmse = mse; _champs.Add(champ); var newPop = new ChartValues <ScatterPoint>(); foreach (var ei in _series.GA.Ages.Population) { CartesianIndividual cartesian = (CartesianIndividual)ei.Individual; if (ei == champ) { newPop.Add(new ScatterPoint(cartesian.Values[0], cartesian.Values[1], 1)); } else { newPop.Add(new ScatterPoint(cartesian.Values[0], cartesian.Values[1], 0.1)); } } bool isNewChamp = _champs.Count == 1 || CartesianIndividual.Distance((CartesianIndividual)_champs[_champs.Count - 2].Individual, champVals) > 0.001; ChartValues <ObservablePoint> actualValues = null; if (isNewChamp) { actualValues = new ChartValues <ObservablePoint>( _series.GA.ExpectedValsX.Zip( Helpers.EvaluatePolynomial(champVals, _series.GA.PowsOfXForAllX), (x, y) => new ObservablePoint(x, y))); } Dispatcher.Invoke(() => { _series.Score.Values.Add(logmse); var nicheDensity = _series.GA.Ages.NicheStrat as Strats.NicheDensityStrategy; _series.R.Values.Add((double)(nicheDensity?.NicheRadius ?? 0)); _series.Pop.Values = newPop; if (isNewChamp) { _series.Actual.Values = actualValues; _series.Champ.Values.Add(new ObservablePoint(champVals.Values[0], champVals.Values[1])); } for (int i = 0; i < champVals.Values.Length && i < _series.Champs.Length; ++i) { _series.Champs[i].Values.Add(champVals.Values[i]); } if (_series.GA.Ages.GenerationCount < _series.GA.GenerationStop) { _timer.Start(); } }); }