Changeset 10142 for branches/DataAnalysis.IslandAlgorithms/HeuristicLab.Algorithms.DataAnalysis.Symbolic
- Timestamp:
- 11/20/13 10:52:38 (10 years ago)
- Location:
- branches/DataAnalysis.IslandAlgorithms/HeuristicLab.Algorithms.DataAnalysis.Symbolic/3.3
- Files:
-
- 1 added
- 3 edited
Legend:
- Unmodified
- Added
- Removed
-
branches/DataAnalysis.IslandAlgorithms/HeuristicLab.Algorithms.DataAnalysis.Symbolic/3.3/HeuristicLab.Algorithms.DataAnalysis.Symbolic.csproj
r9182 r10142 41 41 <SpecificVersion>False</SpecificVersion> 42 42 <HintPath>..\..\..\..\trunk\sources\bin\HeuristicLab.Analysis-3.3.dll</HintPath> 43 <Private>False</Private> 43 44 </Reference> 44 45 <Reference Include="HeuristicLab.Collections-3.3, Version=3.3.0.0, Culture=neutral, PublicKeyToken=ba48961d6f65dcec, processorArchitecture=MSIL"> 45 46 <SpecificVersion>False</SpecificVersion> 46 47 <HintPath>..\..\..\..\trunk\sources\bin\HeuristicLab.Collections-3.3.dll</HintPath> 48 <Private>False</Private> 47 49 </Reference> 48 50 <Reference Include="HeuristicLab.Common-3.3, Version=3.3.0.0, Culture=neutral, PublicKeyToken=ba48961d6f65dcec, processorArchitecture=MSIL"> 49 51 <SpecificVersion>False</SpecificVersion> 50 52 <HintPath>..\..\..\..\trunk\sources\bin\HeuristicLab.Common-3.3.dll</HintPath> 53 <Private>False</Private> 51 54 </Reference> 52 55 <Reference Include="HeuristicLab.Core-3.3, Version=3.3.0.0, Culture=neutral, PublicKeyToken=ba48961d6f65dcec, processorArchitecture=MSIL"> 53 56 <SpecificVersion>False</SpecificVersion> 54 57 <HintPath>..\..\..\..\trunk\sources\bin\HeuristicLab.Core-3.3.dll</HintPath> 58 <Private>False</Private> 55 59 </Reference> 56 60 <Reference Include="HeuristicLab.Data-3.3, Version=3.3.0.0, Culture=neutral, PublicKeyToken=ba48961d6f65dcec, processorArchitecture=MSIL"> 57 61 <SpecificVersion>False</SpecificVersion> 58 62 <HintPath>..\..\..\..\trunk\sources\bin\HeuristicLab.Data-3.3.dll</HintPath> 63 <Private>False</Private> 59 64 </Reference> 60 65 <Reference Include="HeuristicLab.Encodings.SymbolicExpressionTreeEncoding-3.4, Version=3.4.0.0, Culture=neutral, PublicKeyToken=ba48961d6f65dcec, processorArchitecture=MSIL"> 61 66 <SpecificVersion>False</SpecificVersion> 62 67 <HintPath>..\..\..\..\trunk\sources\bin\HeuristicLab.Encodings.SymbolicExpressionTreeEncoding-3.4.dll</HintPath> 68 <Private>False</Private> 63 69 </Reference> 64 70 <Reference Include="HeuristicLab.Operators-3.3, Version=3.3.0.0, Culture=neutral, PublicKeyToken=ba48961d6f65dcec, processorArchitecture=MSIL"> 65 71 <SpecificVersion>False</SpecificVersion> 66 72 <HintPath>..\..\..\..\trunk\sources\bin\HeuristicLab.Operators-3.3.dll</HintPath> 73 <Private>False</Private> 67 74 </Reference> 68 75 <Reference Include="HeuristicLab.Optimization-3.3, Version=3.3.0.0, Culture=neutral, PublicKeyToken=ba48961d6f65dcec, processorArchitecture=MSIL"> 69 76 <SpecificVersion>False</SpecificVersion> 70 77 <HintPath>..\..\..\..\trunk\sources\bin\HeuristicLab.Optimization-3.3.dll</HintPath> 78 <Private>False</Private> 71 79 </Reference> 72 80 <Reference Include="HeuristicLab.Optimization.Operators-3.3, Version=3.3.0.0, Culture=neutral, PublicKeyToken=ba48961d6f65dcec, processorArchitecture=MSIL"> 73 81 <SpecificVersion>False</SpecificVersion> 74 82 <HintPath>..\..\..\..\trunk\sources\bin\HeuristicLab.Optimization.Operators-3.3.dll</HintPath> 83 <Private>False</Private> 75 84 </Reference> 76 85 <Reference Include="HeuristicLab.Parameters-3.3, Version=3.3.0.0, Culture=neutral, PublicKeyToken=ba48961d6f65dcec, processorArchitecture=MSIL"> 77 86 <SpecificVersion>False</SpecificVersion> 78 87 <HintPath>..\..\..\..\trunk\sources\bin\HeuristicLab.Parameters-3.3.dll</HintPath> 88 <Private>False</Private> 79 89 </Reference> 80 90 <Reference Include="HeuristicLab.Persistence-3.3, Version=3.3.0.0, Culture=neutral, PublicKeyToken=ba48961d6f65dcec, processorArchitecture=MSIL"> 81 91 <SpecificVersion>False</SpecificVersion> 82 92 <HintPath>..\..\..\..\trunk\sources\bin\HeuristicLab.Persistence-3.3.dll</HintPath> 93 <Private>False</Private> 83 94 </Reference> 84 95 <Reference Include="HeuristicLab.PluginInfrastructure-3.3, Version=3.3.0.0, Culture=neutral, PublicKeyToken=ba48961d6f65dcec, processorArchitecture=MSIL"> … … 90 101 <SpecificVersion>False</SpecificVersion> 91 102 <HintPath>..\..\..\..\trunk\sources\bin\HeuristicLab.Problems.DataAnalysis-3.4.dll</HintPath> 92 </Reference> 93 <Reference Include="HeuristicLab.Problems.DataAnalysis.Symbolic-3.4, Version=3.4.0.0, Culture=neutral, PublicKeyToken=ba48961d6f65dcec, processorArchitecture=MSIL"> 94 <SpecificVersion>False</SpecificVersion> 95 <HintPath>..\..\..\..\trunk\sources\bin\HeuristicLab.Problems.DataAnalysis.Symbolic-3.4.dll</HintPath> 103 <Private>False</Private> 96 104 </Reference> 97 105 <Reference Include="HeuristicLab.Random-3.3, Version=3.3.0.0, Culture=neutral, PublicKeyToken=ba48961d6f65dcec, processorArchitecture=MSIL"> 98 106 <SpecificVersion>False</SpecificVersion> 99 107 <HintPath>..\..\..\..\trunk\sources\bin\HeuristicLab.Random-3.3.dll</HintPath> 108 <Private>False</Private> 100 109 </Reference> 101 110 <Reference Include="HeuristicLab.Selection-3.3, Version=3.3.0.0, Culture=neutral, PublicKeyToken=ba48961d6f65dcec, processorArchitecture=MSIL"> 102 111 <SpecificVersion>False</SpecificVersion> 103 112 <HintPath>..\..\..\..\trunk\sources\bin\HeuristicLab.Selection-3.3.dll</HintPath> 113 <Private>False</Private> 104 114 </Reference> 105 115 <Reference Include="System" /> … … 113 123 </ItemGroup> 114 124 <ItemGroup> 125 <Compile Include="SymbolicDataAnalysisIslandOffspringSelectionGeneticAlgorithm.cs" /> 115 126 <Compile Include="ISymbolicDataAnalysisIslandGAEvaluator .cs" /> 116 127 <Compile Include="ScopeTreeAssigner.cs" /> … … 129 140 <Project>{a51da44f-cb35-4f6f-99f5-2a2e904ab93b}</Project> 130 141 <Name>HeuristicLab.Algorithms.GeneticAlgorithm-3.3</Name> 142 <Private>False</Private> 143 </ProjectReference> 144 <ProjectReference Include="..\..\HeuristicLab.Algorithms.OffspringSelectionGeneticAlgorithm\3.3\HeuristicLab.Algorithms.OffspringSelectionGeneticAlgorithm-3.3.csproj"> 145 <Project>{f409dd9e-1e9c-4eb1-aa3a-9f6e987c6e58}</Project> 146 <Name>HeuristicLab.Algorithms.OffspringSelectionGeneticAlgorithm-3.3</Name> 147 <Private>False</Private> 148 </ProjectReference> 149 <ProjectReference Include="..\..\HeuristicLab.Problems.DataAnalysis.Symbolic\3.4\HeuristicLab.Problems.DataAnalysis.Symbolic-3.4.csproj"> 150 <Project>{3d28463f-ec96-4d82-afee-38be91a0ca00}</Project> 151 <Name>HeuristicLab.Problems.DataAnalysis.Symbolic-3.4</Name> 152 <Private>False</Private> 131 153 </ProjectReference> 132 154 </ItemGroup> -
branches/DataAnalysis.IslandAlgorithms/HeuristicLab.Algorithms.DataAnalysis.Symbolic/3.3/SymbolicDataAnalysisIslandGAEvaluator.cs
r9182 r10142 71 71 get { return (ILookupParameter<IntValue>)Parameters[RandomSamplesParameterName]; } 72 72 } 73 74 public IValueParameter<EnumerableItem<int>> RowsParameter { 75 get { return (IValueParameter<EnumerableItem<int>>)Parameters["Rows"]; } 76 } 73 77 #endregion 74 78 … … 93 97 Parameters.Add(new LookupParameter<IntRange>(FixedSamplesPartitionParameterName, "The data partition which is used to calculate the fitness on the fixed samples.")); 94 98 Parameters.Add(new LookupParameter<IntValue>(RandomSamplesParameterName, "The number of random samples used for fitness calculation in each island.")); 99 Parameters.Add(new OptionalValueParameter<EnumerableItem<int>>("Rows", "TODO")); 95 100 96 101 EvaluatorParameter.Hidden = true; … … 99 104 public override IOperation Apply() { 100 105 var evaluator = EvaluatorParameter.ActualValue; 101 var tree = SymbolicExpressionTreeParameter.ActualValue;102 106 var problemData = ProblemDataParameter.ActualValue; 103 107 104 var samplesStart = FitnessCalculationPartitionParameter.ActualValue.Start; 105 var samplesEnd = FitnessCalculationPartitionParameter.ActualValue.End; 106 var fixedSamplesStart = FixedSamplesPartitionParameter.ActualValue.Start; 107 var fixedSamplesEnd = FixedSamplesPartitionParameter.ActualValue.End; 108 var samples = FitnessCalculationPartitionParameter.ActualValue; 109 var fixedSamples = FixedSamplesPartitionParameter.ActualValue; 108 110 var randomSamples = RandomSamplesParameter.ActualValue.Value; 109 var maxRandomSamples = samplesEnd - samplesStart - fixedSamplesEnd + fixedSamplesStart;110 111 111 //create rows for evaluation 112 var fixedRows = Enumerable.Range(fixedSamplesStart, fixedSamplesEnd - fixedSamplesStart); 113 var randomRows = Enumerable.Range(samplesStart, samplesEnd - samplesStart).Where(r => r < fixedSamplesStart || r >= fixedSamplesEnd); 114 randomRows = randomRows.SampleRandomWithoutRepetition(RandomParameter.ActualValue, randomSamples, maxRandomSamples); 115 var rows = fixedRows.Concat(randomRows); 112 //create fixed rows enumerable 113 var rows = Enumerable.Range(fixedSamples.Start, fixedSamples.Size); 114 //create randomly chosen rows enumerable 115 if (randomSamples > 0) { 116 if (randomSamples > samples.Size - fixedSamples.Size) { 117 var error = string.Format("Could not select {0} random samples, because there are {1} total samples present from which {2} where used in the fixed partition. Please lower the number of random samples in the algorithm configuration.", randomSamples, samples.Size, fixedSamples.Size); 118 throw new OperatorExecutionException(this, error); 119 } 120 var randomRows = Enumerable.Range(samples.Start, samples.Size).Where(r => r < fixedSamples.Start || r >= fixedSamples.End); 121 randomRows = randomRows.SampleRandomWithoutRepetition(RandomParameter.ActualValue, randomSamples, samples.Size - fixedSamples.Size); 116 122 123 rows = rows.Concat(randomRows); 124 } 125 //filter out test rows 126 rows = rows.Where(r => r < problemData.TestPartition.Start && r > problemData.TestPartition.End); 127 128 //execution context is created manually to be able to clear the rows parameter easily 129 RowsParameter.Value = new EnumerableItem<int>(rows); 117 130 var executionContext = new ExecutionContext(ExecutionContext, evaluator, ExecutionContext.Scope); 118 var fitness = evaluator.Evaluate(executionContext, tree, problemData, rows);119 QualityParameter.ActualValue = new DoubleValue(fitness);120 return base.Apply();131 var successor = evaluator.Execute(executionContext, this.CancellationToken); 132 RowsParameter.Value = null; 133 return new OperationCollection(successor, base.Apply()); 121 134 } 122 135 } -
branches/DataAnalysis.IslandAlgorithms/HeuristicLab.Algorithms.DataAnalysis.Symbolic/3.3/SymbolicDataAnalysisIslandGeneticAlgorithm.cs
r9182 r10142 27 27 using HeuristicLab.Core; 28 28 using HeuristicLab.Data; 29 using HeuristicLab.Operators;30 29 using HeuristicLab.Optimization; 31 30 using HeuristicLab.Parameters; … … 34 33 using HeuristicLab.Problems.DataAnalysis.Symbolic; 35 34 using HeuristicLab.Random; 36 using HeuristicLab.Selection;37 35 38 36 namespace HeuristicLab.Algorithms.DataAnalysis.Symbolic { 39 [Item("Symbolic Data Analysis Island Genetic Algorithm", "A symbolic data analysis island genetic algorithm.")]37 [Item("Symbolic Data Analysis Island Genetic Algorithm", "A symbolic data analysis island genetic algorithm.")] 40 38 [Creatable("Data Analysis")] 41 39 [StorableClass] … … 113 111 Parameters.Add(new LookupParameter<ISingleObjectiveEvaluator>(ProblemEvaluatorParameterName, "Internal parameter for name translation", "Evaluator")); 114 112 115 Elites.Value = 0;116 ElitesParameter.Hidden = true;117 118 113 ScopeTreeAssigner<IntRange> fixedSamplesPartitionCreator = new ScopeTreeAssigner<IntRange>(); 114 fixedSamplesPartitionCreator.Name = "Create fixed evaluation partition"; 119 115 fixedSamplesPartitionCreator.LeftSideParameter.ActualName = FixedSamplesPartitionParameterName; 120 116 fixedSamplesPartitionCreator.RightSideParameter.ActualName = FixedSamplesPartitionsParameterName; … … 123 119 fixedSamplesPartitionCreator.Successor = insertionPoint.Successor; 124 120 insertionPoint.Successor = fixedSamplesPartitionCreator; 125 126 //necessary to reevaluate elites127 var evaluatorPlaceHolder = new Placeholder();128 evaluatorPlaceHolder.OperatorParameter.ActualName = "Evaluator";129 130 UniformSubScopesProcessor subScopesProcessor = new UniformSubScopesProcessor();131 subScopesProcessor.Name = "Reevaluate elites";132 subScopesProcessor.Parallel.Value = true;133 subScopesProcessor.Operator = evaluatorPlaceHolder;134 OperatorGraph.Iterate().OfType<RightReducer>().First().Successor = subScopesProcessor;135 121 136 122 RegisterParameterEvents(); … … 143 129 NumberOfIslandsParameter.Value.ValueChanged += (o, ev) => RecalculateFixedSamplesPartitions(); 144 130 FixedSamplesParameter.Value.ValueChanged += (o, e) => RecalculateFixedSamplesPartitions(); 131 RandomSamplesParameter.Value.ValueChanged += (o, e) => { ReevaluteElites = RandomSamples != 0; }; 145 132 Analyzer.Operators.PropertyChanged += (o, e) => ParameterizeAnalyzers(); 146 }147 148 protected override void Problem_EvaluatorChanged(object sender, EventArgs e) {149 ParameterizeProblemEvaluator();150 base.Problem_EvaluatorChanged(sender, e);151 }152 153 private void ParameterizeProblemEvaluator() {154 var regresssionEvaluator = Problem.Evaluator as ISymbolicDataAnalysisEvaluator<IRegressionProblemData>;155 if (regresssionEvaluator != null) {156 regresssionEvaluator.EvaluationPartitionParameter.ActualName = FixedSamplesPartitionParameterName;157 }158 var classificationEvaluator = Problem.Evaluator as ISymbolicDataAnalysisEvaluator<IClassificationProblemData>;159 if (classificationEvaluator != null) {160 classificationEvaluator.EvaluationPartitionParameter.ActualName = FixedSamplesPartitionParameterName;161 }162 133 } 163 134 … … 173 144 } 174 145 175 176 private void ParameterizeAnalyzers() {146 protected override void ParameterizeAnalyzers() { 147 base.ParameterizeAnalyzers(); 177 148 foreach (var analyzer in Analyzer.Operators.OfType<ISymbolicDataAnalysisAnalyzer>()) { 178 149 IParameter evaluatorParameter; … … 193 164 RandomSamples = Problem.FitnessCalculationPartition.Size / NumberOfIslands.Value; 194 165 RecalculateFixedSamplesPartitions(); 195 ParameterizeProblemEvaluator();196 166 base.Problem_Reset(sender, e); 197 167 } … … 213 183 EvaluatorParameter.Value = null; 214 184 215 ParameterizeProblemEvaluator();216 185 ParameterizeStochasticOperatorForIsland(EvaluatorParameter.Value); 217 186 … … 231 200 var islands = NumberOfIslands.Value; 232 201 233 int offset = 0; 234 //fixed samples partition do not overlap 235 if (((double)totalSamples) / fixedSamples <= islands) { 236 offset = totalSamples / islands; 237 } else { 238 offset = (totalSamples - fixedSamples) / (islands - 1); 239 } 240 202 int offset = (int)Math.Ceiling(((double)(totalSamples - fixedSamples)) / (islands - 1)); 241 203 List<IntRange> partitions = new List<IntRange>(); 242 204 for (int i = 0; i < islands; i++) {
Note: See TracChangeset
for help on using the changeset viewer.