Changeset 16988 for branches/2925_AutoDiffForDynamicalModels/HeuristicLab.Problems.DataAnalysis.Symbolic/3.4/Crossovers
- Timestamp:
- 05/25/19 08:43:16 (6 years ago)
- Location:
- branches/2925_AutoDiffForDynamicalModels
- Files:
-
- 3 edited
Legend:
- Unmodified
- Added
- Removed
-
branches/2925_AutoDiffForDynamicalModels
- Property svn:mergeinfo changed
-
branches/2925_AutoDiffForDynamicalModels/HeuristicLab.Problems.DataAnalysis.Symbolic
- Property svn:mergeinfo changed
/trunk/HeuristicLab.Problems.DataAnalysis.Symbolic merged: 16905,16978-16981,16983
- Property svn:mergeinfo changed
-
branches/2925_AutoDiffForDynamicalModels/HeuristicLab.Problems.DataAnalysis.Symbolic/3.4/Crossovers/SymbolicDataAnalysisExpressionDiversityPreservingCrossover.cs
r16662 r16988 1 using System; 1 #region License Information 2 /* HeuristicLab 3 * Copyright (C) 2002-2019 Heuristic and Evolutionary Algorithms Laboratory (HEAL) 4 * 5 * This file is part of HeuristicLab. 6 * 7 * HeuristicLab is free software: you can redistribute it and/or modify 8 * it under the terms of the GNU General Public License as published by 9 * the Free Software Foundation, either version 3 of the License, or 10 * (at your option) any later version. 11 * 12 * HeuristicLab is distributed in the hope that it will be useful, 13 * but WITHOUT ANY WARRANTY; without even the implied warranty of 14 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the 15 * GNU General Public License for more details. 16 * 17 * You should have received a copy of the GNU General Public License 18 * along with HeuristicLab. If not, see <http://www.gnu.org/licenses/>. 19 */ 20 #endregion 21 22 using System; 2 23 using System.Collections.Generic; 3 24 using System.Linq; 4 25 using HEAL.Attic; 5 26 using HeuristicLab.Common; 6 27 using HeuristicLab.Core; … … 8 29 using HeuristicLab.Encodings.SymbolicExpressionTreeEncoding; 9 30 using HeuristicLab.Parameters; 10 using HEAL.Attic;11 31 using HeuristicLab.Random; 12 32 using static HeuristicLab.Problems.DataAnalysis.Symbolic.SymbolicExpressionHashExtensions; 13 33 14 34 namespace HeuristicLab.Problems.DataAnalysis.Symbolic { 15 [Item("DiversityCrossover", "Simple crossover operator pr ioritizing internal nodes according to the given probability.")]35 [Item("DiversityCrossover", "Simple crossover operator preventing swap between subtrees with the same hash value.")] 16 36 [StorableType("ED35B0D9-9704-4D32-B10B-8F9870E76781")] 17 37 public sealed class SymbolicDataAnalysisExpressionDiversityPreservingCrossover<T> : SymbolicDataAnalysisExpressionCrossover<T> where T : class, IDataAnalysisProblemData { … … 20 40 private const string WindowingParameterName = "Windowing"; 21 41 private const string ProportionalSamplingParameterName = "ProportionalSampling"; 42 private const string StrictHashingParameterName = "StrictHashing"; 22 43 23 44 private static readonly Func<byte[], ulong> hashFunction = HashUtil.JSHash; … … 35 56 get { return (IValueLookupParameter<BoolValue>)Parameters[ProportionalSamplingParameterName]; } 36 57 } 58 59 public IFixedValueParameter<BoolValue> StrictHashingParameter { 60 get { return (IFixedValueParameter<BoolValue>)Parameters[StrictHashingParameterName]; } 61 } 37 62 #endregion 38 63 … … 49 74 get { return ProportionalSamplingParameter.ActualValue; } 50 75 } 76 77 bool StrictHashing { 78 get { return StrictHashingParameter.Value.Value; } 79 } 51 80 #endregion 81 82 83 [StorableHook(HookType.AfterDeserialization)] 84 private void AfterDeserialization() { 85 if (!Parameters.ContainsKey(StrictHashingParameterName)) { 86 Parameters.Add(new FixedValueParameter<BoolValue>(StrictHashingParameterName, "Use strict hashing when calculating subtree hash values.")); 87 } 88 } 52 89 53 90 public SymbolicDataAnalysisExpressionDiversityPreservingCrossover() { … … 56 93 Parameters.Add(new ValueLookupParameter<BoolValue>(WindowingParameterName, "Use proportional sampling with windowing for cutpoint selection.", new BoolValue(false))); 57 94 Parameters.Add(new ValueLookupParameter<BoolValue>(ProportionalSamplingParameterName, "Select cutpoints proportionally using probabilities as weights instead of randomly.", new BoolValue(true))); 95 Parameters.Add(new FixedValueParameter<BoolValue>(StrictHashingParameterName, "Use strict hashing when calculating subtree hash values.")); 58 96 } 59 97 … … 72 110 } 73 111 74 public static ISymbolicExpressionTree Cross(IRandom random, ISymbolicExpressionTree parent0, ISymbolicExpressionTree parent1, double internalCrossoverPointProbability, int maxLength, int maxDepth, bool windowing, bool proportionalSampling = false) { 75 var leafCrossoverPointProbability = 1 - internalCrossoverPointProbability; 76 77 var nodes0 = ActualRoot(parent0).MakeNodes().Sort(hashFunction); 78 var nodes1 = ActualRoot(parent1).MakeNodes().Sort(hashFunction); 112 public static ISymbolicExpressionTree Cross(IRandom random, ISymbolicExpressionTree parent0, ISymbolicExpressionTree parent1, double internalCrossoverPointProbability, int maxLength, int maxDepth, bool windowing, bool proportionalSampling = false, bool strictHashing = false) { 113 var nodes0 = ActualRoot(parent0).MakeNodes(strictHashing).Sort(hashFunction); 114 var nodes1 = ActualRoot(parent1).MakeNodes(strictHashing).Sort(hashFunction); 79 115 80 116 IList<HashNode<ISymbolicExpressionTreeNode>> sampled0; … … 126 162 var proportionalSampling = ProportionalSampling.Value; 127 163 128 return Cross(random, parent0, parent1, internalCrossoverPointProbability, maxLength, maxDepth, windowing, proportionalSampling );164 return Cross(random, parent0, parent1, internalCrossoverPointProbability, maxLength, maxDepth, windowing, proportionalSampling, StrictHashing); 129 165 } 130 166
Note: See TracChangeset
for help on using the changeset viewer.