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

Location:
trunk/sources/HeuristicLab.Selection/3.3
Files:
1 added
2 edited
1 copied

Legend:

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

    r3407 r3413  
    2222using System;
    2323using System.Collections.Generic;
    24 using System.Text;
    2524using HeuristicLab.Core;
    2625using HeuristicLab.Data;
    2726using HeuristicLab.Selection;
     27using HeuristicLab.Persistence.Default.CompositeSerializers.Storable;
     28using HeuristicLab.Parameters;
    2829
    29 namespace HeuristicLab.Scheduling.JSSP {
    30   public class ConditionalSelector : SelectorBase {
    31     public override string Description {
    32       get { return @"TODO\r\nOperator description still missing ..."; }
     30namespace HeuristicLab.Selection {
     31  [Item("ConditionalSelector", "Selects sub-scopes where a certain boolean variable is true.")]
     32  [StorableClass]
     33  public class ConditionalSelector : Selector {
     34    public SubScopesLookupParameter<BoolValue> ConditionParameter {
     35      get { return (SubScopesLookupParameter<BoolValue>)Parameters["Condition"]; }
     36    }
     37    public ValueParameter<BoolValue> CopySelectedParameter {
     38      get { return (ValueParameter<BoolValue>)Parameters["CopySelected"]; }
     39    }
     40
     41    public BoolValue CopySelected {
     42      get { return CopySelectedParameter.Value; }
     43      set { CopySelectedParameter.Value = value; }
    3344    }
    3445
    3546    public ConditionalSelector()
    3647      : base() {
    37       AddVariableInfo(new VariableInfo("Condition", "Input condition", typeof(BoolData), VariableKind.In));
     48      Parameters.Add(new SubScopesLookupParameter<BoolValue>("Condition", "The boolean variable based on which the scopes are selected into a true scope-branch and a false scope-branch."));
     49      Parameters.Add(new ValueParameter<BoolValue>("CopySelected", "The parameter that decides whether the selected scopes should be copied or moved.", new BoolValue(true)));
    3850    }
    3951
    40     private int GetFirstSelectedScopeIndex(IScope source) {
    41       for (int i = 0; i < source.SubScopes.Count; i++) {
    42         bool condition = GetVariableValue<BoolData>("Condition", source.SubScopes[i], true).Data;
    43         if (condition) {
    44           return i;
    45         }
    46       }
    47       return -1;
    48     }
    49 
    50     protected override void Select(IScope source, IScope target, bool copySelected) {
    51       if (copySelected) {
    52         for (int i = 0; i < source.SubScopes.Count; i++) {
    53           IScope selectedScope = source.SubScopes[i];
    54           bool condition = GetVariableValue<BoolData>("Condition", source.SubScopes[i], true).Data;
    55           if (condition) {
    56             target.AddSubScope((IScope)selectedScope.Clone());
     52    protected override IScope[] Select(List<IScope> scopes) {
     53      ItemArray<BoolValue> conditions = ConditionParameter.ActualValue;
     54      List<IScope> selected = new List<IScope>();
     55      if (CopySelected.Value) {
     56        for (int i = 0; i < scopes.Count; i++) {
     57          if (conditions[i].Value) {
     58            selected.Add((IScope)scopes[i].Clone());
    5759          }
    5860        }
    5961      } else {
    60         int removeAt = GetFirstSelectedScopeIndex(source);
    61         while (removeAt != -1) {
    62           IScope selectedScope = source.SubScopes[removeAt];
    63           target.AddSubScope(selectedScope);
    64           source.RemoveSubScope(selectedScope);
    65           removeAt = GetFirstSelectedScopeIndex(source);
     62        for (int i = 0; i < scopes.Count; i++) {
     63          if (conditions[i + selected.Count].Value) {
     64            selected.Add(scopes[i]);
     65            scopes.RemoveAt(i);
     66            i--;
     67          }
    6668        }
    6769      }
     70      return selected.ToArray();
    6871    }
    6972  }
  • 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
  • trunk/sources/HeuristicLab.Selection/3.3/HeuristicLab.Selection-3.3.csproj

    r3404 r3413  
    8383    <None Include="HeuristicLabSelectionPlugin.cs.frame" />
    8484    <Compile Include="BestSelector.cs" />
     85    <Compile Include="ConditionalSelector.cs" />
    8586    <Compile Include="GenderSpecificSelector.cs" />
     87    <Compile Include="OffspringSelector.cs" />
    8688    <Compile Include="RightChildReducer.cs" />
    8789    <Compile Include="SingleObjectiveSelector.cs" />
Note: See TracChangeset for help on using the changeset viewer.