Changeset 14721


Ignore:
Timestamp:
03/06/17 17:53:46 (4 years ago)
Author:
mkommend
Message:

#2742: Added flag to store the history of best solutions for symbolic data analysis.

File:
1 edited

Legend:

Unmodified
Added
Removed
  • trunk/sources/HeuristicLab.Problems.DataAnalysis.Symbolic/3.4/Analyzers/SymbolicDataAnalysisSingleObjectiveTrainingBestSolutionAnalyzer.cs

    r14185 r14721  
    3535  [Item("SymbolicDataAnalysisSingleObjectiveTrainingBestSolutionAnalyzer", "An operator that analyzes the training best symbolic data analysis solution for single objective symbolic data analysis problems.")]
    3636  [StorableClass]
    37   public abstract class SymbolicDataAnalysisSingleObjectiveTrainingBestSolutionAnalyzer<T> : SymbolicDataAnalysisSingleObjectiveAnalyzer, IIterationBasedOperator
    38 
    39     where T : class, ISymbolicDataAnalysisSolution {
     37  public abstract class SymbolicDataAnalysisSingleObjectiveTrainingBestSolutionAnalyzer<T> : SymbolicDataAnalysisSingleObjectiveAnalyzer, IIterationBasedOperator where T : class, ISymbolicDataAnalysisSolution {
    4038    private const string TrainingBestSolutionParameterName = "Best training solution";
    4139    private const string TrainingBestSolutionQualityParameterName = "Best training solution quality";
    4240    private const string TrainingBestSolutionGenerationParameterName = "Best training solution generation";
     41    private const string TrainingBestSolutionsHistoryParameterName = "Best training solutions history";
    4342    private const string UpdateAlwaysParameterName = "Always update best solution";
    4443    private const string IterationsParameterName = "Iterations";
    4544    private const string MaximumIterationsParameterName = "Maximum Iterations";
     45    private const string StoreHistoryParameterName = "Store History";
    4646
    4747    #region parameter properties
     
    5555      get { return (ILookupParameter<IntValue>)Parameters[TrainingBestSolutionGenerationParameterName]; }
    5656    }
     57    public ILookupParameter<ItemList<T>> TrainingBestSolutionsHistoryParameter {
     58      get { return (ILookupParameter<ItemList<T>>)Parameters[TrainingBestSolutionsHistoryParameterName]; }
     59    }
    5760    public IFixedValueParameter<BoolValue> UpdateAlwaysParameter {
    5861      get { return (IFixedValueParameter<BoolValue>)Parameters[UpdateAlwaysParameterName]; }
     
    6366    public IValueLookupParameter<IntValue> MaximumIterationsParameter {
    6467      get { return (IValueLookupParameter<IntValue>)Parameters[MaximumIterationsParameterName]; }
     68    }
     69
     70    public IFixedValueParameter<BoolValue> StoreHistoryParameter {
     71      get { return (IFixedValueParameter<BoolValue>)Parameters[StoreHistoryParameterName]; }
    6572    }
    6673    #endregion
     
    7481      set { TrainingBestSolutionQualityParameter.ActualValue = value; }
    7582    }
    76     public BoolValue UpdateAlways {
    77       get { return UpdateAlwaysParameter.Value; }
     83    public bool UpdateAlways {
     84      get { return UpdateAlwaysParameter.Value.Value; }
     85      set { UpdateAlwaysParameter.Value.Value = value; }
     86    }
     87
     88    public bool StoreHistory {
     89      get { return StoreHistoryParameter.Value.Value; }
     90      set { StoreHistoryParameter.Value.Value = value; }
    7891    }
    7992    #endregion
     93
    8094
    8195    [StorableConstructor]
     
    8498    public SymbolicDataAnalysisSingleObjectiveTrainingBestSolutionAnalyzer()
    8599      : base() {
    86       Parameters.Add(new LookupParameter<T>(TrainingBestSolutionParameterName, "The training best symbolic data analyis solution."));
     100      Parameters.Add(new LookupParameter<T>(TrainingBestSolutionParameterName, "The best training symbolic data analyis solution."));
    87101      Parameters.Add(new LookupParameter<DoubleValue>(TrainingBestSolutionQualityParameterName, "The quality of the training best symbolic data analysis solution."));
    88102      Parameters.Add(new LookupParameter<IntValue>(TrainingBestSolutionGenerationParameterName, "The generation in which the best training solution was found."));
     
    90104      Parameters.Add(new LookupParameter<IntValue>(IterationsParameterName, "The number of performed iterations."));
    91105      Parameters.Add(new ValueLookupParameter<IntValue>(MaximumIterationsParameterName, "The maximum number of performed iterations.") { Hidden = true });
     106      Parameters.Add(new FixedValueParameter<BoolValue>(StoreHistoryParameterName, "Flag that determines whether all encountered best solutions should be stored as results.", new BoolValue(false)));
     107      Parameters.Add(new LookupParameter<ItemList<T>>(TrainingBestSolutionsHistoryParameterName, "The history of the best training symbolic data analysis solutions."));
    92108      UpdateAlwaysParameter.Hidden = true;
    93109    }
     
    105121      if (!Parameters.ContainsKey(MaximumIterationsParameterName))
    106122        Parameters.Add(new ValueLookupParameter<IntValue>(MaximumIterationsParameterName, "The maximum number of performed iterations.") { Hidden = true });
     123      if (!Parameters.ContainsKey(StoreHistoryParameterName))
     124        Parameters.Add(new FixedValueParameter<BoolValue>(StoreHistoryParameterName, "Flag that determines whether all encountered best solutions should be stored as results.", new BoolValue(false)));
     125      if (!Parameters.ContainsKey(TrainingBestSolutionsHistoryParameterName))
     126        Parameters.Add(new LookupParameter<ItemList<T>>(TrainingBestSolutionsHistoryParameterName, "The history of the best training symbolic data analysis solutions."));
    107127    }
    108128
    109129    public override IOperation Apply() {
     130      var results = ResultCollection;
     131      #region create results
     132      if (!results.ContainsKey(TrainingBestSolutionParameter.Name))
     133        results.Add(new Result(TrainingBestSolutionParameter.Name, TrainingBestSolutionParameter.Description, typeof(T)));
     134      if (!results.ContainsKey(TrainingBestSolutionQualityParameter.Name))
     135        results.Add(new Result(TrainingBestSolutionQualityParameter.Name, TrainingBestSolutionQualityParameter.Description, typeof(DoubleValue)));
     136      if (!results.ContainsKey(TrainingBestSolutionGenerationParameter.Name) && IterationsParameter.ActualValue != null)
     137        results.Add(new Result(TrainingBestSolutionGenerationParameter.Name, TrainingBestSolutionGenerationParameter.Description, typeof(IntValue)));
     138      if (StoreHistory && !results.ContainsKey(TrainingBestSolutionsHistoryParameter.Name)) {
     139
     140        results.Add(new Result(TrainingBestSolutionsHistoryParameter.Name, TrainingBestSolutionsHistoryParameter.Description, typeof(ItemList<T>)));
     141        TrainingBestSolutionsHistoryParameter.ActualValue = new ItemList<T>();
     142        results[TrainingBestSolutionsHistoryParameter.Name].Value = TrainingBestSolutionsHistoryParameter.ActualValue;
     143      }
     144      #endregion
     145
    110146      #region find best tree
    111147      double bestQuality = Maximization.Value ? double.NegativeInfinity : double.PositiveInfinity;
     
    121157      #endregion
    122158
    123       var results = ResultCollection;
    124       if (bestTree != null && (UpdateAlways.Value || TrainingBestSolutionQuality == null ||
     159      if (bestTree != null && (UpdateAlways || TrainingBestSolutionQuality == null ||
    125160        IsBetter(bestQuality, TrainingBestSolutionQuality.Value, Maximization.Value))) {
    126161        TrainingBestSolution = CreateSolution(bestTree, bestQuality);
     
    129164          TrainingBestSolutionGenerationParameter.ActualValue = new IntValue(IterationsParameter.ActualValue.Value);
    130165
    131         if (!results.ContainsKey(TrainingBestSolutionParameter.Name)) {
    132           results.Add(new Result(TrainingBestSolutionParameter.Name, TrainingBestSolutionParameter.Description, TrainingBestSolution));
    133           results.Add(new Result(TrainingBestSolutionQualityParameter.Name, TrainingBestSolutionQualityParameter.Description, TrainingBestSolutionQuality));
    134           if (TrainingBestSolutionGenerationParameter.ActualValue != null)
    135             results.Add(new Result(TrainingBestSolutionGenerationParameter.Name, TrainingBestSolutionGenerationParameter.Description, TrainingBestSolutionGenerationParameter.ActualValue));
    136         } else {
    137           results[TrainingBestSolutionParameter.Name].Value = TrainingBestSolution;
    138           results[TrainingBestSolutionQualityParameter.Name].Value = TrainingBestSolutionQuality;
    139           if (TrainingBestSolutionGenerationParameter.ActualValue != null)
    140             results[TrainingBestSolutionGenerationParameter.Name].Value = TrainingBestSolutionGenerationParameter.ActualValue;
     166        results[TrainingBestSolutionParameter.Name].Value = TrainingBestSolution;
     167        results[TrainingBestSolutionQualityParameter.Name].Value = TrainingBestSolutionQuality;
     168        if (TrainingBestSolutionGenerationParameter.ActualValue != null)
     169          results[TrainingBestSolutionGenerationParameter.Name].Value = TrainingBestSolutionGenerationParameter.ActualValue;
    141170
     171        if (StoreHistory) {
     172          TrainingBestSolutionsHistoryParameter.ActualValue.Add(TrainingBestSolution);
    142173        }
    143174      }
Note: See TracChangeset for help on using the changeset viewer.