- Timestamp:
- 04/10/13 15:15:13 (11 years ago)
- Location:
- branches/LearningClassifierSystems/HeuristicLab.Optimization.Operators.LCS/3.3
- Files:
-
- 3 added
- 11 edited
Legend:
- Unmodified
- Added
- Removed
-
branches/LearningClassifierSystems/HeuristicLab.Optimization.Operators.LCS/3.3
-
Property
svn:ignore
set to
obj
Plugin.cs
-
Property
svn:ignore
set to
-
branches/LearningClassifierSystems/HeuristicLab.Optimization.Operators.LCS/3.3/DefaultRule/AutoDefaultRule.cs
r9342 r9352 44 44 get { return (ILookupParameter<ItemArray<DoubleValue>>)Parameters["Quality"]; } 45 45 } 46 public ILookupParameter<ItemArray<IGAssistIndividual>> IndividualParameter {47 get { return (ILookupParameter<ItemArray<IGAssistIndividual>>)Parameters["Individual"]; }48 }49 46 public IValueLookupParameter<IntValue> AccuraciesCountParameter { 50 47 get { return (IValueLookupParameter<IntValue>)Parameters["AccuraciesCount"]; } … … 70 67 Parameters.Add(new ValueLookupParameter<ItemDictionary<IGAssistNiche, ItemList<DoubleValue>>>("AverageAccuracies")); 71 68 Parameters.Add(new ScopeTreeLookupParameter<DoubleValue>("Quality")); 72 Parameters.Add(new ScopeTreeLookupParameter<IGAssistIndividual>("Individual"));73 69 Parameters.Add(new LookupParameter<IRandom>("Random")); 74 Parameters.Add(new ValueLookupParameter<IntValue>("AccuraciesCount" ));70 Parameters.Add(new ValueLookupParameter<IntValue>("AccuraciesCount", new IntValue(15))); 75 71 Parameters.Add(new ValueLookupParameter<IGAssistNicheEqualityComparer>("NicheComparer")); 76 Parameters.Add(new ValueLookupParameter<DoubleValue>("NicheStandardDeviation" ));72 Parameters.Add(new ValueLookupParameter<DoubleValue>("NicheStandardDeviation", new DoubleValue(0.005))); 77 73 } 78 74 public override IDeepCloneable Clone(Cloner cloner) { … … 82 78 public override IOperation Apply() { 83 79 if (NichingParameter.ActualValue == null) { 80 IList<IGAssistNiche> niches = GAssistNichesProblemDataParameter.ActualValue.GetPossibleNiches().ToList(); 84 81 NichingParameter.ActualValue = new BoolValue(true); 85 NichesParameter.ActualValue = new IntValue( PossibleDefaultClassesParameter.ActualValue.Count);86 AverageAccuraciesParameter.ActualValue = new ItemDictionary<IGAssistNiche, ItemList<DoubleValue>>(NicheComparerParameter.ActualValue );87 foreach (var niche in PossibleDefaultClassesParameter.ActualValue) {82 NichesParameter.ActualValue = new IntValue(niches.Count); 83 AverageAccuraciesParameter.ActualValue = new ItemDictionary<IGAssistNiche, ItemList<DoubleValue>>(NicheComparerParameter.ActualValue as IEqualityComparer<IGAssistNiche>); 84 foreach (var niche in GAssistNichesProblemDataParameter.ActualValue.GetPossibleNiches()) { 88 85 AverageAccuracies.Add(niche, new ItemList<DoubleValue>(AccuraciesCount)); 89 86 } 87 88 int i = 0; 89 foreach (var individual in IndividualParameter.ActualValue) { 90 individual.SetNiche(RandomParameter.ActualValue, niches[i]); 91 i++; 92 i %= niches.Count; 93 } 94 95 OperationCollection next = new OperationCollection(); 96 next.Add(EvaluateSubScopes()); 97 next.Add(base.Apply()); 98 return next; 90 99 } else { 91 100 var nicheFitness = new Dictionary<IGAssistNiche, double>(NicheComparerParameter.ActualValue); 92 foreach (var niche in PossibleDefaultClassesParameter.ActualValue) {101 foreach (var niche in GAssistNichesProblemDataParameter.ActualValue.GetPossibleNiches()) { 93 102 nicheFitness[niche] = 0.0; 94 103 while (AverageAccuracies[niche].Count >= AccuraciesCount) { … … 105 114 } 106 115 107 foreach (var niche in PossibleDefaultClassesParameter.ActualValue) {116 foreach (var niche in GAssistNichesProblemDataParameter.ActualValue.GetPossibleNiches()) { 108 117 AverageAccuracies[niche].Insert(0, new DoubleValue(nicheFitness[niche])); 109 118 } 110 119 111 var averages = new List<double>( PossibleDefaultClassesParameter.ActualValue.Count);120 var averages = new List<double>(GAssistNichesProblemDataParameter.ActualValue.GetPossibleNiches().Count()); 112 121 if (AverageAccuracies.Values.First().Count >= AccuraciesCount) { 113 122 foreach (var averageAccuracy in AverageAccuracies.Values) { -
branches/LearningClassifierSystems/HeuristicLab.Optimization.Operators.LCS/3.3/DefaultRule/DefaultRuleOperator.cs
r9342 r9352 42 42 get { return (IValueLookupParameter<IGAssistNiche>)Parameters["DefaultClass"]; } 43 43 } 44 public ILookupParameter<ItemCollection<IGAssistNiche>> PossibleDefaultClassesParameter { 45 get { return (ILookupParameter<ItemCollection<IGAssistNiche>>)Parameters["PossibleDefaultClasses"]; } 44 public ILookupParameter<IGAssistNichesProblemData> GAssistNichesProblemDataParameter { 45 get { return (ILookupParameter<IGAssistNichesProblemData>)Parameters["GAssistNichesProblemData"]; } 46 } 47 public ILookupParameter<ItemArray<IGAssistIndividual>> IndividualParameter { 48 get { return (ILookupParameter<ItemArray<IGAssistIndividual>>)Parameters["Individual"]; } 49 } 50 public IValueLookupParameter<IOperator> EvaluatorParameter { 51 get { return (IValueLookupParameter<IOperator>)Parameters["Evaluator"]; } 46 52 } 47 53 #endregion … … 57 63 Parameters.Add(new ValueLookupParameter<IntValue>("Niches")); 58 64 Parameters.Add(new ValueLookupParameter<IGAssistNiche>("DefaultClass")); 59 Parameters.Add(new LookupParameter<ItemCollection<IGAssistNiche>>("PossibleDefaultClasses")); 65 Parameters.Add(new LookupParameter<IGAssistNichesProblemData>("GAssistNichesProblemData")); 66 Parameters.Add(new ScopeTreeLookupParameter<IGAssistIndividual>("Individual")); 67 Parameters.Add(new ValueLookupParameter<IOperator>("Evaluator")); 68 } 69 70 protected OperationCollection EvaluateSubScopes() { 71 IOperator evaluator = EvaluatorParameter.ActualValue; 72 OperationCollection evaluation = new OperationCollection(); 73 if (evaluator != null) { 74 foreach (var subScope in ExecutionContext.Scope.SubScopes) { 75 evaluation.Add(ExecutionContext.CreateOperation(evaluator, subScope)); 76 } 77 } 78 return evaluation; 60 79 } 61 80 } -
branches/LearningClassifierSystems/HeuristicLab.Optimization.Operators.LCS/3.3/DefaultRule/IDefaultRuleOperator.cs
r9342 r9352 26 26 public interface IDefaultRuleOperator : IOperator { 27 27 IValueLookupParameter<BoolValue> NichingParameter { get; } 28 ILookupParameter<IntValue> NichesParameter { get; } 29 IValueLookupParameter<Item> DefaultClassParameter { get; } 30 ILookupParameter<ItemCollection<IGAssistNiche>> PossibleDefaultClassesParameter { get; } 28 IValueLookupParameter<IntValue> NichesParameter { get; } 29 IValueLookupParameter<IGAssistNiche> DefaultClassParameter { get; } 30 ILookupParameter<IGAssistNichesProblemData> GAssistNichesProblemDataParameter { get; } 31 ILookupParameter<ItemArray<IGAssistIndividual>> IndividualParameter { get; } 32 IValueLookupParameter<IOperator> EvaluatorParameter { get; } 31 33 } 32 34 } -
branches/LearningClassifierSystems/HeuristicLab.Optimization.Operators.LCS/3.3/DefaultRule/MajorDefaultRule.cs
r9342 r9352 77 77 index = indices[0]; 78 78 } 79 DefaultClassParameter.ActualValue = PossibleDefaultClassesParameter.ActualValue.ElementAt(index); 79 IGAssistNiche niche = GAssistNichesProblemDataParameter.ActualValue.GetPossibleNiches().ElementAt(index); 80 DefaultClassParameter.ActualValue = niche; 81 82 foreach (var individual in IndividualParameter.ActualValue) { 83 individual.SetNiche(RandomParameter.ActualValue, niche); 84 } 85 86 OperationCollection next = new OperationCollection(); 87 next.Add(EvaluateSubScopes()); 88 next.Add(base.Apply()); 89 return next; 80 90 } 81 91 return base.Apply(); -
branches/LearningClassifierSystems/HeuristicLab.Optimization.Operators.LCS/3.3/DefaultRule/MinorDefaultRule.cs
r9342 r9352 77 77 index = indices[0]; 78 78 } 79 DefaultClassParameter.ActualValue = PossibleDefaultClassesParameter.ActualValue.ElementAt(index); 79 IGAssistNiche niche = GAssistNichesProblemDataParameter.ActualValue.GetPossibleNiches().ElementAt(index); 80 DefaultClassParameter.ActualValue = niche; 81 82 foreach (var individual in IndividualParameter.ActualValue) { 83 individual.SetNiche(RandomParameter.ActualValue, niche); 84 } 85 86 OperationCollection next = new OperationCollection(); 87 next.Add(EvaluateSubScopes()); 88 next.Add(base.Apply()); 89 return next; 80 90 } 81 91 return base.Apply(); -
branches/LearningClassifierSystems/HeuristicLab.Optimization.Operators.LCS/3.3/GAssist/Interfaces/IGAssistIndividual.cs
r9342 r9352 26 26 public interface IGAssistIndividual : IItem { 27 27 IGAssistNiche Niche { get; } 28 void SetNiche(IRandom random, IGAssistNiche niche); 28 29 void ApplySplit(IRandom random, double probability); 29 30 void ApplyMerge(IRandom random, double probability); -
branches/LearningClassifierSystems/HeuristicLab.Optimization.Operators.LCS/3.3/GAssist/Interfaces/IGAssistNiche.cs
r9342 r9352 20 20 #endregion 21 21 22 using System.Collections.Generic; 22 23 using HeuristicLab.Core; 23 24 … … 25 26 public interface IGAssistNiche : IItem { 26 27 bool SameNiche(IGAssistNiche niche); 28 int GetNicheHashCode(); 29 IEqualityComparer<IGAssistNiche> Comparer { get; } 27 30 } 28 31 } -
branches/LearningClassifierSystems/HeuristicLab.Optimization.Operators.LCS/3.3/HeuristicLab.Optimization.Operators.LCS-3.3.csproj
r9342 r9352 46 46 <HintPath>..\..\..\..\trunk\sources\bin\HeuristicLab.Common-3.3.dll</HintPath> 47 47 </Reference> 48 <Reference Include="HeuristicLab.Core-3.3, Version=3.3.0.0, Culture=neutral, PublicKeyToken=ba48961d6f65dcec, processorArchitecture=MSIL">49 <SpecificVersion>False</SpecificVersion>50 <HintPath>..\..\..\..\trunk\sources\bin\HeuristicLab.Core-3.3.dll</HintPath>51 </Reference>52 48 <Reference Include="HeuristicLab.Data-3.3, Version=3.3.0.0, Culture=neutral, PublicKeyToken=ba48961d6f65dcec, processorArchitecture=MSIL"> 53 49 <SpecificVersion>False</SpecificVersion> … … 84 80 <Reference Include="System" /> 85 81 <Reference Include="System.Core" /> 82 <Reference Include="System.Drawing" /> 86 83 <Reference Include="System.Xml.Linq" /> 87 84 <Reference Include="System.Data.DataSetExtensions" /> … … 92 89 <ItemGroup> 93 90 <Compile Include="DefaultRule\AutoDefaultRule.cs" /> 91 <Compile Include="GAssist\IGAssistNichesProblemData.cs" /> 94 92 <Compile Include="DefaultRule\MajorDefaultRule.cs" /> 95 93 <Compile Include="DefaultRule\DefaultRuleOperator.cs" /> … … 99 97 <Compile Include="Discretizer\UniformWidthDiscretizer.cs" /> 100 98 <Compile Include="Discretizer\IDiscretizer.cs" /> 99 <Compile Include="GAssist\IGAssistProblem.cs" /> 101 100 <Compile Include="GAssist\Interfaces\IGAssistIndividual.cs" /> 102 101 <Compile Include="GAssist\Interfaces\IGAssistIndividualCreator.cs" /> … … 110 109 <Compile Include="GAssist\SpecialStage\SplitOperator.cs" /> 111 110 <Compile Include="Plugin.cs" /> 111 <Compile Include="Selection\INichingSingleObjectiveSelector.cs" /> 112 112 <Compile Include="Selection\NichingTournamentSelector.cs" /> 113 113 <Compile Include="Selection\PreservingRightReducer.cs" /> … … 119 119 <None Include="Plugin.cs.frame" /> 120 120 </ItemGroup> 121 <ItemGroup /> 121 <ItemGroup> 122 <ProjectReference Include="..\..\HeuristicLab.Core\3.3\HeuristicLab.Core-3.3.csproj"> 123 <Project>{c36bd924-a541-4a00-afa8-41701378ddc5}</Project> 124 <Name>HeuristicLab.Core-3.3</Name> 125 </ProjectReference> 126 </ItemGroup> 122 127 <Import Project="$(MSBuildToolsPath)\Microsoft.CSharp.targets" /> 123 128 <PropertyGroup> -
branches/LearningClassifierSystems/HeuristicLab.Optimization.Operators.LCS/3.3/Properties
-
Property
svn:ignore
set to
AssemblyInfo.cs
-
Property
svn:ignore
set to
-
branches/LearningClassifierSystems/HeuristicLab.Optimization.Operators.LCS/3.3/Selection/NichingTournamentSelector.cs
r9342 r9352 30 30 using HeuristicLab.Selection; 31 31 32 namespace HeuristicLab.Optimization.Operators.LCS .Selection{32 namespace HeuristicLab.Optimization.Operators.LCS { 33 33 [Item("NichingTournamentSelector", "Description missing")] 34 34 [StorableClass] 35 public class NichingTournamentSelector : StochasticSingleObjectiveSelector, I SingleObjectiveSelector {35 public class NichingTournamentSelector : StochasticSingleObjectiveSelector, INichingSingleObjectiveSelector { 36 36 37 37 #region Parameter Properties … … 39 39 get { return (ValueLookupParameter<IntValue>)Parameters["GroupSize"]; } 40 40 } 41 public LookupParameter<IntValue> NichesParameter { 42 get { return (LookupParameter<IntValue>)Parameters["Niches"]; } 41 public ILookupParameter<IGAssistNichesProblemData> GAssistNichesProblemDataParameter { 42 get { return (LookupParameter<IGAssistNichesProblemData>)Parameters["GAssistNichesProblemData"]; } 43 } 44 public ILookupParameter<BoolValue> NichingParameter { 45 get { return (LookupParameter<BoolValue>)Parameters["Niching"]; } 46 } 47 public IValueLookupParameter<IntValue> ParentsPerChildParameter { 48 get { return (IValueLookupParameter<IntValue>)Parameters["ParentsPerChild"]; } 49 } 50 public ILookupParameter<ItemArray<IGAssistIndividual>> IndividualParameter { 51 get { return (ILookupParameter<ItemArray<IGAssistIndividual>>)Parameters["Individual"]; } 43 52 } 44 53 #endregion … … 52 61 : base() { 53 62 Parameters.Add(new ValueLookupParameter<IntValue>("GroupSize", "The size of the tournament group.", new IntValue(2))); 54 Parameters.Add(new LookupParameter<IntValue>("Niches", "")); 63 Parameters.Add(new LookupParameter<IGAssistNichesProblemData>("GAssistNichesProblemData", "")); 64 Parameters.Add(new LookupParameter<BoolValue>("Niching", "")); 65 Parameters.Add(new ValueLookupParameter<IntValue>("ParentsPerChild", "")); 66 Parameters.Add(new ScopeTreeLookupParameter<IGAssistIndividual>("Individual", "")); 55 67 } 56 68 public override IDeepCloneable Clone(Cloner cloner) { … … 64 76 bool maximization = MaximizationParameter.ActualValue.Value; 65 77 List<double> qualities = QualityParameter.ActualValue.Where(x => IsValidQuality(x.Value)).Select(x => x.Value).ToList(); 78 List<IGAssistIndividual> individuals = IndividualParameter.ActualValue.ToList(); 66 79 int groupSize = GroupSizeParameter.ActualValue.Value; 67 80 IScope[] selected = new IScope[count]; 81 bool doNiching = NichingParameter.ActualValue.Value; 68 82 69 83 //check if list with indexes is as long as the original scope list 70 84 //otherwise invalid quality values were filtered 71 if (qualities.Count != scopes.Count ) {85 if (qualities.Count != scopes.Count && individuals.Count != scopes.Count) { 72 86 throw new ArgumentException("The scopes contain invalid quality values (either infinity or double.NaN) on which the selector cannot operate."); 73 87 } 74 88 75 for (int i = 0; i < count; i++) { 76 int best = random.Next(scopes.Count); 77 int index; 78 for (int j = 1; j < groupSize; j++) { 79 index = random.Next(scopes.Count); 80 if (((maximization) && (qualities[index] > qualities[best])) || 81 ((!maximization) && (qualities[index] < qualities[best]))) { 82 best = index; 89 int parentsPerChild = ParentsPerChildParameter.ActualValue.Value; 90 var possibleNiches = GAssistNichesProblemDataParameter.ActualValue.GetPossibleNiches().ToList(); 91 var selectPerNiche = new Dictionary<IGAssistNiche, int>(possibleNiches.First().Comparer); 92 93 var nicheScope = new Dictionary<IGAssistNiche, List<int>>(possibleNiches.First().Comparer); 94 foreach (var niche in possibleNiches) { 95 nicheScope.Add(niche, new List<int>()); 96 selectPerNiche.Add(niche, count / possibleNiches.Count); 97 } 98 99 for (int i = 0; i < individuals.Count; i++) { 100 nicheScope[individuals[i].Niche].Add(i); 101 } 102 103 int curCount = 0; 104 while (curCount < count) { 105 IGAssistNiche niche = null; 106 int best = -1; 107 if (doNiching) { 108 niche = GetNiche(random, selectPerNiche, possibleNiches); 109 } else { 110 best = random.Next(scopes.Count); 111 } 112 for (int i = 0; i < parentsPerChild; i++) { 113 int index; 114 if (doNiching) { 115 best = nicheScope[niche][random.Next(nicheScope[niche].Count)]; 83 116 } 84 } 117 for (int j = 1; j < groupSize; j++) { 118 if (niche != null) { 119 index = nicheScope[niche][random.Next(nicheScope[niche].Count)]; 120 } else { 121 index = random.Next(scopes.Count); 122 } 123 if (((maximization) && (qualities[index] > qualities[best])) || 124 ((!maximization) && (qualities[index] < qualities[best]))) { 125 best = index; 126 } 127 } 85 128 86 if (copy) 87 selected[i] = (IScope)scopes[best].Clone(); 88 else { 89 selected[i] = scopes[best]; 90 scopes.RemoveAt(best); 91 qualities.RemoveAt(best); 129 niche = individuals[best].Niche; 130 131 if (copy) 132 selected[curCount] = (IScope)scopes[best].Clone(); 133 else { 134 selected[curCount] = scopes[best]; 135 scopes.RemoveAt(best); 136 qualities.RemoveAt(best); 137 } 138 selectPerNiche[niche]--; 139 curCount++; 92 140 } 93 141 } 142 94 143 return selected; 144 } 145 146 private IGAssistNiche GetNiche(IRandom random, Dictionary<IGAssistNiche, int> nicheScope, List<IGAssistNiche> possibleNiches) { 147 int sum = nicheScope.Values.Sum(); 148 if (sum <= 0) { return possibleNiches[random.Next(possibleNiches.Count)]; } 149 int pos = random.Next(sum); 150 int total = 0; 151 IGAssistNiche niche = nicheScope.Keys.First(); 152 foreach (var item in nicheScope) { 153 total += item.Value; 154 niche = item.Key; 155 if (pos < total) { 156 return niche; 157 } 158 } 159 throw new ArgumentException("error in code"); 95 160 } 96 161 }
Note: See TracChangeset
for help on using the changeset viewer.