Changeset 12952 for branches/HeuristicLab.EvolutionTracking/HeuristicLab.Problems.DataAnalysis.Symbolic/3.4/Tracking/SchemaDiversification/SchemaEvaluator.cs
- Timestamp:
- 09/17/15 00:31:53 (9 years ago)
- File:
-
- 1 edited
Legend:
- Unmodified
- Added
- Removed
-
branches/HeuristicLab.EvolutionTracking/HeuristicLab.Problems.DataAnalysis.Symbolic/3.4/Tracking/SchemaDiversification/SchemaEvaluator.cs
r12951 r12952 35 35 [StorableClass] 36 36 public class SchemaEvaluator : EvolutionTrackingOperator<ISymbolicExpressionTree> { 37 #region parameter names 37 38 private const string MinimumSchemaFrequencyParameterName = "MinimumSchemaFrequency"; 38 39 private const string MinimumPhenotypicSimilarityParameterName = "MinimumPhenotypicSimilarity"; … … 48 49 private const string MutatorParameterName = "Mutator"; 49 50 private const string RandomReplacementParameterName = "RandomReplacement"; 51 private const string ChangedTreesParameterName = "ChangedTrees"; 52 #endregion 53 54 #region parameters 55 public ILookupParameter<ISymbolicDataAnalysisSingleObjectiveEvaluator<IRegressionProblemData>> EvaluatorParameter { 56 get { return (ILookupParameter<ISymbolicDataAnalysisSingleObjectiveEvaluator<IRegressionProblemData>>)Parameters[EvaluatorParameterName]; } 57 } 58 public ILookupParameter<IRegressionProblemData> ProblemDataParameter { 59 get { return (ILookupParameter<IRegressionProblemData>)Parameters[ProblemDataParameterName]; } 60 } 61 public ILookupParameter<ISymbolicDataAnalysisExpressionTreeInterpreter> InterpreterParameter { 62 get { return (ILookupParameter<ISymbolicDataAnalysisExpressionTreeInterpreter>)Parameters[InterpreterParameterName]; } 63 } 64 public ILookupParameter<DoubleLimit> EstimationLimitsParameter { 65 get { return (ILookupParameter<DoubleLimit>)Parameters[EstimationLimitsParameterName]; } 66 } 67 public ILookupParameter<BoolValue> ApplyLinearScalingParameter { 68 get { return (ILookupParameter<BoolValue>)Parameters[ApplyLinearScalingParameterName]; } 69 } 70 public ILookupParameter<BoolValue> RandomReplacementParameter { 71 get { return (ILookupParameter<BoolValue>)Parameters[RandomReplacementParameterName]; } 72 } 73 public ILookupParameter<ISymbolicExpressionTreeManipulator> MutatorParameter { 74 get { return (ILookupParameter<ISymbolicExpressionTreeManipulator>)Parameters[MutatorParameterName]; } 75 } 76 public ILookupParameter<IRandom> RandomParameter { 77 get { return (ILookupParameter<IRandom>)Parameters[RandomParameterName]; } 78 } 79 public ILookupParameter<IntValue> PopulationSizeParameter { 80 get { return (ILookupParameter<IntValue>)Parameters[PopulationSizeParameterName]; } 81 } 82 public ILookupParameter<ISymbolicExpressionTree> SchemaParameter { 83 get { return (ILookupParameter<ISymbolicExpressionTree>)Parameters[SchemaParameterName]; } 84 } 85 public ILookupParameter<PercentValue> MinimumSchemaFrequencyParameter { 86 get { return (ILookupParameter<PercentValue>)Parameters[MinimumSchemaFrequencyParameterName]; } 87 } 88 public ILookupParameter<PercentValue> ReplacementRatioParameter { 89 get { return (ILookupParameter<PercentValue>)Parameters[ReplacementRatioParameterName]; } 90 } 91 public ILookupParameter<PercentValue> MinimumPhenotypicSimilarityParameter { 92 get { return (ILookupParameter<PercentValue>)Parameters[MinimumPhenotypicSimilarityParameterName]; } 93 } 94 public LookupParameter<IntValue> ChangedTreesParameter { 95 get { return (LookupParameter<IntValue>)Parameters[ChangedTreesParameterName]; } 96 } 97 98 #endregion 99 100 #region parameter properties 101 public PercentValue MinimumSchemaFrequency { 102 get { return MinimumSchemaFrequencyParameter.ActualValue; } 103 } 104 105 public PercentValue ReplacementRatio { 106 get { return ReplacementRatioParameter.ActualValue; } 107 } 108 109 public PercentValue MinimumPhenotypicSimilarity { 110 get { return MinimumPhenotypicSimilarityParameter.ActualValue; } 111 } 112 113 public BoolValue RandomReplacement { 114 get { return RandomReplacementParameter.ActualValue; } 115 } 116 #endregion 50 117 51 118 private readonly SymbolicExpressionTreePhenotypicSimilarityCalculator calculator = new SymbolicExpressionTreePhenotypicSimilarityCalculator(); 119 private readonly QueryMatch qm; 52 120 53 121 private readonly ISymbolicExpressionTreeNodeEqualityComparer comp = new SymbolicExpressionTreeNodeEqualityComparer { … … 57 125 }; 58 126 59 private readonly QueryMatch qm; 60 61 #region parameters 62 public ILookupParameter<ISymbolicDataAnalysisSingleObjectiveEvaluator<IRegressionProblemData>> EvaluatorParameter { 63 get { return (ILookupParameter<ISymbolicDataAnalysisSingleObjectiveEvaluator<IRegressionProblemData>>)Parameters[EvaluatorParameterName]; } 64 } 65 public ILookupParameter<IRegressionProblemData> ProblemDataParameter { 66 get { return (ILookupParameter<IRegressionProblemData>)Parameters[ProblemDataParameterName]; } 67 } 68 public ILookupParameter<ISymbolicDataAnalysisExpressionTreeInterpreter> InterpreterParameter { 69 get { return (ILookupParameter<ISymbolicDataAnalysisExpressionTreeInterpreter>)Parameters[InterpreterParameterName]; } 70 } 71 public ILookupParameter<DoubleLimit> EstimationLimitsParameter { 72 get { return (ILookupParameter<DoubleLimit>)Parameters[EstimationLimitsParameterName]; } 73 } 74 public ILookupParameter<BoolValue> ApplyLinearScalingParameter { 75 get { return (ILookupParameter<BoolValue>)Parameters[ApplyLinearScalingParameterName]; } 76 } 77 public ILookupParameter<BoolValue> RandomReplacementParameter { 78 get { return (ILookupParameter<BoolValue>)Parameters[RandomReplacementParameterName]; } 79 } 80 public ILookupParameter<ISymbolicExpressionTreeManipulator> MutatorParameter { 81 get { return (ILookupParameter<ISymbolicExpressionTreeManipulator>)Parameters[MutatorParameterName]; } 82 } 83 public ILookupParameter<IRandom> RandomParameter { 84 get { return (ILookupParameter<IRandom>)Parameters[RandomParameterName]; } 85 } 86 public ILookupParameter<IntValue> PopulationSizeParameter { 87 get { return (ILookupParameter<IntValue>)Parameters[PopulationSizeParameterName]; } 88 } 89 public ILookupParameter<ISymbolicExpressionTree> SchemaParameter { 90 get { return (ILookupParameter<ISymbolicExpressionTree>)Parameters[SchemaParameterName]; } 91 } 92 public ILookupParameter<PercentValue> MinimumSchemaFrequencyParameter { 93 get { return (ILookupParameter<PercentValue>)Parameters[MinimumSchemaFrequencyParameterName]; } 94 } 95 public ILookupParameter<PercentValue> ReplacementRatioParameter { 96 get { return (ILookupParameter<PercentValue>)Parameters[ReplacementRatioParameterName]; } 97 } 98 public ILookupParameter<PercentValue> MinimumPhenotypicSimilarityParameter { 99 get { return (ILookupParameter<PercentValue>)Parameters[MinimumPhenotypicSimilarityParameterName]; } 100 } 101 #endregion 102 103 #region parameter properties 104 public PercentValue MinimumSchemaFrequency { 105 get { return MinimumSchemaFrequencyParameter.ActualValue; } 106 } 107 108 public PercentValue ReplacementRatio { 109 get { return ReplacementRatioParameter.ActualValue; } 110 } 111 112 public PercentValue MinimumPhenotypicSimilarity { 113 get { return MinimumPhenotypicSimilarityParameter.ActualValue; } 114 } 115 116 public BoolValue RandomReplacement { 117 get { return RandomReplacementParameter.ActualValue; } 118 } 119 #endregion 127 128 [StorableHook(HookType.AfterDeserialization)] 129 private void AfterDeserialization() { 130 if (!Parameters.ContainsKey(ChangedTreesParameterName)) 131 Parameters.Add(new LookupParameter<IntValue>(ChangedTreesParameterName)); 132 } 120 133 121 134 public SchemaEvaluator() { … … 135 148 Parameters.Add(new LookupParameter<ISymbolicExpressionTreeManipulator>(MutatorParameterName)); 136 149 Parameters.Add(new LookupParameter<BoolValue>(RandomReplacementParameterName)); 150 Parameters.Add(new LookupParameter<IntValue>(ChangedTreesParameterName)); 137 151 } 138 152 … … 171 185 select ind); 172 186 173 if (matchingIndividuals.Count < MinimumSchemaFrequency.Value * individuals.Count) 187 if (matchingIndividuals.Count < MinimumSchemaFrequency.Value * individuals.Count) { 188 ChangedTreesParameter.ActualValue = new IntValue(0); 174 189 return base.Apply(); 190 } 175 191 176 192 var similarity = CalculatePhenotypicSimilarity(matchingIndividuals, calculator); 177 if (similarity < MinimumPhenotypicSimilarity.Value) 193 if (similarity < MinimumPhenotypicSimilarity.Value) { 194 ChangedTreesParameter.ActualValue = new IntValue(0); 178 195 return base.Apply(); 196 } 179 197 180 198 var oc = new OperationCollection(); 181 182 199 int n = (int)Math.Round(matchingIndividuals.Count * ReplacementRatio.Value); 183 var individualsToReplace = RandomReplacement.Value ? matchingIndividuals.SampleRandomWithoutRepetition(random, n) 184 : matchingIndividuals.OrderBy(x => (DoubleValue)x.Variables["Quality"].Value).Take(n) ;200 var individualsToReplace = RandomReplacement.Value ? matchingIndividuals.SampleRandomWithoutRepetition(random, n).ToList() 201 : matchingIndividuals.OrderBy(x => (DoubleValue)x.Variables["Quality"].Value).Take(n).ToList(); 185 202 foreach (var ind in individualsToReplace) { 186 203 var mutatorOp = ExecutionContext.CreateChildOperation(mutator, ind); … … 191 208 oc.Add(updateEstimatedValuesOp); 192 209 } 193 210 ChangedTreesParameter.ActualValue = new IntValue(individualsToReplace.Count); 194 211 return new OperationCollection(oc, base.Apply()); 195 212 }
Note: See TracChangeset
for help on using the changeset viewer.