Changeset 18113 for branches/3140_NumberSymbol/HeuristicLab.Problems.DataAnalysis.Symbolic.Regression/3.4/SingleObjective/ParameterOptimizationAnalyzer.cs
- Timestamp:
- 12/11/21 12:26:27 (2 years ago)
- File:
-
- 1 moved
Legend:
- Unmodified
- Added
- Removed
-
branches/3140_NumberSymbol/HeuristicLab.Problems.DataAnalysis.Symbolic.Regression/3.4/SingleObjective/ParameterOptimizationAnalyzer.cs
r18112 r18113 32 32 namespace HeuristicLab.Problems.DataAnalysis.Symbolic.Regression { 33 33 /// <summary> 34 /// An operator that optimizes the constants for the best symbolic expression tress in the current generation.34 /// An operator that optimizes the parameters for the best symbolic expression tress in the current generation. 35 35 /// </summary> 36 [Item(" ConstantOptimizationAnalyzer", "An operator that performs a constantoptimization on the best symbolic expression trees.")]36 [Item("ParameterOptimizationAnalyzer", "An operator that performs a parameter optimization on the best symbolic expression trees.")] 37 37 [StorableType("9FB87E7B-A9E2-49DD-A92A-78BD9FC17916")] 38 public sealed class ConstantOptimizationAnalyzer : SymbolicDataAnalysisSingleObjectiveAnalyzer, IStatefulItem {38 public sealed class ParameterOptimizationAnalyzer : SymbolicDataAnalysisSingleObjectiveAnalyzer, IStatefulItem { 39 39 private const string PercentageOfBestSolutionsParameterName = "PercentageOfBestSolutions"; 40 private const string ConstantOptimizationEvaluatorParameterName = "ConstantOptimizationOperator";40 private const string ParameterOptimizationEvaluatorParameterName = "ParameterOptimizationOperator"; 41 41 42 private const string DataTableName ConstantOptimizationImprovement = "ConstantOptimization Improvement";42 private const string DataTableNameParameterOptimizationImprovement = "Parameter Optimization Improvement"; 43 43 private const string DataRowNameMinimumImprovement = "Minimum improvement"; 44 44 private const string DataRowNameMedianImprovement = "Median improvement"; … … 51 51 } 52 52 53 public IFixedValueParameter<SymbolicRegression ConstantOptimizationEvaluator> ConstantOptimizationEvaluatorParameter {54 get { return (IFixedValueParameter<SymbolicRegression ConstantOptimizationEvaluator>)Parameters[ConstantOptimizationEvaluatorParameterName]; }53 public IFixedValueParameter<SymbolicRegressionParameterOptimizationEvaluator> ParameterOptimizationEvaluatorParameter { 54 get { return (IFixedValueParameter<SymbolicRegressionParameterOptimizationEvaluator>)Parameters[ParameterOptimizationEvaluatorParameterName]; } 55 55 } 56 56 #endregion 57 57 58 58 #region properties 59 public SymbolicRegression ConstantOptimizationEvaluator ConstantOptimizationEvaluator {60 get { return ConstantOptimizationEvaluatorParameter.Value; }59 public SymbolicRegressionParameterOptimizationEvaluator ParameterOptimizationEvaluator { 60 get { return ParameterOptimizationEvaluatorParameter.Value; } 61 61 } 62 62 public double PercentageOfBestSolutions { … … 64 64 } 65 65 66 private DataTable ConstantOptimizationImprovementDataTable {66 private DataTable ParameterOptimizationImprovementDataTable { 67 67 get { 68 68 IResult result; 69 ResultCollection.TryGetValue(DataTableName ConstantOptimizationImprovement, out result);69 ResultCollection.TryGetValue(DataTableNameParameterOptimizationImprovement, out result); 70 70 if (result == null) return null; 71 71 return (DataTable)result.Value; … … 73 73 } 74 74 private DataRow MinimumImprovement { 75 get { return ConstantOptimizationImprovementDataTable.Rows[DataRowNameMinimumImprovement]; }75 get { return ParameterOptimizationImprovementDataTable.Rows[DataRowNameMinimumImprovement]; } 76 76 } 77 77 private DataRow MedianImprovement { 78 get { return ConstantOptimizationImprovementDataTable.Rows[DataRowNameMedianImprovement]; }78 get { return ParameterOptimizationImprovementDataTable.Rows[DataRowNameMedianImprovement]; } 79 79 } 80 80 private DataRow AverageImprovement { 81 get { return ConstantOptimizationImprovementDataTable.Rows[DataRowNameAverageImprovement]; }81 get { return ParameterOptimizationImprovementDataTable.Rows[DataRowNameAverageImprovement]; } 82 82 } 83 83 private DataRow MaximumImprovement { 84 get { return ConstantOptimizationImprovementDataTable.Rows[DataRowNameMaximumImprovement]; }84 get { return ParameterOptimizationImprovementDataTable.Rows[DataRowNameMaximumImprovement]; } 85 85 } 86 86 #endregion 87 87 88 88 [StorableConstructor] 89 private ConstantOptimizationAnalyzer(StorableConstructorFlag _) : base(_) { }90 private ConstantOptimizationAnalyzer(ConstantOptimizationAnalyzer original, Cloner cloner) : base(original, cloner) { }91 public override IDeepCloneable Clone(Cloner cloner) { return new ConstantOptimizationAnalyzer(this, cloner); }92 public ConstantOptimizationAnalyzer()89 private ParameterOptimizationAnalyzer(StorableConstructorFlag _) : base(_) { } 90 private ParameterOptimizationAnalyzer(ParameterOptimizationAnalyzer original, Cloner cloner) : base(original, cloner) { } 91 public override IDeepCloneable Clone(Cloner cloner) { return new ParameterOptimizationAnalyzer(this, cloner); } 92 public ParameterOptimizationAnalyzer() 93 93 : base() { 94 94 Parameters.Add(new FixedValueParameter<PercentValue>(PercentageOfBestSolutionsParameterName, "The percentage of the top solutions which should be analyzed.", new PercentValue(0.1))); 95 Parameters.Add(new FixedValueParameter<SymbolicRegression ConstantOptimizationEvaluator>(ConstantOptimizationEvaluatorParameterName, "The operator used to perform the constantoptimization"));95 Parameters.Add(new FixedValueParameter<SymbolicRegressionParameterOptimizationEvaluator>(ParameterOptimizationEvaluatorParameterName, "The operator used to perform the parameter optimization")); 96 96 97 97 //Changed the ActualName of the EvaluationPartitionParameter so that it matches the parameter name of symbolic regression problems. 98 ConstantOptimizationEvaluator.EvaluationPartitionParameter.ActualName = "FitnessCalculationPartition"; 98 ParameterOptimizationEvaluator.EvaluationPartitionParameter.ActualName = "FitnessCalculationPartition"; 99 } 100 101 [StorableHook(HookType.AfterDeserialization)] 102 private void AfterDeserialization() { 103 if (!Parameters.ContainsKey(ParameterOptimizationEvaluatorParameterName)) { 104 if (Parameters.ContainsKey("ConstantOptimizationOperator")) { 105 Parameters.Add(new FixedValueParameter<SymbolicRegressionParameterOptimizationEvaluator>(ParameterOptimizationEvaluatorParameterName, "The operator used to perform the parameter optimization")); 106 Parameters.Remove("ConstantOptimizationOperator"); 107 } else { 108 Parameters.Add(new FixedValueParameter<SymbolicRegressionParameterOptimizationEvaluator>(ParameterOptimizationEvaluatorParameterName, "The operator used to perform the parameter optimization")); 109 } 110 } 99 111 } 100 112 … … 134 146 operationCollection.Parallel = true; 135 147 foreach (var scopeIndex in scopeIndexes) { 136 var childOperation = ExecutionContext.CreateChildOperation( ConstantOptimizationEvaluator, ExecutionContext.Scope.SubScopes[scopeIndex]);148 var childOperation = ExecutionContext.CreateChildOperation(ParameterOptimizationEvaluator, ExecutionContext.Scope.SubScopes[scopeIndex]); 137 149 operationCollection.Add(childOperation); 138 150 } … … 141 153 } 142 154 143 //code executed to analyze results of constantoptimization155 //code executed to analyze results of parameter optimization 144 156 double[] qualitiesAfterCoOp = scopeIndexes.Select(x => Quality[x].Value).ToArray(); 145 157 var qualityImprovement = qualitiesBeforeCoOp.Zip(qualitiesAfterCoOp, (b, a) => a - b).ToArray(); 146 158 147 if (!ResultCollection.ContainsKey(DataTableName ConstantOptimizationImprovement)) {148 var dataTable = new DataTable(DataTableName ConstantOptimizationImprovement);149 ResultCollection.Add(new Result(DataTableName ConstantOptimizationImprovement, dataTable));159 if (!ResultCollection.ContainsKey(DataTableNameParameterOptimizationImprovement)) { 160 var dataTable = new DataTable(DataTableNameParameterOptimizationImprovement); 161 ResultCollection.Add(new Result(DataTableNameParameterOptimizationImprovement, dataTable)); 150 162 dataTable.VisualProperties.YAxisTitle = "R²"; 151 163
Note: See TracChangeset
for help on using the changeset viewer.