Changeset 12276


Ignore:
Timestamp:
04/01/15 15:44:13 (4 years ago)
Author:
mkommend
Message:

#2321: Merged r12123, r12124 and r12144 into stable.

Location:
stable
Files:
5 edited

Legend:

Unmodified
Added
Removed
  • stable

  • stable/HeuristicLab.Algorithms.NSGA2/3.3/NSGA2.cs

    r12009 r12276  
    8888      get { return (ValueParameter<IntValue>)Parameters["SelectedParents"]; }
    8989    }
     90
     91    private IFixedValueParameter<BoolValue> DominateOnEqualQualitiesParameter {
     92      get { return (IFixedValueParameter<BoolValue>)Parameters["DominateOnEqualQualities"]; }
     93    }
    9094    #endregion
    9195
     
    135139      set { SelectedParentsParameter.Value = value; }
    136140    }
     141    public bool DominateOnEqualQualities {
     142      get { return DominateOnEqualQualitiesParameter.Value.Value; }
     143      set { DominateOnEqualQualitiesParameter.Value.Value = value; }
     144    }
     145
    137146    private RandomCreator RandomCreator {
    138147      get { return (RandomCreator)OperatorGraph.InitialOperator; }
     
    171180      Parameters.Add(new ValueParameter<IntValue>("MaximumGenerations", "The maximum number of generations which should be processed.", new IntValue(1000)));
    172181      Parameters.Add(new ValueParameter<IntValue>("SelectedParents", "Each two parents form a new child, typically this value should be twice the population size, but because the NSGA-II is maximally elitist it can be any multiple of 2 greater than 0.", new IntValue(200)));
     182      Parameters.Add(new FixedValueParameter<BoolValue>("DominateOnEqualQualities", "Flag which determines wether solutions with equal quality values should be treated as dominated.", new BoolValue(false)));
    173183
    174184      RandomCreator randomCreator = new RandomCreator();
     
    195205      subScopesCounter.Successor = rankAndCrowdingSorter;
    196206
     207      rankAndCrowdingSorter.DominateOnEqualQualitiesParameter.ActualName = DominateOnEqualQualitiesParameter.Name;
    197208      rankAndCrowdingSorter.CrowdingDistanceParameter.ActualName = "CrowdingDistance";
    198209      rankAndCrowdingSorter.RankParameter.ActualName = "Rank";
     
    311322    [StorableHook(HookType.AfterDeserialization)]
    312323    private void AfterDeserialization() {
     324      // BackwardsCompatibility3.3
     325      #region Backwards compatible code, remove with 3.4
     326      if (!Parameters.ContainsKey("DominateOnEqualQualities"))
     327        Parameters.Add(new FixedValueParameter<BoolValue>("DominateOnEqualQualities", "Flag which determines wether solutions with equal quality values should be treated as dominated.", new BoolValue(false)));
     328      #endregion
     329
    313330      PopulationSizeParameter.ValueChanged += new EventHandler(PopulationSizeParameter_ValueChanged);
    314331      PopulationSize.ValueChanged += new EventHandler(PopulationSize_ValueChanged);
  • stable/HeuristicLab.Algorithms.NSGA2/3.3/NSGA2MainLoop.cs

    r12009 r12276  
    7979      get { return (LookupParameter<IntValue>)Parameters["EvaluatedSolutions"]; }
    8080    }
     81    public IValueLookupParameter<BoolValue> DominateOnEqualQualitiesParameter {
     82      get { return (ValueLookupParameter<BoolValue>)Parameters["DominateOnEqualQualities"]; }
     83    }
    8184    #endregion
    8285
    8386    [StorableConstructor]
    8487    protected NSGA2MainLoop(bool deserializing) : base(deserializing) { }
     88    [StorableHook(HookType.AfterDeserialization)]
     89    private void AfterDeserialization() {
     90      // BackwardsCompatibility3.3
     91      #region Backwards compatible code, remove with 3.4
     92      if (!Parameters.ContainsKey("DominateOnEqualQualities"))
     93        Parameters.Add(new ValueLookupParameter<BoolValue>("DominateOnEqualQualities", "Flag which determines wether solutions with equal quality values should be treated as dominated."));
     94      #endregion
     95    }
     96
    8597    protected NSGA2MainLoop(NSGA2MainLoop original, Cloner cloner) : base(original, cloner) { }
    8698    public NSGA2MainLoop()
     
    105117      Parameters.Add(new ValueLookupParameter<IOperator>("Analyzer", "The operator used to analyze each generation."));
    106118      Parameters.Add(new LookupParameter<IntValue>("EvaluatedSolutions", "The number of times solutions have been evaluated."));
     119      Parameters.Add(new ValueLookupParameter<BoolValue>("DominateOnEqualQualities", "Flag which determines wether solutions with equal quality values should be treated as dominated."));
    107120      #endregion
    108121
     
    171184      subScopesCounter.ValueParameter.ActualName = EvaluatedSolutionsParameter.Name;
    172185
     186      rankAndCrowdingSorter.DominateOnEqualQualitiesParameter.ActualName = DominateOnEqualQualitiesParameter.Name;
    173187      rankAndCrowdingSorter.CrowdingDistanceParameter.ActualName = "CrowdingDistance";
    174188      rankAndCrowdingSorter.RankParameter.ActualName = "Rank";
  • stable/HeuristicLab.Optimization.Operators/3.3/MultiObjective/FastNonDominatedSort.cs

    r12009 r12276  
    2222using System;
    2323using System.Collections.Generic;
     24using System.Linq;
    2425using HeuristicLab.Common;
    2526using HeuristicLab.Core;
     
    4041    private enum DominationResult { Dominates, IsDominated, IsNonDominated };
    4142
     43    #region Parameter properties
    4244    public IValueLookupParameter<BoolArray> MaximizationParameter {
    4345      get { return (IValueLookupParameter<BoolArray>)Parameters["Maximization"]; }
    4446    }
    45 
     47    public IValueLookupParameter<BoolValue> DominateOnEqualQualitiesParameter {
     48      get { return (ValueLookupParameter<BoolValue>)Parameters["DominateOnEqualQualities"]; }
     49    }
    4650    public IScopeTreeLookupParameter<DoubleArray> QualitiesParameter {
    4751      get { return (IScopeTreeLookupParameter<DoubleArray>)Parameters["Qualities"]; }
    4852    }
    49 
    5053    public IScopeTreeLookupParameter<IntValue> RankParameter {
    5154      get { return (IScopeTreeLookupParameter<IntValue>)Parameters["Rank"]; }
    5255    }
     56    #endregion
    5357
    5458    [StorableConstructor]
     
    5761    public FastNonDominatedSort() {
    5862      Parameters.Add(new ValueLookupParameter<BoolArray>("Maximization", "Whether each objective is maximization or minimization."));
     63      Parameters.Add(new ValueLookupParameter<BoolValue>("DominateOnEqualQualities", "Flag which determines wether solutions with equal quality values should be treated as dominated."));
    5964      Parameters.Add(new ScopeTreeLookupParameter<DoubleArray>("Qualities", "The qualities of a solution.", 1));
    6065      Parameters.Add(new ScopeTreeLookupParameter<IntValue>("Rank", "The rank of a solution.", 1));
     
    6267
    6368    public override IOperation Apply() {
     69      bool dominateOnEqualQualities = DominateOnEqualQualitiesParameter.ActualValue.Value;
    6470      BoolArray maximization = MaximizationParameter.ActualValue;
    6571      ItemArray<DoubleArray> qualities = QualitiesParameter.ActualValue;
     
    7985          dominatedScopes[p] = new List<int>();
    8086        for (int qI = pI + 1; qI < populationSize; qI++) {
    81           DominationResult test = Dominates(qualities[pI], qualities[qI], maximization);
     87          DominationResult test = Dominates(qualities[pI], qualities[qI], maximization, dominateOnEqualQualities);
    8288          if (test == DominationResult.Dominates) {
    8389            dominatedScopes[p].Add(qI);
     
    134140    }
    135141
    136     private DominationResult Dominates(DoubleArray left, DoubleArray right, BoolArray maximizations) {
     142    private static DominationResult Dominates(DoubleArray left, DoubleArray right, BoolArray maximizations, bool dominateOnEqualQualities) {
     143      if (dominateOnEqualQualities && left.SequenceEqual(right)) return DominationResult.Dominates;
     144
    137145      bool leftIsBetter = false, rightIsBetter = false;
    138146      for (int i = 0; i < left.Length; i++) {
     
    141149        if (leftIsBetter && rightIsBetter) break;
    142150      }
     151
    143152      if (leftIsBetter && !rightIsBetter) return DominationResult.Dominates;
    144153      if (!leftIsBetter && rightIsBetter) return DominationResult.IsDominated;
     
    146155    }
    147156
    148     private bool IsDominated(double left, double right, bool maximization) {
     157    private static bool IsDominated(double left, double right, bool maximization) {
    149158      return maximization && left < right
    150159        || !maximization && left > right;
    151160    }
    152161
    153     private void AddToFront(IScope p, List<ScopeList> fronts, int i) {
     162    private static void AddToFront(IScope p, List<ScopeList> fronts, int i) {
    154163      if (i == fronts.Count) fronts.Add(new ScopeList());
    155164      fronts[i].Add(p);
     
    159168      return new FastNonDominatedSort(this, cloner);
    160169    }
     170
     171    [StorableHook(HookType.AfterDeserialization)]
     172    private void AfterDeserialization() {
     173      // BackwardsCompatibility3.3
     174      #region Backwards compatible code, remove with 3.4
     175      if (!Parameters.ContainsKey("DominateOnEqualQualities"))
     176        Parameters.Add(new ValueLookupParameter<BoolValue>("DominateOnEqualQualities", "Flag which determines wether solutions with equal quality values should be treated as dominated."));
     177      #endregion
     178    }
    161179  }
    162180}
  • stable/HeuristicLab.Optimization.Operators/3.3/MultiObjective/RankAndCrowdingSorter.cs

    r12009 r12276  
    3030namespace HeuristicLab.Optimization.Operators {
    3131  public class RankAndCrowdingSorter : AlgorithmOperator, IMultiObjectiveOperator {
     32    #region Parameter properties
    3233    public ValueLookupParameter<BoolArray> MaximizationParameter {
    3334      get { return (ValueLookupParameter<BoolArray>)Parameters["Maximization"]; }
     
    4243      get { return (ScopeTreeLookupParameter<DoubleValue>)Parameters["CrowdingDistance"]; }
    4344    }
     45    public IValueLookupParameter<BoolValue> DominateOnEqualQualitiesParameter {
     46      get { return (ValueLookupParameter<BoolValue>)Parameters["DominateOnEqualQualities"]; }
     47    }
     48    #endregion
    4449
    4550    [StorableConstructor]
     
    4954      : base() {
    5055      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."));
     56      Parameters.Add(new ValueLookupParameter<BoolValue>("DominateOnEqualQualities", "Flag which determines wether solutions with equal quality values should be treated as dominated."));
    5157      Parameters.Add(new ScopeTreeLookupParameter<DoubleArray>("Qualities", "The vector of quality values."));
    5258      Parameters.Add(new ScopeTreeLookupParameter<IntValue>("Rank", "The rank of a solution (to which front it belongs)."));
     
    6066
    6167      fastNonDominatedSort.MaximizationParameter.ActualName = MaximizationParameter.Name;
     68      fastNonDominatedSort.DominateOnEqualQualitiesParameter.ActualName = DominateOnEqualQualitiesParameter.Name;
    6269      fastNonDominatedSort.QualitiesParameter.ActualName = QualitiesParameter.Name;
    6370      fastNonDominatedSort.RankParameter.ActualName = RankParameter.Name;
     
    8188      return new RankAndCrowdingSorter(this, cloner);
    8289    }
     90
     91    [StorableHook(HookType.AfterDeserialization)]
     92    private void AfterDeserialization() {
     93      // BackwardsCompatibility3.3
     94      #region Backwards compatible code, remove with 3.4
     95      if (!Parameters.ContainsKey("DominateOnEqualQualities"))
     96        Parameters.Add(new ValueLookupParameter<BoolValue>("DominateOnEqualQualities", "Flag which determines wether solutions with equal quality values should be treated as dominated."));
     97      #endregion
     98    }
    8399  }
    84100}
Note: See TracChangeset for help on using the changeset viewer.