- Timestamp:
- 03/07/11 14:23:26 (14 years ago)
- Location:
- branches/DataAnalysis Refactoring
- Files:
-
- 6 added
- 20 edited
- 2 copied
Legend:
- Unmodified
- Added
- Removed
-
branches/DataAnalysis Refactoring/HeuristicLab.Algorithms.DataAnalysis/3.4/Interfaces/IDataAnalysisAlgorithm.cs
r5617 r5618 20 20 #endregion 21 21 22 using System;23 using System.Collections.Generic;24 using HeuristicLab.Core;25 22 using HeuristicLab.Optimization; 26 23 using HeuristicLab.Problems.DataAnalysis; … … 31 28 /// </summary> 32 29 public interface IDataAnalysisAlgorithm<T> : IAlgorithm where T : class, IDataAnalysisProblem { 33 T Problem { get; }30 new T Problem { get; } 34 31 } 35 32 } -
branches/DataAnalysis Refactoring/HeuristicLab.Common/3.3/EnumerableStatisticExtensions.cs
r5551 r5618 110 110 public static IEnumerable<double> LimitToRange(this IEnumerable<double> values, double min, double max) { 111 111 foreach (var x in values) { 112 if (double.IsNaN(x)) yield return x;112 if (double.IsNaN(x)) yield return max; 113 113 else if (x < min) yield return min; 114 114 else if (x > max) yield return max; -
branches/DataAnalysis Refactoring/HeuristicLab.Encodings.SymbolicExpressionTreeEncoding/3.4/Creators/ProbabilisticTreeCreator.cs
r5549 r5618 33 33 [StorableClass] 34 34 [Item("ProbabilisticTreeCreator", "An operator that creates new symbolic expression trees with uniformly distributed length")] 35 public sealedclass ProbabilisticTreeCreator : SymbolicExpressionTreeCreator,35 public class ProbabilisticTreeCreator : SymbolicExpressionTreeCreator, 36 36 ISymbolicExpressionTreeSizeConstraintOperator, ISymbolicExpressionTreeGrammarBasedOperator, ISymbolicExpressionTreeArchitectureAlteringOperator { 37 37 private const int MAX_TRIES = 100; … … 77 77 78 78 [StorableConstructor] 79 pr ivateProbabilisticTreeCreator(bool deserializing) : base(deserializing) { }80 pr ivateProbabilisticTreeCreator(ProbabilisticTreeCreator original, Cloner cloner) : base(original, cloner) { }79 protected ProbabilisticTreeCreator(bool deserializing) : base(deserializing) { } 80 protected ProbabilisticTreeCreator(ProbabilisticTreeCreator original, Cloner cloner) : base(original, cloner) { } 81 81 public ProbabilisticTreeCreator() 82 82 : base() { -
branches/DataAnalysis Refactoring/HeuristicLab.Optimization/3.3/HeuristicOptimizationProblem.cs
r5578 r5618 46 46 Parameters.Add(new ValueParameter<T>(EvaluatorParameterName, "The operator used to evaluate a solution.")); 47 47 Parameters.Add(new ValueParameter<U>(SolutionCreateParameterName, "The operator to create a solution.")); 48 RegisterEventHandlers(); 49 } 50 51 protected HeuristicOptimizationProblem(T evaluator, U solutionCreator) 52 : base() { 53 Parameters.Add(new ValueParameter<T>(EvaluatorParameterName, "The operator used to evaluate a solution.", evaluator)); 54 Parameters.Add(new ValueParameter<U>(SolutionCreateParameterName, "The operator to create a solution.", solutionCreator)); 48 55 RegisterEventHandlers(); 49 56 } -
branches/DataAnalysis Refactoring/HeuristicLab.Optimization/3.3/MultiObjectiveHeuristicOptimizationProblem.cs
r5578 r5618 42 42 } 43 43 44 protected MultiObjectiveHeuristicOptimizationProblem(T evaluator, U solutionCreator) 45 : base(evaluator, solutionCreator) { 46 Parameters.Add(new ValueParameter<BoolArray>(MaximizationParameterName, "Determines for each objective whether it should be maximized or minimized.")); 47 } 48 44 49 public ValueParameter<BoolArray> MaximizationParameter { 45 50 get { return (ValueParameter<BoolArray>)Parameters[MaximizationParameterName]; } -
branches/DataAnalysis Refactoring/HeuristicLab.Optimization/3.3/SingleObjectiveHeuristicOptimizationProblem.cs
r5578 r5618 40 40 protected SingleObjectiveHeuristicOptimizationProblem() 41 41 : base() { 42 Parameters.Add(new ValueParameter<BoolValue>(MaximizationParameterName, "Set to false if the problem should be minimized.")); 43 Parameters.Add(new ValueParameter<DoubleValue>(BestKnownQualityParameterName, "The quality of the best known solution of this problem.")); 42 Parameters.Add(new ValueParameter<BoolValue>(MaximizationParameterName, "Set to false if the problem should be minimized.", new BoolValue())); 43 Parameters.Add(new ValueParameter<DoubleValue>(BestKnownQualityParameterName, "The quality of the best known solution of this problem.", new DoubleValue())); 44 } 45 46 protected SingleObjectiveHeuristicOptimizationProblem(T evaluator, U solutionCreator) 47 : base(evaluator, solutionCreator) { 48 Parameters.Add(new ValueParameter<BoolValue>(MaximizationParameterName, "Set to false if the problem should be minimized.", new BoolValue())); 49 Parameters.Add(new ValueParameter<DoubleValue>(BestKnownQualityParameterName, "The quality of the best known solution of this problem.", new DoubleValue())); 44 50 } 45 51 -
branches/DataAnalysis Refactoring/HeuristicLab.Problems.DataAnalysis.Symbolic.Classification/3.4/HeuristicLab.Problems.DataAnalysis.Symbolic.Classification-3.4.csproj
r5557 r5618 113 113 <Compile Include="MultiObjective\SymbolicClassificationMultiObjectiveMeanSquaredErrorTreeSizeEvaluator.cs" /> 114 114 <Compile Include="MultiObjective\SymbolicClassificationMultiObjectivePearsonRSquaredTreeSizeEvaluator.cs" /> 115 <Compile Include="MultiObjective\SymbolicClassificationMultiObjectiveProblem.cs" /> 115 116 <Compile Include="SingleObjective\SymbolicClassificationSingleObjectiveEvaluator.cs" /> 116 117 <Compile Include="SingleObjective\SymbolicClassificationSingleObjectiveMeanSquaredErrorEvaluator.cs" /> 117 118 <Compile Include="SingleObjective\SymbolicClassificationSingleObjectivePearsonRSquaredEvaluator.cs" /> 118 119 <Compile Include="MultiObjective\SymbolicClassificationMultiObjectiveTrainingBestSolutionAnalyzer.cs" /> 120 <Compile Include="SingleObjective\SymbolicClassificationSingleObjectiveProblem.cs" /> 119 121 <Compile Include="SingleObjective\SymbolicClassificationSingleObjectiveTrainingBestSolutionAnalyzer.cs" /> 120 122 <None Include="HeuristicLab.snk" /> -
branches/DataAnalysis Refactoring/HeuristicLab.Problems.DataAnalysis.Symbolic.Classification/3.4/MultiObjective/SymbolicClassificationMultiObjectiveMeanSquaredErrorTreeSizeEvaluator.cs
r5613 r5618 27 27 using HeuristicLab.Persistence.Default.CompositeSerializers.Storable; 28 28 29 namespace HeuristicLab.Problems.DataAnalysis.Symbolic.Classification .MultiObjective{29 namespace HeuristicLab.Problems.DataAnalysis.Symbolic.Classification { 30 30 [Item("Mean squared error & Tree size Evaluator", "Calculates the mean squared error and the tree size of a symbolic classification solution.")] 31 31 [StorableClass] -
branches/DataAnalysis Refactoring/HeuristicLab.Problems.DataAnalysis.Symbolic.Classification/3.4/MultiObjective/SymbolicClassificationMultiObjectivePearsonRSquaredTreeSizeEvaluator.cs
r5613 r5618 6 6 using HeuristicLab.Persistence.Default.CompositeSerializers.Storable; 7 7 8 namespace HeuristicLab.Problems.DataAnalysis.Symbolic.Classification .MultiObjective{8 namespace HeuristicLab.Problems.DataAnalysis.Symbolic.Classification { 9 9 [Item("Pearson R² & Tree size Evaluator", "Calculates the Pearson R² and the tree size of a symbolic classification solution.")] 10 10 [StorableClass] -
branches/DataAnalysis Refactoring/HeuristicLab.Problems.DataAnalysis.Symbolic.Classification/3.4/SingleObjective/SymbolicClassificationSingleObjectiveMeanSquaredErrorEvaluator.cs
r5613 r5618 28 28 29 29 namespace HeuristicLab.Problems.DataAnalysis.Symbolic.Classification { 30 [Item("Mean squared error evaluator", "Calculates the mean squared error of a symbolic classification solution.")]30 [Item("Mean squared error Evaluator", "Calculates the mean squared error of a symbolic classification solution.")] 31 31 [StorableClass] 32 32 public class SymbolicClassificationSingleObjectiveMeanSquaredErrorEvaluator : SymbolicClassificationSingleObjectiveEvaluator { -
branches/DataAnalysis Refactoring/HeuristicLab.Problems.DataAnalysis.Symbolic.Regression/3.4/HeuristicLab.Problems.DataAnalysis.Symbolic.Regression-3.4.csproj
r5607 r5618 115 115 <Compile Include="Interfaces\ISymbolicRegressionMultiObjectiveEvaluator.cs" /> 116 116 <Compile Include="Interfaces\ISymbolicRegressionSingleObjectiveEvaluator.cs" /> 117 <Compile Include="MultiObjective\SymbolicRegressionMultiObjectiveProblem.cs" /> 117 118 <Compile Include="MultiObjective\SymbolicRegressionMultiObjectiveTrainingBestSolutionAnalyzer.cs" /> 119 <Compile Include="SingleObjective\SymbolicRegressionSingleObjectiveProblem.cs" /> 118 120 <Compile Include="SingleObjective\SymbolicRegressionSingleObjectiveValidationBestSolutionAnalyzer.cs" /> 119 121 <Compile Include="SingleObjective\SymbolicRegressionSingleObjectiveTrainingBestSolutionAnalyzer.cs" /> -
branches/DataAnalysis Refactoring/HeuristicLab.Problems.DataAnalysis.Symbolic.Regression/3.4/MultiObjective/SymbolicRegressionMultiObjectivePearsonRSquaredTreeSizeEvaluator.cs
r5613 r5618 27 27 using HeuristicLab.Persistence.Default.CompositeSerializers.Storable; 28 28 29 namespace HeuristicLab.Problems.DataAnalysis.Symbolic.Regression .MultiObjective{29 namespace HeuristicLab.Problems.DataAnalysis.Symbolic.Regression { 30 30 [Item("Pearson R² & Tree size Evaluator", "Calculates the Pearson R² and the tree size of a symbolic regression solution.")] 31 31 [StorableClass] -
branches/DataAnalysis Refactoring/HeuristicLab.Problems.DataAnalysis.Symbolic.Regression/3.4/SingleObjective/SymbolicRegressionSingleObjectiveMeanSquaredErrorEvaluator.cs
r5613 r5618 28 28 29 29 namespace HeuristicLab.Problems.DataAnalysis.Symbolic.Regression { 30 [Item("Mean squared error evaluator", "Calculates the mean squared error of a symbolic regression solution.")]30 [Item("Mean squared error Evaluator", "Calculates the mean squared error of a symbolic regression solution.")] 31 31 [StorableClass] 32 32 public class SymbolicRegressionSingleObjectiveMeanSquaredErrorEvaluator : SymbolicRegressionSingleObjectiveEvaluator { -
branches/DataAnalysis Refactoring/HeuristicLab.Problems.DataAnalysis.Symbolic.Regression/3.4/SingleObjective/SymbolicRegressionSingleObjectivePearsonRSquaredEvaluator.cs
r5613 r5618 28 28 29 29 namespace HeuristicLab.Problems.DataAnalysis.Symbolic.Regression { 30 [Item("Pearson R² evaluator", "Calculates the square of the pearson correlation coefficient (also known as coefficient of determination) of a symbolic regression solution.")]30 [Item("Pearson R² Evaluator", "Calculates the square of the pearson correlation coefficient (also known as coefficient of determination) of a symbolic regression solution.")] 31 31 [StorableClass] 32 32 public class SymbolicRegressionSingleObjectivePearsonRSquaredEvaluator : SymbolicRegressionSingleObjectiveEvaluator { … … 54 54 IEnumerable<double> estimatedValues = interpreter.GetSymbolicExpressionTreeValues(solution, problemData.Dataset, rows); 55 55 IEnumerable<double> originalValues = problemData.Dataset.GetEnumeratedVariableValues(problemData.TargetVariable, rows); 56 return OnlinePearsonsRSquaredEvaluator.Calculate(originalValues, estimatedValues); 56 IEnumerable<double> boundedEstimatedValues = estimatedValues.LimitToRange(lowerEstimationLimit, upperEstimationLimit); 57 return OnlinePearsonsRSquaredEvaluator.Calculate(originalValues, boundedEstimatedValues); 57 58 } 58 59 -
branches/DataAnalysis Refactoring/HeuristicLab.Problems.DataAnalysis.Symbolic/3.4/Evaluators/SymbolicDataAnalysisEvaluator.cs
r5616 r5618 46 46 private const string RelativeNumberOfEvaluatedSamplesParameterName = "RelativeNumberOfEvaluatedSamples"; 47 47 48 public override bool CanChangeName { get { return false; } } 49 48 50 #region parameter properties 49 51 public IValueLookupParameter<IRandom> RandomParameter { … … 60 62 } 61 63 62 public I ValueLookupParameter<IntValue> SamplesStartParameter {63 get { return (I ValueLookupParameter<IntValue>)Parameters[SamplesStartParameterName]; }64 public IFixedValueParameter<IntValue> SamplesStartParameter { 65 get { return (IFixedValueParameter<IntValue>)Parameters[SamplesStartParameterName]; } 64 66 } 65 public I ValueLookupParameter<IntValue> SamplesEndParameter {66 get { return (I ValueLookupParameter<IntValue>)Parameters[SamplesEndParameterName]; }67 public IFixedValueParameter<IntValue> SamplesEndParameter { 68 get { return (IFixedValueParameter<IntValue>)Parameters[SamplesEndParameterName]; } 67 69 } 68 70 … … 74 76 } 75 77 76 public I ValueParameter<PercentValue> RelativeNumberOfEvaluatedSamplesParameter {77 get { return (I ValueParameter<PercentValue>)Parameters[RelativeNumberOfEvaluatedSamplesParameterName]; }78 public IFixedValueParameter<PercentValue> RelativeNumberOfEvaluatedSamplesParameter { 79 get { return (IFixedValueParameter<PercentValue>)Parameters[RelativeNumberOfEvaluatedSamplesParameterName]; } 78 80 } 79 81 #endregion … … 93 95 } 94 96 public IntValue SamplesStart { 95 get { return SamplesStartParameter. ActualValue; }97 get { return SamplesStartParameter.Value; } 96 98 } 97 99 public IntValue SamplesEnd { 98 get { return SamplesEndParameter. ActualValue; }100 get { return SamplesEndParameter.Value; } 99 101 } 100 102 public DoubleValue UpperEstimationLimit { … … 118 120 Parameters.Add(new ValueLookupParameter<IRandom>(RandomParameterName, "The random generator to use.")); 119 121 Parameters.Add(new ValueLookupParameter<ISymbolicDataAnalysisTreeInterpreter>(SymbolicDataAnalysisTreeInterpreterParameterName, "The interpreter that should be used to calculate the output values of the symbolic data analysis tree.")); 120 Parameters.Add(new LookupParameter< SymbolicExpressionTree>(SymbolicExpressionTreeParameterName, "The symbolic data analysis solution encoded as a symbolic expression tree."));122 Parameters.Add(new LookupParameter<ISymbolicExpressionTree>(SymbolicExpressionTreeParameterName, "The symbolic data analysis solution encoded as a symbolic expression tree.")); 121 123 Parameters.Add(new ValueLookupParameter<T>(ProblemDataParameterName, "The problem data on which the symbolic data analysis solution should be evaluated.")); 122 Parameters.Add(new ValueLookupParameter<IntValue>(SamplesStartParameterName, "The start index of the dataset partition on which the symbolic data analysis solution should be evaluated."));123 Parameters.Add(new ValueLookupParameter<IntValue>(SamplesEndParameterName, "The end index of the dataset partition on which the symbolic data analysis solution should be evaluated."));124 Parameters.Add(new FixedValueParameter<IntValue>(SamplesStartParameterName, "The start index of the dataset partition on which the symbolic data analysis solution should be evaluated.", new IntValue())); 125 Parameters.Add(new FixedValueParameter<IntValue>(SamplesEndParameterName, "The end index of the dataset partition on which the symbolic data analysis solution should be evaluated.", new IntValue())); 124 126 Parameters.Add(new ValueLookupParameter<DoubleValue>(UpperEstimationLimitParameterName, "The upper limit that should be used as cut off value for the output values of symbolic data analysis trees.")); 125 127 Parameters.Add(new ValueLookupParameter<DoubleValue>(LowerEstimationLimitParameterName, "The lower limit that should be used as cut off value for the output values of symbolic data analysis trees.")); 126 Parameters.Add(new ValueParameter<PercentValue>(RelativeNumberOfEvaluatedSamplesParameterName, "The relative number of samples of the dataset partition, which should be randomly chosen for evaluation between the start and end index.", new PercentValue(1)));128 Parameters.Add(new FixedValueParameter<PercentValue>(RelativeNumberOfEvaluatedSamplesParameterName, "The relative number of samples of the dataset partition, which should be randomly chosen for evaluation between the start and end index.", new PercentValue(1))); 127 129 } 128 130 129 131 protected IEnumerable<int> GenerateRowsToEvaluate() { 130 132 int seed = RandomParameter.ActualValue.Next(); 133 131 134 if (SamplesEnd.Value < SamplesStart.Value) throw new ArgumentException("Start value is larger than end value."); 132 135 int count = (int)((SamplesEnd.Value - SamplesStart.Value) * RelativeNumberOfEvaluatedSamples.Value); 133 136 if (count == 0) count = 1; 134 return RandomEnumerable.SampleRandomNumbers(seed, Samples End.Value, SamplesStart.Value, count)137 return RandomEnumerable.SampleRandomNumbers(seed, SamplesStart.Value, SamplesEnd.Value, count) 135 138 .Where(i => i < ProblemDataParameter.ActualValue.TestPartitionStart.Value || ProblemDataParameter.ActualValue.TestPartitionEnd.Value <= i); 136 139 } -
branches/DataAnalysis Refactoring/HeuristicLab.Problems.DataAnalysis.Symbolic/3.4/HeuristicLab.Problems.DataAnalysis.Symbolic-3.4.csproj
r5607 r5618 118 118 </Compile> 119 119 <Compile Include="Analyzers\SymbolicDataAnalysisVariableFrequencyAnalyzer.cs" /> 120 <Compile Include="SymbolicDataAnalysisExpressionTreeCreator.cs" /> 121 <Compile Include="SymbolicDataAnalysisMultiObjectiveProblem.cs" /> 120 122 <Compile Include="Interfaces\ISymbolicDataAnalysisValidationAnalyzer.cs" /> 121 <Compile Include="MultiObjectiveSymbolicDataAnalysisProblem.cs" />122 123 <Compile Include="Grammars\ArithmeticExpressionGrammar.cs" /> 123 124 <Compile Include="Grammars\FullFunctionalExpressionGrammar.cs" /> … … 126 127 <Compile Include="Interfaces\ISymbolicDataAnalysisSingleObjectiveAnalyzer.cs" /> 127 128 <Compile Include="Interfaces\ISymbolicDataAnalysisAnalyzer.cs" /> 128 <Compile Include="S ingleObjectiveSymbolicDataAnalysisProblem.cs" />129 <Compile Include="SymbolicDataAnalysisSingleObjectiveProblem.cs" /> 129 130 <Compile Include="SymbolicDataAnalysisSolution.cs" /> 130 131 <Compile Include="SymbolicDataAnalysisExpressionTreeInterpreter.cs" /> 131 132 <Compile Include="SymbolicDataAnalysisExpressionTreeSimplifier.cs" /> 132 133 <Compile Include="SymbolicDataAnalysisProblem.cs" /> 134 <Compile Include="SymbolicDataAnalysisSolutionCreator.cs" /> 133 135 <Compile Include="Symbols\Addition.cs" /> 134 136 <Compile Include="Symbols\And.cs" /> -
branches/DataAnalysis Refactoring/HeuristicLab.Problems.DataAnalysis.Symbolic/3.4/Interfaces/ISymbolicDataAnalysisEvaluator.cs
r5577 r5618 27 27 where T : class,IDataAnalysisProblemData { 28 28 ILookupParameter<ISymbolicExpressionTree> SymbolicExpressionTreeParameter { get; } 29 I ValueLookupParameter<IntValue> SamplesStartParameter { get; }30 I ValueLookupParameter<IntValue> SamplesEndParameter { get; }29 IFixedValueParameter<IntValue> SamplesStartParameter { get; } 30 IFixedValueParameter<IntValue> SamplesEndParameter { get; } 31 31 32 32 IValueLookupParameter<T> ProblemDataParameter { get; } -
branches/DataAnalysis Refactoring/HeuristicLab.Problems.DataAnalysis.Symbolic/3.4/Interfaces/ISymbolicDataAnalysisSolutionCreator.cs
r5577 r5618 20 20 #endregion 21 21 22 using HeuristicLab.Core;23 22 using HeuristicLab.Encodings.SymbolicExpressionTreeEncoding; 24 23 using HeuristicLab.Optimization; 25 24 namespace HeuristicLab.Problems.DataAnalysis.Symbolic { 26 25 public interface ISymbolicDataAnalysisSolutionCreator : ISymbolicExpressionTreeCreator, ISolutionCreator { 27 IParameter ProblemDataParameter { get; }28 IDataAnalysisProblemData ProblemData { get; }29 26 } 30 27 } -
branches/DataAnalysis Refactoring/HeuristicLab.Problems.DataAnalysis.Symbolic/3.4/SymbolicDataAnalysisMultiObjectiveProblem.cs
r5598 r5618 20 20 #endregion 21 21 22 using System.Linq; 22 23 using HeuristicLab.Common; 23 24 using HeuristicLab.Core; … … 29 30 namespace HeuristicLab.Problems.DataAnalysis.Symbolic { 30 31 [StorableClass] 31 public abstract class MultiObjectiveSymbolicDataAnalysisProblem<T, U, V> : SymbolicDataAnalysisProblem<T, U, V>, IMultiObjectiveHeuristicOptimizationProblem32 public abstract class SymbolicDataAnalysisMultiObjectiveProblem<T, U, V> : SymbolicDataAnalysisProblem<T, U, V>, IMultiObjectiveHeuristicOptimizationProblem 32 33 where T : class,IDataAnalysisProblemData 33 where U : class, ISymbolicDataAnalysis Evaluator<T>, IMultiObjectiveEvaluator34 where U : class, ISymbolicDataAnalysisMultiObjectiveEvaluator<T> 34 35 where V : class, ISymbolicDataAnalysisSolutionCreator { 35 36 private const string MaximizationParameterName = "Maximization"; … … 37 38 38 39 #region parameter properties 39 public ValueParameter<BoolArray> MaximizationParameter {40 get { return ( ValueParameter<BoolArray>)Parameters[MaximizationParameterName]; }40 public IValueParameter<BoolArray> MaximizationParameter { 41 get { return (IValueParameter<BoolArray>)Parameters[MaximizationParameterName]; } 41 42 } 42 43 IParameter IMultiObjectiveHeuristicOptimizationProblem.MaximizationParameter { … … 48 49 public BoolArray Maximization { 49 50 get { return MaximizationParameter.Value; } 50 protectedset { MaximizationParameter.Value = value; }51 set { MaximizationParameter.Value = value; } 51 52 } 52 53 IMultiObjectiveEvaluator IMultiObjectiveHeuristicOptimizationProblem.Evaluator { … … 56 57 57 58 [StorableConstructor] 58 protected MultiObjectiveSymbolicDataAnalysisProblem(bool deserializing) : base(deserializing) { }59 protected MultiObjectiveSymbolicDataAnalysisProblem(MultiObjectiveSymbolicDataAnalysisProblem<T, U, V> original, Cloner cloner) : base(original, cloner) { }59 protected SymbolicDataAnalysisMultiObjectiveProblem(bool deserializing) : base(deserializing) { } 60 protected SymbolicDataAnalysisMultiObjectiveProblem(SymbolicDataAnalysisMultiObjectiveProblem<T, U, V> original, Cloner cloner) : base(original, cloner) { } 60 61 61 public MultiObjectiveSymbolicDataAnalysisProblem()62 : base( ) {62 public SymbolicDataAnalysisMultiObjectiveProblem(T problemData, U evaluator, V solutionCreator) 63 : base(problemData, evaluator, solutionCreator) { 63 64 Parameters.Add(new ValueParameter<BoolArray>(MaximizationParameterName, "Set to false if the problem should be minimized.")); 65 } 66 67 protected override void OnEvaluatorChanged() { 68 base.OnEvaluatorChanged(); 69 Maximization = new BoolArray(Evaluator.Maximization.ToArray()); 64 70 } 65 71 } -
branches/DataAnalysis Refactoring/HeuristicLab.Problems.DataAnalysis.Symbolic/3.4/SymbolicDataAnalysisProblem.cs
r5580 r5618 22 22 using System; 23 23 using System.Drawing; 24 using System.Linq; 24 25 using HeuristicLab.Common; 25 26 using HeuristicLab.Common.Resources; 26 27 using HeuristicLab.Core; 27 28 using HeuristicLab.Data; 29 using HeuristicLab.Encodings.SymbolicExpressionTreeEncoding; 28 30 using HeuristicLab.Optimization; 29 31 using HeuristicLab.Parameters; 30 32 using HeuristicLab.Persistence.Default.CompositeSerializers.Storable; 33 using HeuristicLab.PluginInfrastructure; 34 35 //TODO configure training start / end 36 //TODO configure analyzer validation 37 //TODO configure grammar with ADF usage 31 38 32 39 namespace HeuristicLab.Problems.DataAnalysis.Symbolic { … … 71 78 get { return (IValueParameter<ISymbolicDataAnalysisTreeInterpreter>)Parameters[SymbolicExpressionTreeInterpreterParameterName]; } 72 79 } 73 public I ValueParameter<DoubleValue> LowerEstimationLimitParameter {74 get { return (I ValueParameter<DoubleValue>)Parameters[LowerEstimationLimitParameterName]; }75 } 76 public I ValueParameter<DoubleValue> UpperEstimationLimitParameter {77 get { return (I ValueParameter<DoubleValue>)Parameters[UpperEstimationLimitParameterName]; }78 } 79 public I ValueParameter<IntValue> MaximumSymbolicExpressionTreeDepthParameter {80 get { return (I ValueParameter<IntValue>)Parameters[MaximumSymbolicExpressionTreeDepthParameterName]; }81 } 82 public I ValueParameter<IntValue> MaximumSymbolicExpressionTreeLengthParameter {83 get { return (I ValueParameter<IntValue>)Parameters[MaximumSymbolicExpressionTreeLengthParameterName]; }84 } 85 public I ValueParameter<IntValue> MaximumFunctionDefinitionsParameter {86 get { return (I ValueParameter<IntValue>)Parameters[MaximumFunctionDefinitionsParameterName]; }87 } 88 public I ValueParameter<IntValue> MaximumFunctionArgumentsParameter {89 get { return (I ValueParameter<IntValue>)Parameters[MaximumFunctionArgumentsParameterName]; }80 public IFixedValueParameter<DoubleValue> LowerEstimationLimitParameter { 81 get { return (IFixedValueParameter<DoubleValue>)Parameters[LowerEstimationLimitParameterName]; } 82 } 83 public IFixedValueParameter<DoubleValue> UpperEstimationLimitParameter { 84 get { return (IFixedValueParameter<DoubleValue>)Parameters[UpperEstimationLimitParameterName]; } 85 } 86 public IFixedValueParameter<IntValue> MaximumSymbolicExpressionTreeDepthParameter { 87 get { return (IFixedValueParameter<IntValue>)Parameters[MaximumSymbolicExpressionTreeDepthParameterName]; } 88 } 89 public IFixedValueParameter<IntValue> MaximumSymbolicExpressionTreeLengthParameter { 90 get { return (IFixedValueParameter<IntValue>)Parameters[MaximumSymbolicExpressionTreeLengthParameterName]; } 91 } 92 public IFixedValueParameter<IntValue> MaximumFunctionDefinitionsParameter { 93 get { return (IFixedValueParameter<IntValue>)Parameters[MaximumFunctionDefinitionsParameterName]; } 94 } 95 public IFixedValueParameter<IntValue> MaximumFunctionArgumentsParameter { 96 get { return (IFixedValueParameter<IntValue>)Parameters[MaximumFunctionArgumentsParameterName]; } 90 97 } 91 98 #endregion … … 100 107 public T ProblemData { 101 108 get { return ProblemDataParameter.Value; } 109 set { ProblemDataParameter.Value = value; } 102 110 } 103 111 104 112 public ISymbolicDataAnalysisGrammar SymbolicExpressionTreeGrammar { 105 113 get { return SymbolicExpressionTreeGrammarParameter.Value; } 106 protectedset { SymbolicExpressionTreeGrammarParameter.Value = value; }114 set { SymbolicExpressionTreeGrammarParameter.Value = value; } 107 115 } 108 116 public ISymbolicDataAnalysisTreeInterpreter SymbolicExpressionTreeInterpreter { 109 117 get { return SymbolicExpressionTreeInterpreterParameter.Value; } 110 protectedset { SymbolicExpressionTreeInterpreterParameter.Value = value; }118 set { SymbolicExpressionTreeInterpreterParameter.Value = value; } 111 119 } 112 120 … … 128 136 } 129 137 public IntValue MaximumFunctionArguments { 130 get { return MaximumFunctionArguments ; }138 get { return MaximumFunctionArgumentsParameter.Value; } 131 139 } 132 140 #endregion … … 134 142 [StorableConstructor] 135 143 protected SymbolicDataAnalysisProblem(bool deserializing) : base(deserializing) { } 136 protected SymbolicDataAnalysisProblem(SymbolicDataAnalysisProblem<T, U, V> original, Cloner cloner) : base(original, cloner) { } 137 138 protected SymbolicDataAnalysisProblem() 139 : base() { 140 Parameters.Add(new ValueParameter<T>(ProblemDataParameterName, ProblemDataParameterDescription)); 144 [StorableHook(HookType.AfterDeserialization)] 145 private void AfterDeserialization() { 146 RegisterEventHandlers(); 147 } 148 protected SymbolicDataAnalysisProblem(SymbolicDataAnalysisProblem<T, U, V> original, Cloner cloner) 149 : base(original, cloner) { 150 RegisterEventHandlers(); 151 } 152 153 protected SymbolicDataAnalysisProblem(T problemData, U evaluator, V solutionCreator) 154 : base(evaluator, solutionCreator) { 155 Parameters.Add(new ValueParameter<T>(ProblemDataParameterName, ProblemDataParameterDescription, problemData)); 141 156 Parameters.Add(new ValueParameter<ISymbolicDataAnalysisGrammar>(SymbolicExpressionTreeGrammarParameterName, SymbolicExpressionTreeGrammarParameterDescription)); 142 157 Parameters.Add(new ValueParameter<ISymbolicDataAnalysisTreeInterpreter>(SymbolicExpressionTreeInterpreterParameterName, SymoblicExpressionTreeInterpreterParameterDescription)); 143 Parameters.Add(new ValueParameter<DoubleValue>(LowerEstimationLimitParameterName, LowerEstimationLimitParameterDescription)); 144 Parameters.Add(new ValueParameter<DoubleValue>(UpperEstimationLimitParameterName, UpperEstimationLimitParameterDescription)); 145 Parameters.Add(new ValueParameter<IntValue>(MaximumSymbolicExpressionTreeDepthParameterName, MaximumSymbolicExpressionTreeDepthParameterDescription)); 146 Parameters.Add(new ValueParameter<IntValue>(MaximumSymbolicExpressionTreeLengthParameterName, MaximumSymbolicExpressionTreeLengthParameterDescription)); 147 Parameters.Add(new ValueParameter<IntValue>(MaximumFunctionDefinitionsParameterName, MaximumFunctionDefinitionsParameterDescription)); 148 Parameters.Add(new ValueParameter<IntValue>(MaximumFunctionArgumentsParameterName, MaximumFunctionArgumentsParameterDescription)); 158 Parameters.Add(new FixedValueParameter<DoubleValue>(LowerEstimationLimitParameterName, LowerEstimationLimitParameterDescription, new DoubleValue())); 159 Parameters.Add(new FixedValueParameter<DoubleValue>(UpperEstimationLimitParameterName, UpperEstimationLimitParameterDescription, new DoubleValue())); 160 Parameters.Add(new FixedValueParameter<IntValue>(MaximumSymbolicExpressionTreeDepthParameterName, MaximumSymbolicExpressionTreeDepthParameterDescription, new IntValue())); 161 Parameters.Add(new FixedValueParameter<IntValue>(MaximumSymbolicExpressionTreeLengthParameterName, MaximumSymbolicExpressionTreeLengthParameterDescription, new IntValue())); 162 Parameters.Add(new FixedValueParameter<IntValue>(MaximumFunctionDefinitionsParameterName, MaximumFunctionDefinitionsParameterDescription, new IntValue())); 163 Parameters.Add(new FixedValueParameter<IntValue>(MaximumFunctionArgumentsParameterName, MaximumFunctionArgumentsParameterDescription, new IntValue())); 164 165 SymbolicExpressionTreeGrammar = new TypeCoherentExpressionGrammar(); 166 SymbolicExpressionTreeInterpreter = new SymbolicDataAnalysisExpressionTreeInterpreter(); 167 168 UpdateGrammar(); 169 UpdateEstimationLimits(); 170 RegisterEventHandlers(); 171 InitializeOperators(); 172 } 173 174 protected abstract void UpdateEstimationLimits(); 175 176 private void InitializeOperators() { 177 Operators.AddRange(ApplicationManager.Manager.GetInstances<ISymbolicExpressionTreeOperator>()); 178 Operators.Add(new SymbolicExpressionSymbolFrequencyAnalyzer()); 179 Operators.Add(new MinAverageMaxSymbolicExpressionTreeLengthAnalyzer()); 180 ParameterizeOperators(); 181 } 182 183 private void ProblemDataParameter_ValueChanged(object sender, EventArgs e) { 184 ProblemDataParameter.Value.Changed += (object s, EventArgs args) => OnProblemDataChanged(); 185 186 OnProblemDataChanged(); 187 } 188 private void RegisterEventHandlers() { 189 ProblemDataParameter.ValueChanged += new EventHandler(ProblemDataParameter_ValueChanged); 190 ProblemDataParameter.Value.Changed += (object sender, EventArgs e) => OnProblemDataChanged(); 191 192 MaximumFunctionArguments.ValueChanged += new EventHandler(ArchitectureParameterValue_ValueChanged); 193 MaximumFunctionDefinitions.ValueChanged += new EventHandler(ArchitectureParameterValue_ValueChanged); 194 MaximumSymbolicExpressionTreeDepth.ValueChanged += new EventHandler(MaximumSymbolicExpressionTreeDepth_ValueChanged); 195 } 196 197 private void ArchitectureParameterValue_ValueChanged(object sender, EventArgs e) { 198 UpdateGrammar(); 199 } 200 protected virtual void UpdateGrammar() { 201 foreach (var varSymbol in SymbolicExpressionTreeGrammar.Symbols.OfType<HeuristicLab.Problems.DataAnalysis.Symbolic.Variable>()) { 202 varSymbol.VariableNames = ProblemData.AllowedInputVariables; 203 } 204 foreach (var varSymbol in SymbolicExpressionTreeGrammar.Symbols.OfType<HeuristicLab.Problems.DataAnalysis.Symbolic.VariableCondition>()) { 205 varSymbol.VariableNames = ProblemData.AllowedInputVariables; 206 } 207 } 208 209 private void MaximumSymbolicExpressionTreeDepth_ValueChanged(object sender, EventArgs e) { 210 if (MaximumSymbolicExpressionTreeDepth != null && MaximumSymbolicExpressionTreeDepth.Value < 3) 211 MaximumSymbolicExpressionTreeDepth.Value = 3; 212 } 213 214 protected override void OnSolutionCreatorChanged() { 215 base.OnSolutionCreatorChanged(); 216 SolutionCreator.SymbolicExpressionTreeParameter.ActualNameChanged += new EventHandler(SolutionCreator_SymbolicExpressionTreeParameter_ActualNameChanged); 217 ParameterizeOperators(); 218 } 219 private void SolutionCreator_SymbolicExpressionTreeParameter_ActualNameChanged(object sender, EventArgs e) { 220 ParameterizeOperators(); 221 } 222 223 protected override void OnEvaluatorChanged() { 224 base.OnEvaluatorChanged(); 149 225 } 150 226 151 227 public event EventHandler ProblemDataChanged; 152 228 protected virtual void OnProblemDataChanged() { 229 UpdateGrammar(); 230 UpdateEstimationLimits(); 153 231 var handler = ProblemDataChanged; 154 232 if (handler != null) handler(this, EventArgs.Empty); 233 234 OnReset(); 235 } 236 237 private void ParameterizeOperators() { 238 var operators = Parameters.OfType<IValueParameter>().Select(p => p.Value).OfType<IOperator>().Union(Operators); 239 240 foreach (var op in operators.OfType<ISymbolicExpressionTreeGrammarBasedOperator>()) { 241 op.SymbolicExpressionTreeGrammarParameter.ActualName = SymbolicExpressionTreeGrammarParameter.Name; 242 } 243 foreach (var op in operators.OfType<ISymbolicExpressionTreeSizeConstraintOperator>()) { 244 op.MaximumSymbolicExpressionTreeDepthParameter.ActualName = MaximumSymbolicExpressionTreeDepthParameter.Name; 245 op.MaximumSymbolicExpressionTreeLengthParameter.ActualName = MaximumSymbolicExpressionTreeLengthParameter.Name; 246 } 247 foreach (var op in operators.OfType<ISymbolicExpressionTreeArchitectureAlteringOperator>()) { 248 op.MaximumFunctionArgumentsParameter.ActualName = MaximumFunctionArgumentsParameter.Name; 249 op.MaximumFunctionDefinitionsParameter.ActualName = MaximumFunctionDefinitionsParameter.Name; 250 } 251 foreach (var op in operators.OfType<ISymbolicDataAnalysisEvaluator<T>>()) { 252 op.ProblemDataParameter.ActualName = ProblemDataParameter.Name; 253 op.SymbolicExpressionTreeParameter.ActualName = SolutionCreator.SymbolicExpressionTreeParameter.ActualName; 254 op.SamplesStartParameter.Value.Value = ProblemData.TrainingPartitionStart.Value; 255 op.SamplesEndParameter.Value.Value = ProblemData.TrainingPartitionEnd.Value; 256 } 257 foreach (var op in operators.OfType<ISymbolicDataAnalysisBoundedEvaluator<T>>()) { 258 op.LowerEstimationLimitParameter.ActualName = LowerEstimationLimitParameter.Name; 259 op.UpperEstimationLimitParameter.ActualName = UpperEstimationLimitParameter.Name; 260 } 261 foreach (var op in operators.OfType<ISymbolicExpressionTreeCrossover>()) { 262 op.ParentsParameter.ActualName = SolutionCreator.SymbolicExpressionTreeParameter.ActualName; 263 op.ChildParameter.ActualName = SolutionCreator.SymbolicExpressionTreeParameter.ActualName; 264 } 265 foreach (var op in operators.OfType<ISymbolicExpressionTreeManipulator>()) { 266 op.SymbolicExpressionTreeParameter.ActualName = SolutionCreator.SymbolicExpressionTreeParameter.ActualName; 267 } 268 foreach (var op in operators.OfType<ISymbolicExpressionTreeAnalyzer>()) { 269 op.SymbolicExpressionTreeParameter.ActualName = SolutionCreator.SymbolicExpressionTreeParameter.ActualName; 270 } 155 271 } 156 272 } -
branches/DataAnalysis Refactoring/HeuristicLab.Problems.DataAnalysis.Symbolic/3.4/SymbolicDataAnalysisSingleObjectiveProblem.cs
r5598 r5618 29 29 namespace HeuristicLab.Problems.DataAnalysis.Symbolic { 30 30 [StorableClass] 31 public abstract class S ingleObjectiveSymbolicDataAnalysisProblem<T, U, V> : SymbolicDataAnalysisProblem<T, U, V>, ISingleObjectiveHeuristicOptimizationProblem31 public abstract class SymbolicDataAnalysisSingleObjectiveProblem<T, U, V> : SymbolicDataAnalysisProblem<T, U, V>, ISingleObjectiveHeuristicOptimizationProblem 32 32 where T : class,IDataAnalysisProblemData 33 where U : class, ISymbolicDataAnalysis Evaluator<T>, ISingleObjectiveEvaluator33 where U : class, ISymbolicDataAnalysisSingleObjectiveEvaluator<T> 34 34 where V : class, ISymbolicDataAnalysisSolutionCreator { 35 35 private const string MaximizationParameterName = "Maximization"; … … 37 37 38 38 #region parameter properties 39 public ValueParameter<BoolValue> MaximizationParameter {40 get { return ( ValueParameter<BoolValue>)Parameters[MaximizationParameterName]; }39 public IFixedValueParameter<BoolValue> MaximizationParameter { 40 get { return (IFixedValueParameter<BoolValue>)Parameters[MaximizationParameterName]; } 41 41 } 42 42 IParameter ISingleObjectiveHeuristicOptimizationProblem.MaximizationParameter { 43 43 get { return MaximizationParameter; } 44 44 } 45 public ValueParameter<DoubleValue> BestKnownQualityParameter {46 get { return ( ValueParameter<DoubleValue>)Parameters[BestKnownQualityParameterName]; }45 public IFixedValueParameter<DoubleValue> BestKnownQualityParameter { 46 get { return (IFixedValueParameter<DoubleValue>)Parameters[BestKnownQualityParameterName]; } 47 47 } 48 48 IParameter ISingleObjectiveHeuristicOptimizationProblem.BestKnownQualityParameter { … … 54 54 public BoolValue Maximization { 55 55 get { return MaximizationParameter.Value; } 56 protected set { MaximizationParameter.Value = value; }57 56 } 58 57 public DoubleValue BestKnownQuality { 59 58 get { return BestKnownQualityParameter.Value; } 60 protected set { BestKnownQualityParameter.Value = value; }61 59 } 62 60 ISingleObjectiveEvaluator ISingleObjectiveHeuristicOptimizationProblem.Evaluator { … … 66 64 67 65 [StorableConstructor] 68 protected S ingleObjectiveSymbolicDataAnalysisProblem(bool deserializing) : base(deserializing) { }69 protected S ingleObjectiveSymbolicDataAnalysisProblem(SingleObjectiveSymbolicDataAnalysisProblem<T, U, V> original, Cloner cloner) : base(original, cloner) { }66 protected SymbolicDataAnalysisSingleObjectiveProblem(bool deserializing) : base(deserializing) { } 67 protected SymbolicDataAnalysisSingleObjectiveProblem(SymbolicDataAnalysisSingleObjectiveProblem<T, U, V> original, Cloner cloner) : base(original, cloner) { } 70 68 71 public SingleObjectiveSymbolicDataAnalysisProblem() 72 : base() { 73 Parameters.Add(new ValueParameter<BoolValue>(MaximizationParameterName, "Set to false if the problem should be minimized.")); 74 Parameters.Add(new ValueParameter<DoubleValue>(BestKnownQualityParameterName, "The quality of the best known solution of this problem.")); 69 public SymbolicDataAnalysisSingleObjectiveProblem(T problemData, U evaluator, V solutionCreator) 70 : base(problemData, evaluator, solutionCreator) { 71 Parameters.Add(new FixedValueParameter<BoolValue>(MaximizationParameterName, "Set to false if the problem should be minimized.", new BoolValue())); 72 Parameters.Add(new FixedValueParameter<DoubleValue>(BestKnownQualityParameterName, "The quality of the best known solution of this problem.", new DoubleValue())); 73 } 74 75 protected override void OnEvaluatorChanged() { 76 base.OnEvaluatorChanged(); 77 Maximization.Value = base.Evaluator.Maximization; 75 78 } 76 79 } -
branches/DataAnalysis Refactoring/HeuristicLab.Problems.DataAnalysis/3.4/Interfaces/IDataAnalysisProblem.cs
r5578 r5618 20 20 #endregion 21 21 22 using System;23 22 using HeuristicLab.Core; 24 23 using HeuristicLab.Optimization; … … 28 27 IParameter ProblemDataParameter { get; } 29 28 IDataAnalysisProblemData ProblemData { get; } 30 event EventHandler ProblemDataChanged;31 29 } 32 30
Note: See TracChangeset
for help on using the changeset viewer.