- Timestamp:
- 04/19/10 17:33:12 (14 years ago)
- File:
-
- 1 edited
Legend:
- Unmodified
- Added
- Removed
-
trunk/sources/HeuristicLab.Selection/3.3/GenderSpecificSelector.cs
r3404 r3413 36 36 [StorableClass] 37 37 public class GenderSpecificSelector : AlgorithmOperator, ISingleObjectiveSelector, IStochasticOperator { 38 private List<ISelector> femaleSelectors;39 private List<ISelector> maleSelectors;40 41 38 #region Parameters 42 39 public IValueLookupParameter<BoolValue> MaximizationParameter { … … 55 52 get { return (ILookupParameter<IRandom>)Parameters["Random"]; } 56 53 } 57 public ConstrainedValueParameter<ISelector> FemaleSelectorParameter {58 get { return ( ConstrainedValueParameter<ISelector>)Parameters["FemaleSelector"]; }54 public ValueParameter<ISelector> FemaleSelectorParameter { 55 get { return (ValueParameter<ISelector>)Parameters["FemaleSelector"]; } 59 56 } 60 public ConstrainedValueParameter<ISelector> MaleSelectorParameter {61 get { return ( ConstrainedValueParameter<ISelector>)Parameters["MaleSelector"]; }57 public ValueParameter<ISelector> MaleSelectorParameter { 58 get { return (ValueParameter<ISelector>)Parameters["MaleSelector"]; } 62 59 } 63 60 #endregion … … 96 93 Parameters.Add(new ValueLookupParameter<BoolValue>("CopySelected", "True if the scopes should be copied, false if they should be moved.", new BoolValue(true))); 97 94 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.")); 100 97 #endregion 101 98 … … 140 137 } 141 138 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 142 147 #region Helpers 143 148 [StorableHook(HookType.AfterDeserialization)] 144 149 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(); 147 154 } 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; 158 163 } 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;190 164 } 191 165 #endregion
Note: See TracChangeset
for help on using the changeset viewer.