Changeset 17430
- Timestamp:
- 02/10/20 11:07:14 (5 years ago)
- Location:
- trunk
- Files:
-
- 3 edited
Legend:
- Unmodified
- Added
- Removed
-
trunk/HeuristicLab.Problems.DataAnalysis.Symbolic.Regression.Views/3.4/InteractiveSymbolicRegressionSolutionSimplifierView.cs
r17380 r17430 53 53 protected override ISymbolicExpressionTree OptimizeConstants(ISymbolicExpressionTree tree, IProgress progress) { 54 54 const int constOptIterations = 50; 55 const int maxRepetitions = 1000; 55 const int maxRepetitions = 100; 56 const double minimumImprovement = 1e-10; 56 57 var regressionProblemData = Content.ProblemData; 57 58 var model = Content.Model; 58 59 progress.CanBeStopped = true; 59 var prevResult = 0.0;60 double prevResult = 0.0, improvement = 0.0; 60 61 var result = 0.0; 61 62 int reps = 0; … … 66 67 applyLinearScaling: true, maxIterations: constOptIterations, updateVariableWeights: true, lowerEstimationLimit: model.LowerEstimationLimit, upperEstimationLimit: model.UpperEstimationLimit, 67 68 iterationCallback: (args, func, obj) => { 68 double newProgressValue = progress.ProgressValue + 1.0 / (constOptIterations + 2); // (maxIterations + 2) iterations are reported69 double newProgressValue = progress.ProgressValue + (1.0 / (constOptIterations + 2) / maxRepetitions); // (constOptIterations + 2) iterations are reported 69 70 progress.ProgressValue = Math.Min(newProgressValue, 1.0); 70 71 }); 71 72 reps++; 72 } while (prevResult < result && reps < maxRepetitions && 73 improvement = result - prevResult; 74 } while (improvement > minimumImprovement && reps < maxRepetitions && 73 75 progress.ProgressState != ProgressState.StopRequested && 74 76 progress.ProgressState != ProgressState.CancelRequested); -
trunk/HeuristicLab.Problems.DataAnalysis.Symbolic.Views/3.4/InteractiveSymbolicDataAnalysisSolutionSimplifierView.Designer.cs
r17180 r17430 57 57 this.grpViewHost = new System.Windows.Forms.GroupBox(); 58 58 this.treeChart = new HeuristicLab.Problems.DataAnalysis.Symbolic.Views.InteractiveSymbolicExpressionTreeChart(); 59 this.toolTip = new System.Windows.Forms.ToolTip(this.components); 59 60 ((System.ComponentModel.ISupportInitialize)(this.splitContainer)).BeginInit(); 60 61 this.splitContainer.Panel1.SuspendLayout(); … … 148 149 this.btnSimplify.Text = "Simplify"; 149 150 this.btnSimplify.TextImageRelation = System.Windows.Forms.TextImageRelation.ImageBeforeText; 151 this.toolTip.SetToolTip(this.btnSimplify, "Simplifies the model structure based on mathematical simplification rules."); 150 152 this.btnSimplify.UseVisualStyleBackColor = true; 151 153 this.btnSimplify.Click += new System.EventHandler(this.btnSimplify_Click); … … 162 164 this.btnOptimizeConstants.Text = "Optimize"; 163 165 this.btnOptimizeConstants.TextImageRelation = System.Windows.Forms.TextImageRelation.ImageBeforeText; 166 this.toolTip.SetToolTip(this.btnOptimizeConstants, "Optimizes the numerical constants of the model. \r\nIf the algorithm converges, opt" + 167 "imization is stopped."); 164 168 this.btnOptimizeConstants.UseVisualStyleBackColor = true; 165 169 this.btnOptimizeConstants.Click += new System.EventHandler(this.btnOptimizeConstants_Click); … … 226 230 protected System.Windows.Forms.Button btnOptimizeConstants; 227 231 private System.Windows.Forms.Label treeStatusValue; 232 private System.Windows.Forms.ToolTip toolTip; 228 233 } 229 234 } -
trunk/HeuristicLab.Problems.DataAnalysis.Symbolic.Views/3.4/InteractiveSymbolicDataAnalysisSolutionSimplifierView.cs
r17380 r17430 193 193 194 194 progress.Start("Calculate Impact and Replacement Values ..."); 195 cancellationTokenSource = new CancellationTokenSource(); 195 196 progress.CanBeStopped = true; 196 cancellationTokenSource = new CancellationTokenSource();197 var impactAndReplacementValues = await Task.Run(() => CalculateImpactAndReplacementValues(tree));198 197 try { 199 await Task.Delay(500, cancellationTokenSource.Token); // wait for progressbar to finish animation 200 } catch (OperationCanceledException) { } 201 var replacementValues = impactAndReplacementValues.ToDictionary(x => x.Key, x => x.Value.Item2); 202 foreach (var pair in replacementValues.Where(pair => !(pair.Key is ConstantTreeNode))) { 203 foldedNodes[pair.Key] = MakeConstantTreeNode(pair.Value); 204 } 205 nodeImpacts = impactAndReplacementValues.ToDictionary(x => x.Key, x => x.Value.Item1); 206 progress.Finish(); 198 var impactAndReplacementValues = await Task.Run(() => CalculateImpactAndReplacementValues(tree)); 199 try { 200 await Task.Delay(300, cancellationTokenSource.Token); // wait for progressbar to finish animation 201 } catch (OperationCanceledException) { } 202 203 var replacementValues = impactAndReplacementValues.ToDictionary(x => x.Key, x => x.Value.Item2); 204 foreach (var pair in replacementValues.Where(pair => !(pair.Key is ConstantTreeNode))) { 205 foldedNodes[pair.Key] = MakeConstantTreeNode(pair.Value); 206 } 207 208 nodeImpacts = impactAndReplacementValues.ToDictionary(x => x.Key, x => x.Value.Item1); 209 } finally { 210 progress.Finish(); 211 } 212 207 213 progress.CanBeStopped = false; 208 214 PaintNodeImpacts(); … … 314 320 private async void btnOptimizeConstants_Click(object sender, EventArgs e) { 315 321 progress.Start("Optimizing Constants ..."); 322 cancellationTokenSource = new CancellationTokenSource(); 323 progress.CanBeStopped = true; 316 324 try { 317 325 var tree = (ISymbolicExpressionTree)Content.Model.SymbolicExpressionTree.Clone(); 326 318 327 var newTree = await Task.Run(() => OptimizeConstants(tree, progress)); 319 await Task.Delay(500); // wait for progressbar to finish animation 320 UpdateModel(newTree); 321 } finally { 328 try { 329 await Task.Delay(300, cancellationTokenSource.Token); // wait for progressbar to finish animation 330 } catch (OperationCanceledException) { } 331 UpdateModel(newTree); // triggers progress.Finish after calculating the node impacts when model is changed 332 } catch { 322 333 progress.Finish(); 323 334 }
Note: See TracChangeset
for help on using the changeset viewer.