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/KNearestNeighborRecommender.cs

    r13786 r13787  
    2323using HeuristicLab.Core;
    2424using HeuristicLab.Data;
    25 using HeuristicLab.Optimization;
    2625using HeuristicLab.Parameters;
    2726using HeuristicLab.Persistence.Default.CompositeSerializers.Storable;
    28 using System.Collections.Generic;
    29 using System.Linq;
    3027
    3128namespace HeuristicLab.OptimizationExpertSystem.Common {
     
    3330  [StorableClass]
    3431  public sealed class KNearestNeighborRecommender : ParameterizedNamedItem, IAlgorithmInstanceRecommender {
    35     private KnowledgeCenter okc;
    36 
    37     private IFixedValueParameter<EnumValue<ProblemInstanceProximityType>> ProximityTypeParameter {
    38       get { return (IFixedValueParameter<EnumValue<ProblemInstanceProximityType>>)Parameters["ProximityType"]; }
    39     }
    40 
    41     public ProblemInstanceProximityType ProximityType {
    42       get { return ProximityTypeParameter.Value.Value; }
    43       set { ProximityTypeParameter.Value.Value = value; }
    44     }
    45 
     32   
    4633    private IFixedValueParameter<IntValue> KParameter {
    4734      get { return (IFixedValueParameter<IntValue>)Parameters["K"]; }
     
    5239    private KNearestNeighborRecommender(KNearestNeighborRecommender original, Cloner cloner)
    5340      : base(original, cloner) { }
    54     public KNearestNeighborRecommender(KnowledgeCenter okc) {
    55       this.okc = okc;
    56       Parameters.Add(new FixedValueParameter<EnumValue<ProblemInstanceProximityType>>("ProximityType", "The type of neighbor proximity.", new EnumValue<ProblemInstanceProximityType>(ProblemInstanceProximityType.FeatureSpace)));
     41    public KNearestNeighborRecommender() {
    5742      Parameters.Add(new FixedValueParameter<IntValue>("K", "The number of nearest neighbors to consider.", new IntValue(5)));
    5843    }
     
    6247    }
    6348
    64     public IEnumerable<IAlgorithm> GetRanking() {
    65       if (okc.Problem.ProblemId == -1) yield break;
    66 
    67       var distances = okc.GetProblemDistances(ProximityType);
    68       var K = KParameter.Value.Value;
    69       var performances = new Dictionary<IAlgorithm, List<double>>();
    70       for (var k = 0; k < K; k++) {
    71         if (distances.Count == 0) break;
    72         var min = distances.MinItems(x => x.Value).First();
    73         // lookup algorithm performances in min
    74         var perfs = okc.GetAlgorithmPerformance(min.Key);
    75         if (perfs.Count == 0) {
    76           k--;
    77           continue;
    78         }
    79         foreach (var p in perfs) {
    80           var ert = p.Value;
    81           if (double.IsNaN(ert)) ert = int.MaxValue;
    82           List<double> erts;
    83           if (!performances.TryGetValue(p.Key, out erts)) {
    84             performances[p.Key] = new List<double>() { ert }; ;
    85           } else erts.Add(ert);
    86         }
    87         distances.Remove(min.Key);
    88       }
    89       foreach (var alg in performances.Select(x => new { Alg = x.Key, Perf = x.Value.Average() })
    90                          .OrderBy(x => x.Perf)
    91                          .Select(x => x.Alg))
    92         yield return alg;
     49    public IRecommendationModel TrainModel(KnowledgeCenter kc, string[] characteristics) {
     50      return new KNearestNeighborModel(KParameter.Value.Value, characteristics);
    9351    }
    9452  }
Note: See TracChangeset for help on using the changeset viewer.