Changeset 13787 for branches/PerformanceComparison/HeuristicLab.OptimizationExpertSystem.Common/3.3/Recommenders/OverallBestRecommender.cs
- Timestamp:
- 04/24/16 10:03:52 (8 years ago)
- Location:
- branches/PerformanceComparison/HeuristicLab.OptimizationExpertSystem.Common/3.3/Recommenders
- Files:
-
- 1 added
- 1 moved
Legend:
- Unmodified
- Added
- Removed
-
branches/PerformanceComparison/HeuristicLab.OptimizationExpertSystem.Common/3.3/Recommenders/OverallBestRecommender.cs
r13786 r13787 35 35 [StorableClass] 36 36 public class OverallBestRecommender : ParameterizedNamedItem, IAlgorithmInstanceRecommender { 37 private KnowledgeCenter okc;38 39 private IFixedValueParameter<EnumValue<ProblemInstanceProximityType>> ProximityTypeParameter {40 get { return (IFixedValueParameter<EnumValue<ProblemInstanceProximityType>>)Parameters["ProximityType"]; }41 }42 37 43 38 private IFixedValueParameter<DoubleValue> NeighborhoodFactorParameter { 44 39 get { return (IFixedValueParameter<DoubleValue>)Parameters["NeighborhoodFactor"]; } 45 }46 47 public ProblemInstanceProximityType ProximityType {48 get { return ProximityTypeParameter.Value.Value; }49 set { ProximityTypeParameter.Value.Value = value; }50 40 } 51 41 … … 59 49 private OverallBestRecommender(OverallBestRecommender original, Cloner cloner) 60 50 : base(original, cloner) { } 61 public OverallBestRecommender(KnowledgeCenter okc) { 62 this.okc = okc; 63 Parameters.Add(new FixedValueParameter<EnumValue<ProblemInstanceProximityType>>("ProximityType", "The type of neighbor proximity.", new EnumValue<ProblemInstanceProximityType>(ProblemInstanceProximityType.FeatureSpace))); 51 public OverallBestRecommender() { 64 52 Parameters.Add(new FixedValueParameter<DoubleValue>("NeighborhoodFactor", "Penalize neighbors that are far away.", new DoubleValue(5))); 65 53 } … … 69 57 } 70 58 71 public IEnumerable<IAlgorithm> GetRanking() { 72 if (okc.Problem.ProblemId == -1) yield break; 73 59 public IRecommendationModel TrainModel(KnowledgeCenter kc, string[] characteristics) { 74 60 var instances = new List<Tuple<IAlgorithm, double>>(); 75 foreach (var relevantRuns in okc.GetKnowledgeBaseByAlgorithm()) {61 foreach (var relevantRuns in kc.GetKnowledgeBaseByAlgorithm()) { 76 62 var algorithm = relevantRuns.Key; 77 63 var pis = relevantRuns.Value.Select(x => ((StringValue)x.Parameters["Problem Name"]).Value).Distinct() 78 .Select(x => Tuple.Create(x, okc.ProblemInstances.SingleOrDefault(y => ((StringValue)y.Parameters["Problem Name"]).Value == x)))64 .Select(x => Tuple.Create(x, kc.ProblemInstances.SingleOrDefault(y => ((StringValue)y.Parameters["Problem Name"]).Value == x))) 79 65 .Where(x => x.Item2 != null) 80 66 .Select(x => Tuple.Create(x.Item1, ((DoubleValue)x.Item2.Parameters["BestKnownQuality"]).Value)) … … 84 70 foreach (var problemRuns in relevantRuns.Value.GroupBy(x => ((StringValue)x.Parameters["Problem Name"]).Value)) { 85 71 var bkq = pis[problemRuns.Key]; 86 var ert = ExpectedRuntimeHelper.CalculateErt(problemRuns.ToList(), "QualityPerEvaluations", ( okc.Maximization ? (1 - okc.MinimumTarget.Value) : (1 + okc.MinimumTarget.Value)) * bkq, okc.Maximization).ExpectedRuntime;72 var ert = ExpectedRuntimeHelper.CalculateErt(problemRuns.ToList(), "QualityPerEvaluations", (kc.Maximization ? (1 - kc.MinimumTarget.Value) : (1 + kc.MinimumTarget.Value)) * bkq, kc.Maximization).ExpectedRuntime; 87 73 if (double.IsNaN(ert)) ert = int.MaxValue; 88 74 avgERT += ert; … … 90 76 } 91 77 avgERT /= count; 92 instances.Add(Tuple.Create( algorithm, avgERT));78 instances.Add(Tuple.Create((IAlgorithm)algorithm.Clone(), avgERT)); 93 79 } 94 80 95 foreach (var alg in instances.OrderBy(x => x.Item2).Select(x => (IAlgorithm)x.Item1.Clone())) 96 yield return alg; 81 return new FixedRankModel(instances.OrderBy(x => x.Item2)); 97 82 } 98 83 }
Note: See TracChangeset
for help on using the changeset viewer.