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()
                       ));
        }
 public static IReadOnlyDictionary <string, IEntity> InputEntityOptions(ISorterCompParaPoolWorkflowBuilder builder,
                                                                        bool mergeWithPrev)
 {
     return(mergeWithPrev
         ? builder.InputEntities
         : builder.ToEntityDictionary());
 }
 public static ISorterCompParaPoolWorkflowBuilder Update
 (
     ISorterCompParaPoolWorkflowBuilder builder,
     IReadOnlyList <int> seeds,
     bool mergeWithPrev
 )
 {
     return(new SorterCompParaPoolWorkflowBuilderImpl(
                guid: builder.Guid.Add(seeds),
                inputEntities: InputEntityOptions(builder, mergeWithPrev),
                entity: seeds.Aggregate
                (
                    builder.Entity,
                    (current, seed) =>
     {
         var newWorkflow = Entity.Make(
             guid: builder.Guid.Add(seed),
             val: current.Value.Step(seed)
             );
         return newWorkflow;
     }
                ),
                seeds: mergeWithPrev?builder.Seeds.Concat(seeds).ToList() : seeds.ToList()
                ));
 }
        public static IReadOnlyDictionary <string, IEntity> ToEntityDictionary(this ISorterCompParaPoolWorkflowBuilder sorterCompParaPoolWorkflowBuilder)
        {
            var dict = new Dictionary <string, IEntity>();

            dict[SorterCompParaPoolWorkflowParts.AllParts.ToString()] = sorterCompParaPoolWorkflowBuilder.Entity;
            return(dict);
        }
示例#5
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);
        }