Changeset 17726 for branches/3040_VectorBasedGP/HeuristicLab.Problems.DataAnalysis.Symbolic.Regression/3.4
- Timestamp:
- 08/26/20 16:43:25 (5 years ago)
- Location:
- branches/3040_VectorBasedGP/HeuristicLab.Problems.DataAnalysis.Symbolic.Regression/3.4
- Files:
-
- 1 edited
- 1 copied
Legend:
- Unmodified
- Added
- Removed
-
branches/3040_VectorBasedGP/HeuristicLab.Problems.DataAnalysis.Symbolic.Regression/3.4/HeuristicLab.Problems.DataAnalysis.Symbolic.Regression-3.4.csproj
r17502 r17726 141 141 <Compile Include="Plugin.cs" /> 142 142 <Compile Include="SingleObjective\ConstantOptimizationAnalyzer.cs" /> 143 <Compile Include="SingleObjective\Evaluators\VectorUnrollingNonlinearLeastSquaresConstantOptimizationEvaluator.cs" /> 143 144 <Compile Include="SingleObjective\Evaluators\NonlinearLeastSquaresConstantOptimizationEvaluator.cs" /> 144 145 <Compile Include="SingleObjective\Evaluators\SymbolicRegressionMeanRelativeErrorEvaluator.cs" /> -
branches/3040_VectorBasedGP/HeuristicLab.Problems.DataAnalysis.Symbolic.Regression/3.4/SingleObjective/Evaluators/VectorUnrollingNonlinearLeastSquaresConstantOptimizationEvaluator.cs
r17725 r17726 30 30 using HeuristicLab.Parameters; 31 31 using HEAL.Attic; 32 using DoubleVector = MathNet.Numerics.LinearAlgebra.Vector<double>; 32 33 33 34 namespace HeuristicLab.Problems.DataAnalysis.Symbolic.Regression { 34 [StorableType(" 24B68851-036D-4446-BD6F-3823E9028FF4")]35 [Item(" NonlinearLeastSquaresOptimizer", "")]36 public class NonlinearLeastSquaresConstantOptimizationEvaluator : SymbolicRegressionConstantOptimizationEvaluator {35 [StorableType("5F8DB251-C6F7-40AC-BC30-3C55AF655A2F")] 36 [Item("VectorUnrollingNonlinearLeastSquaresConstantOptimizationEvaluator", "")] 37 public class VectorUnrollingNonlinearLeastSquaresConstantOptimizationEvaluator : SymbolicRegressionConstantOptimizationEvaluator { 37 38 38 39 private const string ConstantOptimizationIterationsName = "ConstantOptimizationIterations"; … … 51 52 #endregion 52 53 53 public NonlinearLeastSquaresConstantOptimizationEvaluator()54 public VectorUnrollingNonlinearLeastSquaresConstantOptimizationEvaluator() 54 55 : base() { 55 56 Parameters.Add(new FixedValueParameter<IntValue>(ConstantOptimizationIterationsName, "Determines how many iterations should be calculated while optimizing the constant of a symbolic expression tree(0 indicates other or default stopping criterion).", new IntValue(10))); 56 57 } 57 58 58 protected NonlinearLeastSquaresConstantOptimizationEvaluator(NonlinearLeastSquaresConstantOptimizationEvaluator original, Cloner cloner)59 protected VectorUnrollingNonlinearLeastSquaresConstantOptimizationEvaluator(VectorUnrollingNonlinearLeastSquaresConstantOptimizationEvaluator original, Cloner cloner) 59 60 : base(original, cloner) { 60 61 } 61 62 public override IDeepCloneable Clone(Cloner cloner) { 62 return new NonlinearLeastSquaresConstantOptimizationEvaluator(this, cloner);63 return new VectorUnrollingNonlinearLeastSquaresConstantOptimizationEvaluator(this, cloner); 63 64 } 64 65 [StorableConstructor] 65 protected NonlinearLeastSquaresConstantOptimizationEvaluator(StorableConstructorFlag _) : base(_) { }66 protected VectorUnrollingNonlinearLeastSquaresConstantOptimizationEvaluator(StorableConstructorFlag _) : base(_) { } 66 67 67 68 protected override ISymbolicExpressionTree OptimizeConstants( 68 69 ISymbolicExpressionTree tree, IRegressionProblemData problemData, IEnumerable<int> rows, 69 70 CancellationToken cancellationToken = default(CancellationToken), EvaluationsCounter counter = null) { 70 return OptimizeTree(tree, 71 return OptimizeTree(tree, (SymbolicDataAnalysisExpressionTreeVectorInterpreter)SymbolicDataAnalysisTreeInterpreterParameter.ActualValue, 71 72 problemData, rows, 72 73 ApplyLinearScalingParameter.ActualValue.Value, ConstantOptimizationIterations, UpdateVariableWeights, … … 76 77 public static ISymbolicExpressionTree OptimizeTree( 77 78 ISymbolicExpressionTree tree, 79 SymbolicDataAnalysisExpressionTreeVectorInterpreter interpreter, 78 80 IRegressionProblemData problemData, IEnumerable<int> rows, 79 81 bool applyLinearScaling, int maxIterations, bool updateVariableWeights, 80 82 CancellationToken cancellationToken = default(CancellationToken), EvaluationsCounter counter = null, Action<double[], double, object> iterationCallback = null) { 83 84 var vectorLengths = problemData.Dataset.DoubleVectorVariables 85 .SelectMany(var => problemData.Dataset.GetDoubleVectorValues(var, rows)) 86 .Select(v => v.Count); 87 var vectorlength = vectorLengths.First(); 88 if (vectorLengths.Any(l => l != vectorlength)) 89 throw new InvalidOperationException("All vectors must be of same length."); 90 var evaluationTraces = interpreter.GetIntermediateNodeValues(tree, problemData.Dataset, rows); 91 var evaluationTrace = evaluationTraces.First(); // assume all vector lengths are the same 92 81 93 82 94 // numeric constants in the tree become variables for constant opt … … 85 97 // variable name, variable value (for factor vars) and lag as a DataForVariable object. 86 98 // A dictionary is used to find parameters 87 bool success = TreeToAutoDiffTermConverter.TryConvertToAutoDiff( 88 tree, updateVariableWeights, applyLinearScaling, 99 bool success = VectorUnrollingTreeToAutoDiffTermConverter.TryConvertToAutoDiff( 100 tree, evaluationTrace, 101 updateVariableWeights, applyLinearScaling, 89 102 out var parameters, out var initialConstants, out var func, out var func_grad); 90 103 if (!success) … … 114 127 } else if (ds.VariableHasType<string>(info.variableName)) { 115 128 x[row, col] = ds.GetStringValue(info.variableName, r) == info.variableValue ? 1 : 0; 129 } else if (ds.VariableHasType<DoubleVector>(info.variableName)) { 130 x[row, col] = ds.GetDoubleVectorValue(info.variableName, r)[info.index]; 116 131 } else throw new InvalidProgramException("found a variable of unknown type"); 117 132 col++; … … 182 197 } 183 198 184 private static alglib.ndimensional_pfunc CreatePFunc( TreeToAutoDiffTermConverter.ParametricFunction func) {199 private static alglib.ndimensional_pfunc CreatePFunc(VectorUnrollingTreeToAutoDiffTermConverter.ParametricFunction func) { 185 200 return (double[] c, double[] x, ref double fx, object o) => { 186 201 fx = func(c, x); … … 190 205 } 191 206 192 private static alglib.ndimensional_pgrad CreatePGrad( TreeToAutoDiffTermConverter.ParametricFunctionGradient func_grad) {207 private static alglib.ndimensional_pgrad CreatePGrad(VectorUnrollingTreeToAutoDiffTermConverter.ParametricFunctionGradient func_grad) { 193 208 return (double[] c, double[] x, ref double fx, double[] grad, object o) => { 194 209 var tuple = func_grad(c, x); … … 201 216 202 217 public static bool CanOptimizeConstants(ISymbolicExpressionTree tree) { 203 return TreeToAutoDiffTermConverter.IsCompatible(tree);218 return VectorUnrollingTreeToAutoDiffTermConverter.IsCompatible(tree); 204 219 } 205 220 }
Note: See TracChangeset
for help on using the changeset viewer.