Free cookie consent management tool by TermsFeed Policy Generator

Ignore:
Timestamp:
04/24/16 10:03:52 (8 years ago)
Author:
abeham
Message:

#2457: worked on performance modeling

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  
    3535  [StorableClass]
    3636  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     }
    4237
    4338    private IFixedValueParameter<DoubleValue> NeighborhoodFactorParameter {
    4439      get { return (IFixedValueParameter<DoubleValue>)Parameters["NeighborhoodFactor"]; }
    45     }
    46 
    47     public ProblemInstanceProximityType ProximityType {
    48       get { return ProximityTypeParameter.Value.Value; }
    49       set { ProximityTypeParameter.Value.Value = value; }
    5040    }
    5141
     
    5949    private OverallBestRecommender(OverallBestRecommender original, Cloner cloner)
    6050      : 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() {
    6452      Parameters.Add(new FixedValueParameter<DoubleValue>("NeighborhoodFactor", "Penalize neighbors that are far away.", new DoubleValue(5)));
    6553    }
     
    6957    }
    7058
    71     public IEnumerable<IAlgorithm> GetRanking() {
    72       if (okc.Problem.ProblemId == -1) yield break;
    73 
     59    public IRecommendationModel TrainModel(KnowledgeCenter kc, string[] characteristics) {
    7460      var instances = new List<Tuple<IAlgorithm, double>>();
    75       foreach (var relevantRuns in okc.GetKnowledgeBaseByAlgorithm()) {
     61      foreach (var relevantRuns in kc.GetKnowledgeBaseByAlgorithm()) {
    7662        var algorithm = relevantRuns.Key;
    7763        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)))
    7965                              .Where(x => x.Item2 != null)
    8066                              .Select(x => Tuple.Create(x.Item1, ((DoubleValue)x.Item2.Parameters["BestKnownQuality"]).Value))
     
    8470        foreach (var problemRuns in relevantRuns.Value.GroupBy(x => ((StringValue)x.Parameters["Problem Name"]).Value)) {
    8571          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;
    8773          if (double.IsNaN(ert)) ert = int.MaxValue;
    8874          avgERT += ert;
     
    9076        }
    9177        avgERT /= count;
    92         instances.Add(Tuple.Create(algorithm, avgERT));
     78        instances.Add(Tuple.Create((IAlgorithm)algorithm.Clone(), avgERT));
    9379      }
    9480
    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));
    9782    }
    9883  }
Note: See TracChangeset for help on using the changeset viewer.