Free cookie consent management tool by TermsFeed Policy Generator

Ignore:
Timestamp:
03/21/14 14:59:41 (10 years ago)
Author:
mkommend
Message:

#2172: Merged r10639 and r10643 into stable.

Location:
stable
Files:
2 edited

Legend:

Unmodified
Added
Removed
  • stable

  • stable/HeuristicLab.Selection/3.3/OffspringSelector.cs

    r9456 r10644  
    5757    }
    5858
     59    public IValueLookupParameter<BoolValue> FillPopulationWithParentsParameter {
     60      get { return (IValueLookupParameter<BoolValue>)Parameters["FillPopulationWithParents"]; }
     61    }
     62
    5963    public IOperator OffspringCreator {
    6064      get { return OffspringCreatorParameter.Value; }
     
    6468    [StorableConstructor]
    6569    protected OffspringSelector(bool deserializing) : base(deserializing) { }
     70    [StorableHook(HookType.AfterDeserialization)]
     71    private void AfterDeserialization() {
     72      // BackwardsCompatibility3.3
     73      #region Backwards compatible code, remove with 3.4
     74      if (Parameters.ContainsKey("FillPopulationWithParents") && Parameters["FillPopulationWithParents"] is FixedValueParameter<BoolValue>)
     75        Parameters.Remove("FillPopulationWithParents");
     76      if (!Parameters.ContainsKey("FillPopulationWithParents"))
     77        Parameters.Add(new ValueLookupParameter<BoolValue>("FillPopulationWithParents", "True if the population should be filled with parent individuals instead of lucky losers."));
     78      #endregion
     79    }
     80
    6681    protected OffspringSelector(OffspringSelector original, Cloner cloner) : base(original, cloner) { }
    6782    public override IDeepCloneable Clone(Cloner cloner) {
     
    7893      Parameters.Add(new ScopeTreeLookupParameter<BoolValue>("SuccessfulOffspring", "True if the offspring was more successful than its parents.", 2));
    7994      Parameters.Add(new OperatorParameter("OffspringCreator", "The operator used to create new offspring."));
     95      Parameters.Add(new ValueLookupParameter<BoolValue>("FillPopulationWithParents", "True if the population should be filled with parent individual or false if worse children should be used when the maximum selection pressure is exceeded."));
    8096    }
    8197
     
    8399      double maxSelPress = MaximumSelectionPressureParameter.ActualValue.Value;
    84100      double successRatio = SuccessRatioParameter.ActualValue.Value;
     101      bool fillPopulationWithParents = FillPopulationWithParentsParameter.ActualValue.Value;
    85102      IScope scope = ExecutionContext.Scope;
    86103      IScope parents = scope.SubScopes[0];
     
    133150          successfulOffspringAdded++;
    134151        } else if (worseOffspringNeeded > 0 || tmpSelPress >= maxSelPress) {
    135           IScope currentOffspring = offspring.SubScopes[i];
    136           offspring.SubScopes.Remove(currentOffspring);
    137           i--;
     152          IScope currentOffspring;
     153          if (!fillPopulationWithParents || worseOffspringNeeded > 0) {
     154            currentOffspring = offspring.SubScopes[i];
     155            offspring.SubScopes.Remove(currentOffspring);
     156            i--;
     157            worseOffspringNeeded--;
     158          } else {
     159            currentOffspring = parents.SubScopes[i];
     160          }
    138161          population.Add(currentOffspring);
    139           worseOffspringNeeded--;
    140162        }
    141163        tmpSelPress += tmpSelPressInc;
Note: See TracChangeset for help on using the changeset viewer.