public RankAndCrowdingSorter()
            : base()
        {
            Parameters.Add(new ValueLookupParameter <BoolArray>("Maximization", "For each objective a value that is true if that objective should be maximized, or false if it should be minimized."));
            Parameters.Add(new ScopeTreeLookupParameter <DoubleArray>("Qualities", "The vector of quality values."));
            Parameters.Add(new ScopeTreeLookupParameter <IntValue>("Rank", "The rank of a solution (to which front it belongs)."));
            Parameters.Add(new ScopeTreeLookupParameter <DoubleValue>("CrowdingDistance", "The crowding distance of a solution in a population."));

            FastNonDominatedSort       fastNonDominatedSort       = new FastNonDominatedSort();
            UniformSubScopesProcessor  subScopesProcessor         = new UniformSubScopesProcessor();
            CrowdingDistanceAssignment crowdingDistanceAssignment = new CrowdingDistanceAssignment();
            CrowdedComparisonSorter    crowdedComparisonSorter    = new CrowdedComparisonSorter();
            MergingReducer             mergingReducer             = new MergingReducer();

            fastNonDominatedSort.MaximizationParameter.ActualName = MaximizationParameter.Name;
            fastNonDominatedSort.QualitiesParameter.ActualName    = QualitiesParameter.Name;
            fastNonDominatedSort.RankParameter.ActualName         = RankParameter.Name;

            crowdingDistanceAssignment.CrowdingDistanceParameter.ActualName = CrowdingDistanceParameter.Name;
            crowdingDistanceAssignment.QualitiesParameter.ActualName        = QualitiesParameter.Name;

            crowdedComparisonSorter.CrowdingDistanceParameter.ActualName = CrowdingDistanceParameter.Name;
            crowdedComparisonSorter.RankParameter.ActualName             = RankParameter.Name;

            OperatorGraph.InitialOperator        = fastNonDominatedSort;
            fastNonDominatedSort.Successor       = subScopesProcessor;
            subScopesProcessor.Operator          = crowdingDistanceAssignment;
            crowdingDistanceAssignment.Successor = crowdedComparisonSorter;
            crowdedComparisonSorter.Successor    = null;
            subScopesProcessor.Successor         = mergingReducer;
            mergingReducer.Successor             = null;
        }
 protected CrowdedComparisonSorter(CrowdedComparisonSorter original, Cloner cloner) : base(original, cloner)
 {
 }