public static ISorterGenomeEval ToSorterGenomeEval(this SorterGenomeEvalToJson sorterGenomeEvalToJson)
 {
     return(SorterGenomeEval.Make(
                sorterGenome: sorterGenomeEvalToJson.SorterGenomeToJson.ToSorterGenome(),
                ancestors: sorterGenomeEvalToJson.ParentScores,
                sorterEval: sorterGenomeEvalToJson.SorterEvalToJson.ToSorterEval(),
                generation: sorterGenomeEvalToJson.Generation,
                success: true
                ));
 }
Beispiel #2
0
        public static ISorterGenomeEvalVm ToSorterGenomeEvalVm(this string reportString)
        {
            var           pcs = reportString.Split("\t".ToCharArray());
            ISorterEval   sorterEval;
            ISorterGenome sorterGenome;
            ISorter       sorter;
            var           switchableGuid = Guid.Empty;
            var           success        = false;
            var           useCount       = 0;
            var           generation     = 0;
            var           ancestors      = ImmutableStack <int> .Empty;

            if (pcs.Count() > 2)
            {
                sorterGenome = pcs[0].ToSorterGenome();
                sorter       = sorterGenome.ToSorter();
                bool.TryParse(pcs[1], out success);
                int.TryParse(pcs[2], out useCount);
            }
            else
            {
                return(new SorterGenomeEvalVmImpl(null));
            }

            if (pcs.Count() > 3)
            {
                ancestors = JsonConvert.DeserializeObject <ImmutableStack <int> >(pcs[3]);
            }
            else
            {
                sorterEval = SorterEval.Make
                             (
                    sorter: sorter,
                    switchableGroupGuid: switchableGuid,
                    success: success,
                    switchUseCount: useCount,
                    coveringSet: null
                             );

                return(new SorterGenomeEvalVmImpl
                       (
                           SorterGenomeEval.Make
                           (
                               sorterGenome: sorterGenome,
                               ancestors: ancestors,
                               sorterEval: sorterEval,
                               generation: generation,
                               success: true
                           )
                       ));
            }

            if (pcs.Count() > 4)
            {
                Guid.TryParse(pcs[4], out switchableGuid);
            }
            else
            {
                sorterEval = SorterEval.Make
                             (
                    sorter: sorter,
                    switchableGroupGuid: switchableGuid,
                    success: success,
                    switchUseCount: useCount,
                    coveringSet: null
                             );

                return(new SorterGenomeEvalVmImpl
                       (
                           SorterGenomeEval.Make
                           (
                               sorterGenome: sorterGenome,
                               ancestors: ancestors,
                               sorterEval: sorterEval,
                               generation: generation,
                               success: true
                           )
                       ));
            }

            var useList = JsonConvert.DeserializeObject <List <double> >(pcs[5]);

            sorterEval = SorterEval.Make
                         (
                sorter: sorter,
                switchableGroupGuid: switchableGuid,
                success: success,
                switchUseList: useList,
                coveringSet: null
                         );

            return(new SorterGenomeEvalVmImpl
                   (
                       SorterGenomeEval.Make
                       (
                           sorterGenome: sorterGenome,
                           ancestors: ancestors,
                           sorterEval: sorterEval,
                           generation: generation,
                           success: true
                       )
                   ));
        }
Beispiel #3
0
        private void UpdateSorterTuneResults(IIterationResult <IScpWorkflow> result)
        {
            if (
                (result.ProgressStatus == ProgressStatus.StepComplete)
                &&
                (result.Data.SorterLayerEval != null)
                )
            {
                var sorterEvalDict = result.Data.CompPool.SorterEvals.ToDictionary(e => e.Sorter.Guid);

                var nextEvals = new List <ISorterGenomeEval>();
                foreach (var genomeEval in result.Data.SorterLayerEval.GenomeEvals.Where(ev => ev.Success))
                {
                    if (_sorterGenomeEvals.ContainsKey(genomeEval.Guid))
                    {
                        nextEvals.Add(_sorterGenomeEvals[genomeEval.Guid]);
                    }
                    else
                    {
                        nextEvals.Add
                        (
                            SorterGenomeEval.Make
                            (
                                sorterGenome: genomeEval.Genome,
                                parentGenomeEval: _sorterGenomeEvals.ContainsKey(genomeEval.Genome.ParentGuid)
                                                           ?  _sorterGenomeEvals[genomeEval.Genome.ParentGuid] : null,
                                sorterEval: sorterEvalDict[genomeEval.Guid],
                                generation: ScpParamsVm.CurrentGeneration,
                                success: genomeEval.Success
                            )
                        );
                    }
                }

                ScpParamsVm.CurrentGeneration = result.Data.Generation;

                if (ScpParamsVm.CurrentGeneration % ReportFrequency == 0)
                {
                    SorterGenomeEvalGridVm.SorterGenomeEvalVms.Clear();

                    SorterGenomeEvalGridVm
                    .SorterGenomeEvalVms
                    .AddMany(
                        nextEvals.OrderBy(e => e.Score)
                        .ThenByDescending(e => e.Generation)
                        .Take(1000)
                        .Select(g => g.ToSorterGenomeEvalVm())
                        );
                }

                //var groips = result.Data.SorterLayerEval.GenomeEvals
                //                        .GroupBy(e => e.Score)
                //                        .OrderBy(g => g.Key)
                //                        .Select(g =>  string.Format("[{0}, {1}]", g.Key, g.Count()).PadLeft(12))
                //                        .Aggregate(string.Empty, (e, n) => e + n);

                var groips = JsonConvert.SerializeObject
                             (
                    result.Data.SorterLayerEval.GenomeEvals
                    .GroupBy(e => e.Score)
                    .OrderBy(g => g.Key)
                    .Select(g => new Tuple <int, int>((int)g.Key, g.Count()))
                    .ToList()
                             );

                _sorterGenomeEvals = nextEvals.ToDictionary(e => e.Guid);
                if (ScpParamsVm.CurrentGeneration % ReportFrequency == 0)
                {
                    _onIterationResult.OnNext(new Tuple <string, int, string>(ScpParamsVm.Name, ScpParamsVm.CurrentGeneration, groips));
                }
            }
        }