Changeset 18163
- Timestamp:
- 12/21/21 08:51:49 (3 years ago)
- Location:
- branches/2994-AutoDiffForIntervals
- Files:
-
- 4 edited
Legend:
- Unmodified
- Added
- Removed
-
branches/2994-AutoDiffForIntervals/HeuristicLab.Problems.DataAnalysis.Regression.Symbolic.Extensions/ConstrainedNLSInternal.cs
r17328 r18163 43 43 44 44 public NLOpt.nlopt_result OptResult { get; private set; } 45 46 public int NumObjectiveFunctionEvaluations { get; private set; } 47 public int NumObjectiveGradientEvaluations { get; private set; } 48 public int NumConstraintEvaluations { get; private set; } 49 public int NumConstraintGradientEvaluations { get; private set; } 45 50 46 51 private bool disposed = false; … … 249 254 double minf = double.MaxValue; /* minimum objective value upon return */ 250 255 OptResult = NLOpt.nlopt_optimize(nlopt, x, ref minf); 251 256 252 257 if (OptResult < 0 && OptResult != NLOpt.nlopt_result.NLOPT_FORCED_STOP) { 253 258 // throw new InvalidOperationException($"NLOpt failed {res} {NLOpt.nlopt_get_errmsg(nlopt)}"); … … 294 299 UpdateThetaValues(curX); 295 300 var sse = 0.0; 301 NumObjectiveFunctionEvaluations++; 296 302 297 303 if (grad != null) { 304 NumObjectiveGradientEvaluations++; 298 305 autoDiffEval.Evaluate(preparedTree, problemData.Dataset, trainingRows, 299 306 preparedTreeParameterNodes, fi_eval, jac_eval); … … 414 421 double CalculateConstraint(uint dim, double[] curX, double[] grad, IntPtr data) { 415 422 UpdateThetaValues(curX); 423 NumConstraintEvaluations++; 416 424 var intervalEvaluator = new IntervalEvaluator(); 417 425 var refIntervalEvaluator = new IntervalInterpreter(); … … 420 428 421 429 if (grad != null) Array.Clear(grad, 0, grad.Length); 430 if (grad != null) NumConstraintGradientEvaluations++; 422 431 423 432 var interval = intervalEvaluator.Evaluate(constraintData.Tree, dataIntervals, constraintData.ParameterNodes, -
branches/2994-AutoDiffForIntervals/HeuristicLab.Problems.DataAnalysis.Regression.Symbolic.Extensions/NLOptEvaluator.cs
r17328 r18163 210 210 constantOptimizationRows, ApplyLinearScalingParameter.ActualValue.Value, Solver, 211 211 out double qDiff, out double[] constraintsBefore, out double[] constraintsAfter, 212 ConstantOptimizationIterations.Value, updateVariableWeights: UpdateVariableWeights, lowerEstimationLimit: EstimationLimitsParameter.ActualValue.Lower, upperEstimationLimit: EstimationLimitsParameter.ActualValue.Upper, updateConstantsInTree: UpdateConstantsInTree, counter: counter); 212 ConstantOptimizationIterations.Value, updateVariableWeights: UpdateVariableWeights, 213 lowerEstimationLimit: EstimationLimitsParameter.ActualValue.Lower, upperEstimationLimit: EstimationLimitsParameter.ActualValue.Upper, 214 updateConstantsInTree: UpdateConstantsInTree, counter: counter); 213 215 214 216 AchievedQualityImprovementParameter.ActualValue = new DoubleValue(qDiff); … … 272 274 if (!updateConstantsInTree) throw new NotSupportedException("not updating tree parameters is not supported"); 273 275 if (!applyLinearScaling) throw new NotSupportedException("application without linear scaling is not supported"); 274 275 276 276 277 using (var state = new ConstrainedNLSInternal(solver, tree, maxIterations, problemData, 0, 0, 0)) { … … 282 283 if (constraintsAfter.Any(cv => cv > 1e-8)) qOpt = qBefore; 283 284 qDiff = qOpt - qBefore; 285 286 if(counter != null) { 287 counter.FunctionEvaluations += state.NumObjectiveFunctionEvaluations; 288 counter.GradientEvaluations += state.NumObjectiveGradientEvaluations; 289 } 290 284 291 return qOpt; 285 292 } -
branches/2994-AutoDiffForIntervals/HeuristicLab.Tests/HeuristicLab.Problems.DataAnalysis.Symbolic-3.4/IntervalEvaluatorTest.cs
r17319 r18163 188 188 [TestCategory("Problems.DataAnalysis")] 189 189 [TestProperty("Time", "short")] 190 public void IntervalEvaluatorSqrAndDi ff() {190 public void IntervalEvaluatorSqrAndDiv() { 191 191 Dictionary<string, Interval> dataIntervals = new Dictionary<string, Interval>() { 192 192 {"R", new Interval(0.2, 0.5) }, -
branches/2994-AutoDiffForIntervals/HeuristicLab.Tests/HeuristicLab.Problems.DataAnalysis.Symbolic-3.4/IntervalInterpreterTest.cs
r17318 r18163 154 154 } 155 155 156 [TestMethod] 157 [TestCategory("Problems.DataAnalysis.Symbolic")] 158 [TestProperty("Time", "short")] 159 public void IntervalInterpreterAQ() { 160 var variableRanges = new Dictionary<string, Interval>(); 161 variableRanges.Add("c1", new Interval(1, 1)); 162 variableRanges.Add("c2", new Interval(2, 2)); 163 164 EvaluateTest("aq(c1, c2)", new Interval(1.0 / Math.Sqrt(5), 1.0 / Math.Sqrt(5)), variableRanges); // aq(a, b) = a / sqrt(1+b²) 165 } 166 156 167 157 168 [TestMethod]
Note: See TracChangeset
for help on using the changeset viewer.