public static ISorterCompParaPoolWorkflow Make(
            int seed,
            SwitchableGroupGenomeType switchableGroupGenomeType,
            int keyCount,
            int keyPairCount,
            int switchableGroupSize,
            SorterCompParaPoolParams sorterCompParaPoolParams
            )
        {
            var randy = Rando.Fast(seed);

            return(new SorterCompParaPoolWorkflowImpl
                   (
                       sorterLayer: SorterLayer.Create
                       (
                           seed: randy.NextInt(),
                           genomeCount: sorterCompParaPoolParams.PopulationSize,
                           keyCount: keyCount,
                           keyPairCount: keyPairCount
                       ),
                       switchableGroupLayer: SwitchableLayer.Create
                       (
                           seed: randy.NextInt(),
                           switchableGroupGenomeType: switchableGroupGenomeType,
                           genomeCount: sorterCompParaPoolParams.SwitchableLayerStartingGenomeCount,
                           keyCount: keyCount,
                           groupSize: switchableGroupSize
                       ),
                       sorterCompParaPoolParams: sorterCompParaPoolParams,
                       generation: 0
                   ));
        }
 public static ISorterCompParaPoolWorkflow Make(
     ILayer <ISorterGenome> sorterLayer,
     ILayer <ISwitchableGroupGenome> switchableGroupLayer,
     SorterCompParaPoolParams sorterCompParaPoolParams,
     int generation
     )
 {
     return(new SorterCompParaPoolWorkflowImpl
            (
                sorterLayer: sorterLayer,
                switchableGroupLayer: switchableGroupLayer,
                sorterCompParaPoolParams: sorterCompParaPoolParams,
                generation: generation
            ));
 }
 public SorterCompParaPoolWorkflowImpl
 (
     ILayer <ISorterGenome> sorterLayer,
     ILayer <ISwitchableGroupGenome> switchableGroupLayer,
     SorterCompParaPoolParams sorterCompParaPoolParams,
     int generation
 )
 {
     _compWorkflowState        = CompWorkflowState.ReproGenomes;
     _sorterLayer              = sorterLayer;
     _switchableGroupLayer     = switchableGroupLayer;
     _compParaPool             = null;
     _sorterCompParaPoolParams = sorterCompParaPoolParams;
     _generation               = generation;
     _sorterLayerEval          = null;
     _switchableGroupLayerEval = null;
 }
 private SorterCompParaPoolWorkflowImpl
 (
     CompWorkflowState compWorkflowState,
     ILayer <ISorterGenome> sorterLayer,
     ILayer <ISwitchableGroupGenome> switchableGroupLayer,
     ICompParaPool compParaPool,
     ILayerEval <ISorterGenome, IGenomeEval <ISorterGenome> > sorterLayerEval,
     ILayerEval <ISwitchableGroupGenome, IGenomeEval <ISwitchableGroupGenome> > switchableGroupLayerEval,
     SorterCompParaPoolParams sorterCompParaPoolParams,
     int generation
 )
 {
     _compWorkflowState        = compWorkflowState;
     _sorterLayer              = sorterLayer;
     _switchableGroupLayer     = switchableGroupLayer;
     _sorterLayerEval          = sorterLayerEval;
     _switchableGroupLayerEval = switchableGroupLayerEval;
     _sorterCompParaPoolParams = sorterCompParaPoolParams;
     _generation   = generation;
     _compParaPool = compParaPool;
 }