Example #1
0
 public Ages.EvaluatedIndividual Generation()
 {
     Ages.GoThroughGenerations();
     Ages.EvaluatedIndividual champ = Ages.Champions.Last();
     return(champ);
 }
Example #2
0
        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();
                }
            });
        }