Free cookie consent management tool by TermsFeed Policy Generator

Ignore:
Timestamp:
04/19/10 17:33:12 (14 years ago)
Author:
abeham
Message:

Updated Gender Specific Selection, Offspring Selector and other changes related to the OSGA #976
Removed old OS plugin, removed SelectedSubScopesLookupParameter

File:
1 edited

Legend:

Unmodified
Added
Removed
  • trunk/sources/HeuristicLab.Selection/3.3/GenderSpecificSelector.cs

    r3404 r3413  
    3636  [StorableClass]
    3737  public class GenderSpecificSelector : AlgorithmOperator, ISingleObjectiveSelector, IStochasticOperator {
    38     private List<ISelector> femaleSelectors;
    39     private List<ISelector> maleSelectors;
    40 
    4138    #region Parameters
    4239    public IValueLookupParameter<BoolValue> MaximizationParameter {
     
    5552      get { return (ILookupParameter<IRandom>)Parameters["Random"]; }
    5653    }
    57     public ConstrainedValueParameter<ISelector> FemaleSelectorParameter {
    58       get { return (ConstrainedValueParameter<ISelector>)Parameters["FemaleSelector"]; }
     54    public ValueParameter<ISelector> FemaleSelectorParameter {
     55      get { return (ValueParameter<ISelector>)Parameters["FemaleSelector"]; }
    5956    }
    60     public ConstrainedValueParameter<ISelector> MaleSelectorParameter {
    61       get { return (ConstrainedValueParameter<ISelector>)Parameters["MaleSelector"]; }
     57    public ValueParameter<ISelector> MaleSelectorParameter {
     58      get { return (ValueParameter<ISelector>)Parameters["MaleSelector"]; }
    6259    }
    6360    #endregion
     
    9693      Parameters.Add(new ValueLookupParameter<BoolValue>("CopySelected", "True if the scopes should be copied, false if they should be moved.", new BoolValue(true)));
    9794      Parameters.Add(new LookupParameter<IRandom>("Random", "The random number generator to use."));
    98       Parameters.Add(new ConstrainedValueParameter<ISelector>("FemaleSelector", "The selection operator to select the first parent."));
    99       Parameters.Add(new ConstrainedValueParameter<ISelector>("MaleSelector", "The selection operator to select the second parent."));
     95      Parameters.Add(new ValueParameter<ISelector>("FemaleSelector", "The selection operator to select the first parent."));
     96      Parameters.Add(new ValueParameter<ISelector>("MaleSelector", "The selection operator to select the second parent."));
    10097      #endregion
    10198
     
    140137    }
    141138
     139    #region Events
     140    private void SelectorParameter_ValueChanged(object sender, EventArgs e) {
     141      IValueParameter<ISelector> selectorParam = (sender as IValueParameter<ISelector>);
     142      if (selectorParam != null)
     143        ParameterizeSelector(selectorParam.Value);
     144    }
     145    #endregion
     146
    142147    #region Helpers
    143148    [StorableHook(HookType.AfterDeserialization)]
    144149    private void Initialize() {
    145       InitializeSelectors();
    146       UpdateSelectors();
     150      FemaleSelectorParameter.ValueChanged += new EventHandler(SelectorParameter_ValueChanged);
     151      MaleSelectorParameter.ValueChanged += new EventHandler(SelectorParameter_ValueChanged);
     152      if (FemaleSelector == null) FemaleSelector = new ProportionalSelector();
     153      if (MaleSelector == null) MaleSelector = new RandomSelector();
    147154    }
    148 
    149     private void InitializeSelectors() {
    150       femaleSelectors = new List<ISelector>();
    151       maleSelectors = new List<ISelector>();
    152       IEnumerable<Type> types = ApplicationManager.Manager.GetTypes(typeof(ISelector)).OrderBy(x => x.FullName);
    153       foreach (Type type in types) {
    154         if (type != typeof(IMultiObjectiveSelector) && type != typeof(GenderSpecificSelector)) {
    155           femaleSelectors.Add((ISelector)Activator.CreateInstance(type));
    156           maleSelectors.Add((ISelector)Activator.CreateInstance(type));
    157         }
     155    private void ParameterizeSelector(ISelector selector) {
     156      selector.CopySelected = new BoolValue(true);
     157      IStochasticOperator stoOp = (selector as IStochasticOperator);
     158      if (stoOp != null) stoOp.RandomParameter.ActualName = RandomParameter.Name;
     159      ISingleObjectiveSelector soSelector = (selector as ISingleObjectiveSelector);
     160      if (soSelector != null) {
     161        soSelector.MaximizationParameter.ActualName = MaximizationParameter.Name;
     162        soSelector.QualityParameter.ActualName = QualityParameter.Name;
    158163      }
    159       ParameterizeSelectors(femaleSelectors);
    160       ParameterizeSelectors(maleSelectors);
    161     }
    162     private void ParameterizeSelectors(List<ISelector> selectors) {
    163       foreach (ISelector selector in selectors) {
    164         selector.CopySelected = new BoolValue(true);
    165       }
    166       foreach (IStochasticOperator op in selectors.OfType<IStochasticOperator>()) {
    167         op.RandomParameter.ActualName = RandomParameter.Name;
    168       }
    169       foreach (ISingleObjectiveSelector selector in selectors.OfType<ISingleObjectiveSelector>()) {
    170         selector.MaximizationParameter.ActualName = MaximizationParameter.Name;
    171         selector.QualityParameter.ActualName = QualityParameter.Name;
    172       }
    173     }
    174     private void UpdateSelectors() {
    175       ISelector oldFemaleSelector = FemaleSelector;
    176       FemaleSelectorParameter.ValidValues.Clear();
    177       foreach (ISelector selector in femaleSelectors)
    178         FemaleSelectorParameter.ValidValues.Add(selector);
    179       if (oldFemaleSelector == null) oldFemaleSelector = new ProportionalSelector();
    180       ISelector femaleSelector = FemaleSelectorParameter.ValidValues.FirstOrDefault(x => x.GetType() == oldFemaleSelector.GetType());
    181       if (femaleSelector != null) FemaleSelectorParameter.Value = femaleSelector;
    182 
    183       ISelector oldMaleSelector = MaleSelector;
    184       MaleSelectorParameter.ValidValues.Clear();
    185       foreach (ISelector selector in maleSelectors)
    186         MaleSelectorParameter.ValidValues.Add(selector);
    187       if (oldMaleSelector == null) oldMaleSelector = new RandomSelector();
    188       ISelector maleSelector = MaleSelectorParameter.ValidValues.FirstOrDefault(x => x.GetType() == oldMaleSelector.GetType());
    189       if (maleSelector != null) MaleSelectorParameter.Value = maleSelector;
    190164    }
    191165    #endregion
Note: See TracChangeset for help on using the changeset viewer.