Free cookie consent management tool by TermsFeed Policy Generator

Ignore:
Timestamp:
05/11/10 21:16:12 (14 years ago)
Author:
abeham
Message:

#893

  • Removed best known quality tracking from BestAverageWorstQualityAnalyzer
  • Added best known quality / solution tracking to problem specific analyzers
File:
1 edited

Legend:

Unmodified
Added
Removed
  • trunk/sources/HeuristicLab.Problems.OneMax/3.3/Analyzers/BestOneMaxSolutionAnalyzer.cs

    r3667 r3787  
    3939  [StorableClass]
    4040  class BestOneMaxSolutionAnalyzer : SingleSuccessorOperator, IAnalyzer {
    41 
     41    public LookupParameter<BoolValue> MaximizationParameter {
     42      get { return (LookupParameter<BoolValue>)Parameters["Maximization"]; }
     43    }
    4244    public ScopeTreeLookupParameter<BinaryVector> BinaryVectorParameter {
    4345      get { return (ScopeTreeLookupParameter<BinaryVector>)Parameters["BinaryVector"]; }
     
    5254      get { return (ValueLookupParameter<ResultCollection>)Parameters["Results"]; }
    5355    }
     56    public LookupParameter<DoubleValue> BestKnownQualityParameter {
     57      get { return (LookupParameter<DoubleValue>)Parameters["BestKnownQuality"]; }
     58    }
    5459
    5560    public BestOneMaxSolutionAnalyzer()
    5661      : base() {
     62      Parameters.Add(new LookupParameter<BoolValue>("Maximization", "True if the problem is a maximization problem."));
    5763      Parameters.Add(new ScopeTreeLookupParameter<BinaryVector>("BinaryVector", "The Onemax solutions from which the best solution should be visualized."));
    58 
    5964      Parameters.Add(new ScopeTreeLookupParameter<DoubleValue>("Quality", "The qualities of the Onemax solutions which should be visualized."));
    6065      Parameters.Add(new LookupParameter<OneMaxSolution>("BestSolution", "The best Onemax solution."));
    6166      Parameters.Add(new ValueLookupParameter<ResultCollection>("Results", "The result collection where the Onemax solution should be stored."));
     67      Parameters.Add(new LookupParameter<DoubleValue>("BestKnownQuality", "The quality of the best known solution."));
    6268    }
    6369
     
    6672      ItemArray<DoubleValue> qualities = QualityParameter.ActualValue;
    6773      ResultCollection results = ResultsParameter.ActualValue;
     74      bool max = MaximizationParameter.ActualValue.Value;
     75      DoubleValue bestKnownQuality = BestKnownQualityParameter.ActualValue;
    6876
    69       int i = qualities.Select((x, index) => new { index, x.Value }).OrderBy(x => x.Value).First().index;
     77      int i = -1;
     78      if (!max)
     79        i = qualities.Select((x, index) => new { index, x.Value }).OrderBy(x => x.Value).First().index;
     80      else i = qualities.Select((x, index) => new { index, x.Value }).OrderByDescending(x => x.Value).First().index;
     81
     82      if (bestKnownQuality == null ||
     83          max && qualities[i].Value > bestKnownQuality.Value ||
     84          !max && qualities[i].Value < bestKnownQuality.Value) {
     85        BestKnownQualityParameter.ActualValue = new DoubleValue(qualities[i].Value);
     86      }
    7087
    7188      OneMaxSolution solution = BestSolutionParameter.ActualValue;
    7289      if (solution == null) {
    73         solution = new OneMaxSolution(binaryVectors[i], QualityParameter.ActualValue[i]);
     90        solution = new OneMaxSolution((BinaryVector)binaryVectors[i].Clone(), new DoubleValue(qualities[i].Value));
    7491        BestSolutionParameter.ActualValue = solution;
    7592        results.Add(new Result("Best OneMax Solution", solution));
    7693      }  else {
    77         solution.BinaryVector = binaryVectors[i];
    78         solution.Quality = QualityParameter.ActualValue[i];
    79 
    80         results["Best OneMax Solution"].Value = solution;
     94        if (max && qualities[i].Value > solution.Quality.Value ||
     95          !max && qualities[i].Value < solution.Quality.Value) {
     96          solution.BinaryVector = (BinaryVector)binaryVectors[i].Clone();
     97          solution.Quality = new DoubleValue(qualities[i].Value);
     98        }
    8199      }
    82100
Note: See TracChangeset for help on using the changeset viewer.