Changeset 12808 for branches/PerformanceComparison
- Timestamp:
- 07/28/15 14:41:03 (9 years ago)
- Location:
- branches/PerformanceComparison
- Files:
-
- 6 edited
Legend:
- Unmodified
- Added
- Removed
-
branches/PerformanceComparison/HeuristicLab.Analysis.Views/3.3/IndexedDataTableView.cs
r12771 r12808 128 128 chart.ChartAreas[0].AxisY.Title = string.Empty; 129 129 chart.ChartAreas[0].AxisY2.Title = string.Empty; 130 chart.ChartAreas[0].AxisX.IsLogarithmic = false; 131 chart.ChartAreas[0].AxisX2.IsLogarithmic = false; 132 chart.ChartAreas[0].AxisY.IsLogarithmic = false; 133 chart.ChartAreas[0].AxisY2.IsLogarithmic = false; 130 134 chart.Series.Clear(); 131 135 if (Content != null) { … … 234 238 area.AxisX.IntervalAutoMode = IntervalAutoMode.VariableCount; 235 239 } 236 237 area.AxisX.IsLogarithmic = Content.VisualProperties.XAxisLogScale;238 area.AxisX2.IsLogarithmic = Content.VisualProperties.SecondXAxisLogScale;239 area.AxisY.IsLogarithmic = Content.VisualProperties.YAxisLogScale;240 area.AxisY2.IsLogarithmic = Content.VisualProperties.SecondYAxisLogScale;241 240 } 242 241 … … 247 246 a.Maximum = double.NaN; 248 247 } 248 // chart controls handle log scaling problems not in a graceful way 249 if (chart.Series.Any(x => x.XAxisType == AxisType.Primary && (x.Points.Count == 0 || x.Points.Any(y => y.XValue <= 0)))) 250 area.AxisX.IsLogarithmic = false; 251 else area.AxisX.IsLogarithmic = Content.VisualProperties.XAxisLogScale; 252 if (chart.Series.Any(x => x.XAxisType == AxisType.Secondary && (x.Points.Count == 0 || x.Points.Any(y => y.XValue <= 0)))) 253 area.AxisX2.IsLogarithmic = false; 254 else area.AxisX2.IsLogarithmic = Content.VisualProperties.SecondXAxisLogScale; 255 256 if (chart.Series.Any(x => x.YAxisType == AxisType.Primary && (x.Points.Count == 0 || x.Points.Any(y => y.YValues.Min() <= 0)))) 257 area.AxisY.IsLogarithmic = false; 258 else area.AxisY.IsLogarithmic = Content.VisualProperties.YAxisLogScale; 259 if (chart.Series.Any(x => x.YAxisType == AxisType.Secondary && (x.Points.Count == 0 || x.Points.Any(y => y.YValues.Min() <= 0)))) 260 area.AxisY2.IsLogarithmic = false; 261 else area.AxisY2.IsLogarithmic = Content.VisualProperties.SecondYAxisLogScale; 262 249 263 area.RecalculateAxesScale(); 250 264 area.AxisX.IsMarginVisible = false; -
branches/PerformanceComparison/HeuristicLab.Analysis/3.3/Optimizers/IRRestarter.cs
r12804 r12808 33 33 34 34 namespace HeuristicLab.Analysis { 35 public enum TerminationCriterium { OnlyByTime, OnlyByEvaluations, OnlyByTarget, ByTargetAndTime, ByTargetAndEvaluations, WhicheverHitsFirst, WhicheverHitsLast }35 public enum TerminationCriterium { OnlyByTime, OnlyByEvaluations, OnlyByTarget, ByTargetAndTime, ByTargetAndEvaluations, ByTimeAndEvaluations, WhicheverHitsFirst, WhicheverHitsLast } 36 36 /// <summary> 37 37 /// A run in which an algorithm is executed for a certain maximum time only. … … 43 43 private const string ExecutionTimeResultName = "Execution Time"; 44 44 private const string BestQualityResultName = "BestQuality"; 45 private const string RandomRestartsResultName = "RandomRestarts"; 45 46 46 47 public string Filename { get; set; } … … 153 154 } 154 155 155 private int lastAlgorithmEvaluatedSolutions;156 private int lastAlgorithmEvaluatedMoves;157 156 [Storable] 158 157 private double evaluations; … … 239 238 return timeHit && evalHit && targetHit 240 239 || timeHit && (TerminationCriterium == TerminationCriterium.OnlyByTime 240 || TerminationCriterium == TerminationCriterium.WhicheverHitsFirst 241 241 || TerminationCriterium == TerminationCriterium.ByTargetAndTime 242 || TerminationCriterium == TerminationCriterium. WhicheverHitsFirst)242 || TerminationCriterium == TerminationCriterium.ByTimeAndEvaluations) 243 243 || evalHit && (TerminationCriterium == TerminationCriterium.OnlyByEvaluations 244 || TerminationCriterium == TerminationCriterium.WhicheverHitsFirst 244 245 || TerminationCriterium == TerminationCriterium.ByTargetAndEvaluations 245 || TerminationCriterium == TerminationCriterium. WhicheverHitsFirst)246 || TerminationCriterium == TerminationCriterium.ByTimeAndEvaluations) 246 247 || targetHit && (TerminationCriterium == TerminationCriterium.OnlyByTarget 247 248 || TerminationCriterium == TerminationCriterium.WhicheverHitsFirst … … 267 268 bestSoFar = original.bestSoFar; 268 269 lastAlgorithmExecutionTime = original.lastAlgorithmExecutionTime; 269 lastAlgorithmEvaluatedSolutions = original.lastAlgorithmEvaluatedSolutions;270 lastAlgorithmEvaluatedMoves = original.lastAlgorithmEvaluatedMoves;271 270 272 271 perClockAnalyzer = cloner.Clone(original.perClockAnalyzer); … … 294 293 bestSoFar = double.NaN; 295 294 lastAlgorithmExecutionTime = TimeSpan.Zero; 296 lastAlgorithmEvaluatedSolutions = 0;297 lastAlgorithmEvaluatedMoves = 0;298 295 299 296 perClockAnalyzer = new QualityPerClockAnalyzer(); … … 316 313 bestSoFar = double.NaN; 317 314 lastAlgorithmExecutionTime = TimeSpan.Zero; 318 lastAlgorithmEvaluatedSolutions = 0;319 lastAlgorithmEvaluatedMoves = 0;320 315 321 316 perClockAnalyzer = new QualityPerClockAnalyzer(); … … 337 332 bestSoFar = double.NaN; 338 333 lastAlgorithmExecutionTime = TimeSpan.Zero; 339 lastAlgorithmEvaluatedSolutions = 0;340 lastAlgorithmEvaluatedMoves = 0;341 334 342 335 perClockAnalyzer = new QualityPerClockAnalyzer(); … … 366 359 BestSoFar = double.NaN; 367 360 lastAlgorithmExecutionTime = TimeSpan.Zero; 368 lastAlgorithmEvaluatedSolutions = 0;369 lastAlgorithmEvaluatedMoves = 0;370 361 371 362 CurrentRun = null; … … 399 390 CurrentRun.Results.Add(perEvaluationsAnalyzer.EvaluatedMovesParameter.ActualName, new IntValue(0)); 400 391 CurrentRun.Results.Add(BestQualityResultName, new DoubleValue(Maximization ? double.MinValue : double.MaxValue)); 392 CurrentRun.Results.Add(RandomRestartsResultName, new IntValue(0)); 401 393 } 402 394 Algorithm.Start(); … … 492 484 algorithm.ExceptionOccurred += Algorithm_ExceptionOccurred; 493 485 algorithm.ExecutionTimeChanged += Algorithm_ExecutionTimeChanged; 494 algorithm.ExecutionStateChanged += Algorithm_ExecutionStateChanged;495 486 algorithm.Paused += Algorithm_Paused; 496 487 algorithm.Prepared += Algorithm_Prepared; 497 algorithm.Started += Algorithm_Started;498 488 algorithm.Stopped += Algorithm_Stopped; 499 489 algorithm.ProblemChanged += Algorithm_ProblemChanged; … … 503 493 algorithm.ExceptionOccurred -= Algorithm_ExceptionOccurred; 504 494 algorithm.ExecutionTimeChanged -= Algorithm_ExecutionTimeChanged; 505 algorithm.ExecutionStateChanged -= Algorithm_ExecutionStateChanged;506 495 algorithm.Paused -= Algorithm_Paused; 507 496 algorithm.Prepared -= Algorithm_Prepared; 508 algorithm.Started -= Algorithm_Started;509 497 algorithm.Stopped -= Algorithm_Stopped; 510 498 algorithm.ProblemChanged -= Algorithm_ProblemChanged; … … 514 502 } 515 503 private void Algorithm_ExecutionTimeChanged(object sender, EventArgs e) { 516 if (Algorithm.ExecutionState != ExecutionState.Started) return; 517 518 if (ExecutionState == ExecutionState.Started) 519 UpdateAlgorithmResults(); 520 521 if (IsFinished && ExecutionState != ExecutionState.Stopped) { 522 Algorithm.Stop(); 523 } 524 OnExecutionTimeChanged(); 525 } 526 527 private void Algorithm_ExecutionStateChanged(object sender, EventArgs e) { 528 //OnExecutionStateChanged(); 504 ExecutionTime += Algorithm.ExecutionTime - lastAlgorithmExecutionTime; 505 lastAlgorithmExecutionTime = Algorithm.ExecutionTime; 529 506 } 530 507 private void Algorithm_Paused(object sender, EventArgs e) { 531 UpdateAlgorithmResults(); 508 ExecutionTime += Algorithm.ExecutionTime - lastAlgorithmExecutionTime; 509 lastAlgorithmExecutionTime = Algorithm.ExecutionTime; 532 510 OnPaused(); 533 511 } 534 512 private void Algorithm_Prepared(object sender, EventArgs e) { 535 lastAlgorithmEvaluatedSolutions = 0;536 lastAlgorithmEvaluatedMoves = 0;537 513 lastAlgorithmExecutionTime = TimeSpan.Zero; 538 }539 private void Algorithm_Started(object sender, EventArgs e) {540 //OnStarted();541 514 } 542 515 private void Algorithm_Stopped(object sender, EventArgs e) { 543 516 var bestQuality = UpdateAlgorithmResults(); 544 517 545 var execTime = ((TimeSpanValue) currentRun.Results[ExecutionTimeResultName]).Value;518 var execTime = ((TimeSpanValue)CurrentRun.Results[ExecutionTimeResultName]).Value; 546 519 foreach (var result in Algorithm.Results) { 547 520 if (result.Name == perClockAnalyzer.QualityPerClockParameter.ResultName) { 548 if (! currentRun.Results.ContainsKey(result.Name))549 currentRun.Results.Add(result.Name, (IItem)result.Value.Clone());521 if (!CurrentRun.Results.ContainsKey(result.Name)) 522 CurrentRun.Results.Add(result.Name, (IItem)result.Value.Clone()); 550 523 else { 551 var dt = (IndexedDataTable<double>) currentRun.Results[result.Name];524 var dt = (IndexedDataTable<double>)CurrentRun.Results[result.Name]; 552 525 var best = dt.Rows.First().Values.Last().Item2; 553 526 var resultDt = (IndexedDataTable<double>)result.Value; … … 560 533 } 561 534 } else if (result.Name == perEvaluationsAnalyzer.QualityPerEvaluationsParameter.ResultName) { 562 if (! currentRun.Results.ContainsKey(result.Name))563 currentRun.Results.Add(result.Name, (IItem)result.Value.Clone());535 if (!CurrentRun.Results.ContainsKey(result.Name)) 536 CurrentRun.Results.Add(result.Name, (IItem)result.Value.Clone()); 564 537 else { 565 var dt = (IndexedDataTable<double>) currentRun.Results[result.Name];566 var evalSols = ((IntValue) currentRun.Results[perEvaluationsAnalyzer.EvaluatedSolutionsParameter.ActualName]).Value;567 var evalMoves = ((IntValue) currentRun.Results[perEvaluationsAnalyzer.EvaluatedMovesParameter.ActualName]).Value;538 var dt = (IndexedDataTable<double>)CurrentRun.Results[result.Name]; 539 var evalSols = ((IntValue)CurrentRun.Results[perEvaluationsAnalyzer.EvaluatedSolutionsParameter.ActualName]).Value; 540 var evalMoves = ((IntValue)CurrentRun.Results[perEvaluationsAnalyzer.EvaluatedMovesParameter.ActualName]).Value; 568 541 var best = dt.Rows.First().Values.Last().Item2; 569 542 var resultDt = (IndexedDataTable<double>)result.Value; … … 576 549 } 577 550 } else if (result.Name == perEvaluationsAnalyzer.EvaluatedSolutionsParameter.ActualName) { 578 var evalSols = ((IntValue) currentRun.Results[perEvaluationsAnalyzer.EvaluatedSolutionsParameter.ActualName]);579 evalSols.Value += ((IntValue)result.Value).Value;551 var evalSols = ((IntValue)CurrentRun.Results[perEvaluationsAnalyzer.EvaluatedSolutionsParameter.ActualName]).Value; 552 CurrentRun.Results[perEvaluationsAnalyzer.EvaluatedSolutionsParameter.ActualName] = new IntValue(evalSols + ((IntValue)result.Value).Value); 580 553 } else if (result.Name == perEvaluationsAnalyzer.EvaluatedMovesParameter.ActualName) { 581 var evalMoves = ((IntValue) currentRun.Results[perEvaluationsAnalyzer.EvaluatedMovesParameter.ActualName]);582 evalMoves.Value += ((IntValue)result.Value).Value;554 var evalMoves = ((IntValue)CurrentRun.Results[perEvaluationsAnalyzer.EvaluatedMovesParameter.ActualName]).Value; 555 CurrentRun.Results[perEvaluationsAnalyzer.EvaluatedMovesParameter.ActualName] = new IntValue(evalMoves + ((IntValue)result.Value).Value); 583 556 } else if (result.Name == perEvaluationsAnalyzer.BestQualityParameter.ActualName) { 584 var best = ((DoubleValue) currentRun.Results[BestQualityResultName]).Value;557 var best = ((DoubleValue)CurrentRun.Results[BestQualityResultName]).Value; 585 558 if (Maximization && best < bestQuality || !Maximization && best > bestQuality) 586 currentRun.Results[BestQualityResultName] = new DoubleValue(bestQuality);559 CurrentRun.Results[BestQualityResultName] = new DoubleValue(bestQuality); 587 560 } else if (result.Name.ToLower().EndsWith("solution") && BestSoFar == bestQuality) { 588 if ( currentRun.Results.ContainsKey(result.Name))589 currentRun.Results[result.Name] = (IItem)result.Value.Clone();590 else currentRun.Results.Add(result.Name, (IItem)result.Value.Clone());561 if (CurrentRun.Results.ContainsKey(result.Name)) 562 CurrentRun.Results[result.Name] = (IItem)result.Value.Clone(); 563 else CurrentRun.Results.Add(result.Name, (IItem)result.Value.Clone()); 591 564 } 592 565 } 593 currentRun.Results[ExecutionTimeResultName] = new TimeSpanValue(execTime + Algorithm.ExecutionTime);566 CurrentRun.Results[ExecutionTimeResultName] = new TimeSpanValue(execTime + Algorithm.ExecutionTime); 594 567 595 568 if (!forceStop && !IsFinished) { 569 CurrentRun.Results[RandomRestartsResultName] = new IntValue(1 + ((IntValue)CurrentRun.Results[RandomRestartsResultName]).Value); 596 570 Algorithm.Prepare(); 597 571 Algorithm.Start(); 598 572 } else { 599 573 forceStop = false; 600 Runs.Add(currentRun); 601 currentRun = null; 574 Runs.Add(CurrentRun); 602 575 Algorithm.Prepare(true); 603 576 ExecutionState = ExecutionState.Stopped; … … 613 586 if (Algorithm.Results.TryGetValue(perEvaluationsAnalyzer.EvaluatedSolutionsParameter.ActualName, out evaluationsResult)) { 614 587 var evals = ((IntValue)evaluationsResult.Value).Value; 615 Evaluations += evals - lastAlgorithmEvaluatedSolutions; 616 lastAlgorithmEvaluatedSolutions = evals; 588 Evaluations += evals; 617 589 } 618 590 if (Algorithm.Results.TryGetValue(perEvaluationsAnalyzer.EvaluatedMovesParameter.ActualName, out evaluationsResult)) { 619 591 var evals = ((IntValue)evaluationsResult.Value).Value; 620 Evaluations += moveCostPerSolution * (evals - lastAlgorithmEvaluatedMoves); 621 lastAlgorithmEvaluatedMoves = evals; 592 Evaluations += moveCostPerSolution * evals; 622 593 } 623 594 if (Algorithm.Results.TryGetValue(perEvaluationsAnalyzer.BestQualityParameter.ActualName, out evaluationsResult)) { -
branches/PerformanceComparison/HeuristicLab.Analysis/3.3/QualityAnalysis/QualityPerClockAnalyzer.cs
r12804 r12808 65 65 Rows = { new IndexedDataRow<double>("First-hit Graph") { VisualProperties = { 66 66 ChartType = DataRowVisualProperties.DataRowChartType.StepLine, 67 LineWidth = 367 LineWidth = 2 68 68 } } } 69 69 }; -
branches/PerformanceComparison/HeuristicLab.Analysis/3.3/QualityAnalysis/QualityPerEvaluationsAnalyzer.cs
r12804 r12808 71 71 Rows = { new IndexedDataRow<double>("First-hit Graph") { VisualProperties = { 72 72 ChartType = DataRowVisualProperties.DataRowChartType.StepLine, 73 LineWidth = 373 LineWidth = 2 74 74 } } } 75 75 }; -
branches/PerformanceComparison/HeuristicLab.Optimization.Views/3.3/RunCollectionViews/RunCollectionRLDView.Designer.cs
r12806 r12808 60 60 this.budgetsTextBox = new System.Windows.Forms.TextBox(); 61 61 this.fixedCostButton = new System.Windows.Forms.Button(); 62 this.allOrEachTargetCheckBox = new System.Windows.Forms.CheckBox(); 62 63 ((System.ComponentModel.ISupportInitialize)(this.errorProvider)).BeginInit(); 63 64 this.SuspendLayout(); … … 139 140 this.targetsTextBox.Location = new System.Drawing.Point(69, 57); 140 141 this.targetsTextBox.Name = "targetsTextBox"; 141 this.targetsTextBox.Size = new System.Drawing.Size(2 65, 20);142 this.targetsTextBox.Size = new System.Drawing.Size(209, 20); 142 143 this.targetsTextBox.TabIndex = 6; 143 144 this.toolTip.SetToolTip(this.targetsTextBox, "The order of the targets is important, first to-hit targets\r\nshould be given firs" + … … 213 214 this.fixedCostButton.Click += new System.EventHandler(this.fixedCostButton_Click); 214 215 // 216 // allOrEachTargetCheckBox 217 // 218 this.allOrEachTargetCheckBox.Anchor = ((System.Windows.Forms.AnchorStyles)((System.Windows.Forms.AnchorStyles.Top | System.Windows.Forms.AnchorStyles.Right))); 219 this.allOrEachTargetCheckBox.AutoSize = true; 220 this.allOrEachTargetCheckBox.Location = new System.Drawing.Point(298, 59); 221 this.allOrEachTargetCheckBox.Name = "allOrEachTargetCheckBox"; 222 this.allOrEachTargetCheckBox.Size = new System.Drawing.Size(36, 17); 223 this.allOrEachTargetCheckBox.TabIndex = 8; 224 this.allOrEachTargetCheckBox.Text = "all"; 225 this.allOrEachTargetCheckBox.UseVisualStyleBackColor = true; 226 this.allOrEachTargetCheckBox.CheckedChanged += new System.EventHandler(this.allOrEachTargetCheckBox_CheckedChanged); 227 // 215 228 // RunCollectionRLDView 216 229 // 217 230 this.AutoScaleMode = System.Windows.Forms.AutoScaleMode.Inherit; 231 this.Controls.Add(this.allOrEachTargetCheckBox); 218 232 this.Controls.Add(this.generateTargetsButton); 219 233 this.Controls.Add(this.fixedCostButton); … … 254 268 private System.Windows.Forms.TextBox budgetsTextBox; 255 269 private System.Windows.Forms.Label budgetsLabel; 270 private System.Windows.Forms.CheckBox allOrEachTargetCheckBox; 256 271 } 257 272 } -
branches/PerformanceComparison/HeuristicLab.Optimization.Views/3.3/RunCollectionViews/RunCollectionRLDView.cs
r12806 r12808 27 27 using HeuristicLab.Analysis; 28 28 using HeuristicLab.Collections; 29 using HeuristicLab.Common;30 29 using HeuristicLab.Core.Views; 31 30 using HeuristicLab.Data; … … 55 54 InitializeComponent(); 56 55 combinedDataTable = new IndexedDataTable<double>("Combined DataTable", "A data table containing the ECDF of each of a number of groups.") { 57 VisualProperties = { YAxisTitle = "Proportion of reached targets" } 56 VisualProperties = { 57 YAxisTitle = "Proportion of reached targets", 58 YAxisMinimumFixedValue = 0, YAxisMinimumAuto = false, 59 YAxisMaximumFixedValue = 1, YAxisMaximumAuto = false 60 } 58 61 }; 59 62 viewHost.Content = combinedDataTable; … … 179 182 if (string.IsNullOrEmpty(table)) return; 180 183 if (levels == null) { 181 var worst = Content.Select(x => ((IndexedDataTable<double>)x.Results[table]).Rows.First().Values.Max(y => y.Item2)).First(); 182 var best = Content.Select(x => ((IndexedDataTable<double>)x.Results[table]).Rows.First().Values.Min(y => y.Item2)).Last(); 184 var worstMin = Content.Where(x => x.Results.ContainsKey(table)).Select(x => ((IndexedDataTable<double>)x.Results[table]).Rows.First().Values.First().Item2).Min(); 185 var worstMax = Content.Where(x => x.Results.ContainsKey(table)).Select(x => ((IndexedDataTable<double>)x.Results[table]).Rows.First().Values.First().Item2).Max(); 186 var bestMin = Content.Where(x => x.Results.ContainsKey(table)).Select(x => ((IndexedDataTable<double>)x.Results[table]).Rows.First().Values.Last().Item2).Min(); 187 var bestMax = Content.Where(x => x.Results.ContainsKey(table)).Select(x => ((IndexedDataTable<double>)x.Results[table]).Rows.First().Values.Last().Item2).Max(); 188 double worst, best; 189 if (Math.Abs(bestMax - worstMin) > Math.Abs(bestMin - worstMax)) { 190 worst = worstMin; 191 best = bestMax; 192 } else { 193 worst = worstMax; 194 best = bestMin; 195 } 183 196 levels = Enumerable.Range(0, 11).Select(x => worst + (x / 10.0) * (best - worst)).ToArray(); 184 197 suppressTargetsEvents = true; … … 196 209 var xAxisTitles = new HashSet<string>(); 197 210 foreach (var group in groupedRuns) { 198 var hits = new SortedList<double, int>();211 var hits = new Dictionary<string, SortedList<double, double>>(); 199 212 foreach (var run in group.Item2) { 213 if (!run.Results.ContainsKey(table)) continue; 200 214 var resultsTable = (IndexedDataTable<double>)run.Results[table]; 201 215 xAxisTitles.Add(resultsTable.VisualProperties.XAxisTitle); 202 216 var values = resultsTable.Rows.First().Values; 203 217 var maximization = values.First().Item2 < values.Last().Item2; 204 var i = 0; 205 var j = 0; 206 var current = values[j]; 207 var prev = Tuple.Create(-1.0, double.NaN); 208 while (i < levels.Length) { 209 if ((double.IsNaN(prev.Item2) || prev.Item2 != current.Item2) 210 && (maximization && current.Item2 >= levels[i] 211 || !maximization && current.Item2 <= levels[i])) { 212 if (hits.ContainsKey(current.Item1)) 213 hits[current.Item1]++; 214 else hits[current.Item1] = 1; 215 i++; 216 } else { 217 j++; 218 if (j >= values.Count) break; 219 prev = current; 220 current = values[j]; 218 if (allOrEachTargetCheckBox.Checked) { 219 // each 220 foreach (double l in levels) { 221 var key = "-" + l.ToString(); 222 if (!hits.ContainsKey(key)) hits.Add(key, new SortedList<double, double>()); 223 foreach (var v in values) { 224 if (maximization && v.Item2 >= l || !maximization && v.Item2 <= l) { 225 if (hits[key].ContainsKey(v.Item1)) 226 hits[key][v.Item1] += 1.0 / group.Item2.Count; 227 else hits[key][v.Item1] = 1.0 / group.Item2.Count; 228 break; 229 } 230 } 231 } 232 } else { 233 if (!hits.ContainsKey("all")) hits.Add("all", new SortedList<double, double>()); 234 // all 235 var i = 0; 236 var j = 0; 237 var current = values[j]; 238 var prev = Tuple.Create(-1.0, double.NaN); 239 while (i < levels.Length) { 240 if ((double.IsNaN(prev.Item2) || prev.Item2 != current.Item2) 241 && (maximization && current.Item2 >= levels[i] 242 || !maximization && current.Item2 <= levels[i])) { 243 if (hits["all"].ContainsKey(current.Item1)) 244 hits["all"][current.Item1] += 1.0 / (group.Item2.Count * levels.Length); 245 else hits["all"][current.Item1] = 1.0 / (group.Item2.Count * levels.Length); 246 i++; 247 } else { 248 j++; 249 if (j >= values.Count) break; 250 prev = current; 251 current = values[j]; 252 } 221 253 } 222 254 } 223 255 } 224 var row = new IndexedDataRow<double>(group.Item1) { VisualProperties = { ChartType = DataRowVisualProperties.DataRowChartType.StepLine } }; 225 var total = 0.0; 226 foreach (var h in hits) { 227 total += h.Value; 228 row.Values.Add(Tuple.Create(h.Key, total / (group.Item2.Count * levels.Length))); 229 } 230 combinedDataTable.Rows.Add(row); 256 foreach (var list in hits) { 257 var row = new IndexedDataRow<double>(group.Item1 + (list.Key != "all" ? list.Key : string.Empty)) { 258 VisualProperties = { 259 ChartType = DataRowVisualProperties.DataRowChartType.StepLine, 260 LineWidth = 2 261 } 262 }; 263 var total = 0.0; 264 foreach (var h in list.Value) { 265 total += h.Value; 266 row.Values.Add(Tuple.Create(h.Key, total)); 267 } 268 combinedDataTable.Rows.Add(row); 269 } 231 270 } 232 271 combinedDataTable.VisualProperties.XAxisTitle = string.Join(" / ", xAxisTitles); 233 combinedDataTable.VisualProperties.XAxisLogScale = logScalingCheckBox.Checked;272 combinedDataTable.VisualProperties.XAxisLogScale = combinedDataTable.Rows.Count > 0 && logScalingCheckBox.Checked; 234 273 } finally { ResumeRepaint(true); } 235 274 } … … 317 356 } else if (Content.Count > 0 && dataTableComboBox.SelectedIndex >= 0) { 318 357 var table = (string)dataTableComboBox.SelectedItem; 319 var worst = Content. Select(x => ((IndexedDataTable<double>)x.Results[table]).Rows.First().Values.Max(y => y.Item2)).First();320 var best = Content. Select(x => ((IndexedDataTable<double>)x.Results[table]).Rows.First().Values.Min(y => y.Item2)).Last();358 var worst = Content.Where(x => x.Results.ContainsKey(table)).Select(x => ((IndexedDataTable<double>)x.Results[table]).Rows.First().Values.Max(y => y.Item2)).First(); 359 var best = Content.Where(x => x.Results.ContainsKey(table)).Select(x => ((IndexedDataTable<double>)x.Results[table]).Rows.First().Values.Min(y => y.Item2)).Last(); 321 360 max = (decimal)Math.Max(best, worst); 322 361 min = (decimal)Math.Min(best, worst); … … 332 371 levels = maximization ? dialog.Values.Select(x => (double)x).ToArray() 333 372 : dialog.Values.Reverse().Select(x => (double)x).ToArray(); 373 suppressTargetsEvents = true; 374 targetsTextBox.Text = string.Join(" ; ", levels); 375 suppressTargetsEvents = false; 376 334 377 UpdateRuns(); 335 378 SetEnabledStateOfControls(); … … 342 385 var table = (string)dataTableComboBox.SelectedItem; 343 386 foreach (var run in Content) { 387 if (!run.Results.ContainsKey(table)) continue; 344 388 var resultsTable = (IndexedDataTable<double>)run.Results[table]; 345 389 var values = resultsTable.Rows.First().Values; … … 384 428 385 429 foreach (var run in Content) { 430 if (!run.Results.ContainsKey(table)) continue; 386 431 var resultsTable = (IndexedDataTable<double>)run.Results[table]; 387 432 var values = resultsTable.Rows.First().Values; … … 403 448 } 404 449 } 450 451 private void allOrEachTargetCheckBox_CheckedChanged(object sender, EventArgs e) { 452 var each = allOrEachTargetCheckBox.Checked; 453 allOrEachTargetCheckBox.Text = each ? "each" : "all"; 454 UpdateRuns(); 455 } 405 456 } 406 457 }
Note: See TracChangeset
for help on using the changeset viewer.