- Timestamp:
- 02/17/17 13:01:00 (8 years ago)
- File:
-
- 1 edited
Legend:
- Unmodified
- Added
- Removed
-
TabularUnified branches/MemPRAlgorithm/HeuristicLab.Optimization.Views/3.3/RunCollectionViews/RunCollectionRLDView.cs ¶
r14420 r14680 30 30 using HeuristicLab.Analysis; 31 31 using HeuristicLab.Collections; 32 using HeuristicLab.Common; 32 33 using HeuristicLab.Core.Views; 33 34 using HeuristicLab.Data; … … 334 335 // aggregating over multiple problem instances 335 336 var maxEfforts = new Dictionary<ProblemDescription, double>(); 337 var worstKnowns = new Dictionary<ProblemDescription, double>(); 336 338 double minEff = double.MaxValue, maxEff = double.MinValue; 337 339 foreach (var group in groupedRuns) { … … 343 345 var bestKnownTarget = problem.Value.Item1; 344 346 var max = problem.Key.IsMaximization(); 345 var worstTarget = (max ? (1 - targets.Max()) : (1 + targets.Max())) * bestKnownTarget; 346 var bestTarget = (max ? (1 - targets.Min()) : (1 + targets.Min())) * bestKnownTarget; 347 double worstTarget = 0, bestTarget = 0; 348 if (bestKnownTarget > 0) { 349 worstTarget = (max ? (1 - targets.Max()) : (1 + targets.Max())) * bestKnownTarget; 350 bestTarget = (max ? (1 - targets.Min()) : (1 + targets.Min())) * bestKnownTarget; 351 } else if (bestKnownTarget < 0) { 352 worstTarget = (max ? (1 + targets.Max()) : (1 - targets.Max())) * bestKnownTarget; 353 bestTarget = (max ? (1 + targets.Min()) : (1 - targets.Min())) * bestKnownTarget; 354 } else { 355 var initials = problem.Value.Item2.Select(x => ((IndexedDataTable<double>)x.Results[table]).Rows.First().Values.First().Item2); 356 var worstKnown = max ? initials.Min() : initials.Max(); 357 if (!worstKnown.IsAlmost(0)) { 358 worstTarget = targets.Max() * worstKnown; 359 bestTarget = targets.Min() * worstKnown; 360 worstKnowns[problem.Key] = worstKnown; 361 } 362 } 347 363 foreach (var run in problem.Value.Item2) { 348 364 var row = ((IndexedDataTable<double>)run.Results[table]).Rows.First().Values; … … 389 405 390 406 if (aggregateTargetsCheckBox.Checked) { 391 var length = CalculateHitsForAllTargets(hits, misses, resultsTable.Rows.First(), problem.Key, group.Key, problem.Value.Item1, maxEff);407 var length = CalculateHitsForAllTargets(hits, misses, resultsTable.Rows.First(), problem.Key, group.Key, problem.Value.Item1, worstKnowns.ContainsKey(problem.Key) ? worstKnowns[problem.Key] : 0, maxEff); 392 408 maxLength = Math.Max(length, maxLength); 393 409 } else { 394 CalculateHitsForEachTarget(hits, misses, resultsTable.Rows.First(), problem.Key, group.Key, problem.Value.Item1, maxEff);410 CalculateHitsForEachTarget(hits, misses, resultsTable.Rows.First(), problem.Key, group.Key, problem.Value.Item1, worstKnowns.ContainsKey(problem.Key) ? worstKnowns[problem.Key] : 0, maxEff); 395 411 } 396 412 noRuns++; … … 495 511 Dictionary<string, SortedList<double, int>> misses, 496 512 IndexedDataRow<double> row, ProblemDescription problem, 497 string group, double bestTarget, double maxEffort) { 498 foreach (var t in targets.Select(x => Tuple.Create((problem.IsMaximization() ? (1 - x) : (1 + x)) * bestTarget, x))) { 513 string group, double bestTarget, double worstKnown, double maxEffort) { 514 var max = problem.IsMaximization(); 515 var targetValues = targets.Select(t => { 516 double target = 0; 517 if (bestTarget > 0) { 518 target = (max ? (1 - t) : (1 + t)) * bestTarget; 519 } else if (bestTarget < 0) { 520 target = (max ? (1 + t) : (1 - t)) * bestTarget; 521 } else { 522 if (!worstKnown.IsAlmost(0)) 523 target = t * worstKnown; 524 } 525 return Tuple.Create(target, t); 526 }); 527 foreach (var t in targetValues) { 499 528 var l = t.Item1; 500 529 var key = group + "_" + (t.Item2 * 100) + "%_" + l; … … 515 544 } 516 545 if (!hit) { 517 var max = Math.Min(row.Values.Last().Item1, maxEffort);518 if (misses[key].ContainsKey(max ))519 misses[key][max ]++;520 else misses[key][max ] = 1;546 var maxEff = Math.Min(row.Values.Last().Item1, maxEffort); 547 if (misses[key].ContainsKey(maxEff)) 548 misses[key][maxEff]++; 549 else misses[key][maxEff] = 1; 521 550 } 522 551 } … … 526 555 Dictionary<string, SortedList<double, int>> misses, 527 556 IndexedDataRow<double> row, ProblemDescription problem, 528 string group, double bestTarget, double maxEffort) {557 string group, double bestTarget, double worstKnown, double maxEffort) { 529 558 var values = row.Values; 530 559 if (!hits.ContainsKey(group)) { … … 536 565 var j = 0; 537 566 while (i < targets.Length && j < values.Count) { 538 var target = (problem.IsMaximization() ? (1 - targets[i]) : (1 + targets[i])) * bestTarget; 567 var max = problem.IsMaximization(); 568 double target = 0; 569 if (bestTarget > 0) { 570 target = (max ? (1 - targets[i]) : (1 + targets[i])) * bestTarget; 571 } else if (bestTarget < 0) { 572 target = (max ? (1 + targets[i]) : (1 - targets[i])) * bestTarget; 573 } else { 574 if (!worstKnown.IsAlmost(0)) 575 target = targets[i] * worstKnown; 576 } 539 577 var current = values[j]; 540 578 if (current.Item1 > maxEffort) break;
Note: See TracChangeset
for help on using the changeset viewer.