public static ISorterCompParaPoolWorkflowTracker Trim(this ISorterCompParaPoolWorkflowTracker tracker, int count)
 {
     return(new SorterCompParaPoolWorkflowTrackerImpl(
                sorterPoolStats: GenomePoolStats.Make(tracker.SorterPoolStats.GenomeStatses.OrderBy(t => ((ISorterEval)t.ReferenceResult).SwitchUseCount).Take(count)),
                switchablePoolStats: GenomePoolStats.Make(tracker.SwitchablePoolStats.GenomeStatses.OrderBy(t => t.ReferenceResult).Take(count))
                ));
 }
        public static ISorterCompParaPoolWorkflowBuilder UpdateAndTrack
        (
            ISorterCompParaPoolWorkflowBuilder builder,
            IReadOnlyList <int> seeds,
            bool mergeWithPrev,
            ISorterCompParaPoolWorkflowTracker tracker
        )
        {
            IEntity <ISorterCompParaPoolWorkflow> curWorkflowEntity = builder.Entity;

            foreach (var seed in seeds)
            {
                tracker.TrackItem(curWorkflowEntity.Value);
                curWorkflowEntity = Entity.Make
                                    (
                    guid: curWorkflowEntity.Guid.Add(seed),
                    val: curWorkflowEntity.Value.Step(seed)
                                    );
            }

            return(new SorterCompParaPoolWorkflowBuilderImpl(
                       guid: builder.Guid.Add(seeds),
                       inputEntities: InputEntityOptions(builder, mergeWithPrev),
                       entity: curWorkflowEntity,
                       seeds: mergeWithPrev ? builder.Seeds.Concat(seeds).ToList() : seeds.ToList()
                       ));
        }
Esempio n. 3
0
        public void TestUpdateWithMergeAndTrack2()
        {
            ISorterCompParaPoolWorkflowTracker tracker = SorterCompParaPoolWorkflowTracker.Make();

            var builder = SorterCompParaPoolWorkflowBuilder.Make
                          (
                workFlowGuid: Guid.NewGuid(),
                repository: TestRepository.EntityRepository,
                switchableGroupGuid: TestRepository.SwitchableGroupLayerGuid,
                sorterGroupGuid: TestRepository.SorterLayerGuid,
                scpParamsGuid: TestRepository.SorterCompParaPoolParamsGuid
                          );


            ISorterCompParaPoolWorkflowBuilder updatedBuilder = builder;

            for (var i = 0; i < 1000; i++)
            {
                var seeds = Rando.Fast(i * 17).ToIntEnumerator().Take(5).ToList();

                updatedBuilder = SorterCompParaPoolWorkflowBuilder.UpdateAndTrack(
                    builder: updatedBuilder,
                    seeds: seeds,
                    mergeWithPrev: true,
                    tracker: tracker
                    );

                var bsetResult =
                    tracker.SorterPoolStats
                    .GenomeStatses
                    .OrderBy(t => t.ReferenceResult.Cast <ISorterEval>().SwitchUseCount)
                    .First().ReferenceResult
                    .Cast <ISorterEval>();

                var averageScore = tracker.SorterPoolStats
                                   .GenomeStatses.Average(t => t.ReferenceResult.Cast <ISorterEval>().SwitchUseCount);

                System.Diagnostics.Debug.WriteLine("{0}\t{1}\t{2}\t{3}", bsetResult.SwitchUseCount, bsetResult.Success, averageScore, i);
                System.Diagnostics.Debug.WriteLine(tracker.PoolReport);

                tracker = tracker.Trim(1000);
            }


            Assert.AreEqual(updatedBuilder.InputEntities.Count, 3);
            Assert.IsNotNull(updatedBuilder.Entity);
            Assert.AreEqual(updatedBuilder.Seeds.Count(), 25);
        }