Changeset 3413 for trunk/sources/HeuristicLab.Selection
- Timestamp:
- 04/19/10 17:33:12 (14 years ago)
- 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 22 22 using System; 23 23 using System.Collections.Generic; 24 using System.Text;25 24 using HeuristicLab.Core; 26 25 using HeuristicLab.Data; 27 26 using HeuristicLab.Selection; 27 using HeuristicLab.Persistence.Default.CompositeSerializers.Storable; 28 using HeuristicLab.Parameters; 28 29 29 namespace HeuristicLab.Scheduling.JSSP { 30 public class ConditionalSelector : SelectorBase { 31 public override string Description { 32 get { return @"TODO\r\nOperator description still missing ..."; } 30 namespace 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; } 33 44 } 34 45 35 46 public ConditionalSelector() 36 47 : 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))); 38 50 } 39 51 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()); 57 59 } 58 60 } 59 61 } 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 } 66 68 } 67 69 } 70 return selected.ToArray(); 68 71 } 69 72 } -
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 -
trunk/sources/HeuristicLab.Selection/3.3/HeuristicLab.Selection-3.3.csproj
r3404 r3413 83 83 <None Include="HeuristicLabSelectionPlugin.cs.frame" /> 84 84 <Compile Include="BestSelector.cs" /> 85 <Compile Include="ConditionalSelector.cs" /> 85 86 <Compile Include="GenderSpecificSelector.cs" /> 87 <Compile Include="OffspringSelector.cs" /> 86 88 <Compile Include="RightChildReducer.cs" /> 87 89 <Compile Include="SingleObjectiveSelector.cs" />
Note: See TracChangeset
for help on using the changeset viewer.