Free cookie consent management tool by TermsFeed Policy Generator

Ignore:
Timestamp:
06/27/11 23:56:35 (13 years ago)
Author:
cneumuel
Message:

#1215

  • fixed issue with multiple problems (by introducing valuesReadOnly to IOptimizable)
  • fixed error message when removing last problem instance
  • made quality measure name configurable
File:
1 edited

Legend:

Unmodified
Added
Removed
  • branches/HeuristicLab.MetaOptimization/HeuristicLab.Problems.MetaOptimization/3.3/MetaOptimizationProblem.cs

    r6090 r6489  
    4040  public sealed class MetaOptimizationProblem : SingleObjectiveHeuristicOptimizationProblem<IParameterConfigurationEvaluator, IParameterConfigurationCreator>, IStorableContent {
    4141    public string Filename { get; set; }
    42    
     42
    4343    public const string AlgorithmTypeParameterName = "AlgorithmType";
    4444    public const string ProblemTypeParameterName = "ProblemType";
     
    4646    public const string ParameterConfigurationTreeParameterName = "ParameterConfiguration";
    4747    public const string RepetitionsParameterName = "Repetitions";
     48    public const string QualityMeasureNameName = "QualityMeasureName";
    4849
    4950    public const string IntValueManipulatorParameterName = "IntValueManipulator";
     
    6768    }
    6869    public IValueParameter<ParameterConfigurationTree> ParameterConfigurationTreeParameter {
    69       get { return (ValueParameter<ParameterConfigurationTree>)Parameters[ParameterConfigurationTreeParameterName]; }
     70      get { return (OptionalValueParameter<ParameterConfigurationTree>)Parameters[ParameterConfigurationTreeParameterName]; }
    7071    }
    7172    public IValueParameter<IntValue> RepetitionsParameter {
     
    7980    public IValueParameter<IDoubleValueManipulator> DoubleValueManipulatorParameter {
    8081      get { return (ValueParameter<IDoubleValueManipulator>)Parameters[DoubleValueManipulatorParameterName]; }
     82    }
     83    public IValueParameter<StringValue> QualityMeasureNameParameter {
     84      get { return (ValueParameter<StringValue>)Parameters[QualityMeasureNameName]; }
    8185    }
    8286    #endregion
     
    131135      Parameters.Add(new ValueParameter<ConstrainedTypeValue<IProblem>>(ProblemTypeParameterName, "The problem type.", new ConstrainedTypeValue<IProblem>()));
    132136      Parameters.Add(new ValueParameter<ConstrainedItemList<IProblem>>(ProblemsParameterName, "The problems that should be evaluated.", new ConstrainedItemList<IProblem>()));
    133       Parameters.Add(new ValueParameter<ParameterConfigurationTree>(ParameterConfigurationTreeParameterName, "Tree of algorithm parameters that should be optimized."));
     137      Parameters.Add(new OptionalValueParameter<ParameterConfigurationTree>(ParameterConfigurationTreeParameterName, "Tree of algorithm parameters that should be optimized.")); // needs to be optional, when last problem is removed from list, it must be set null
    134138      Parameters.Add(new ValueParameter<IntValue>(RepetitionsParameterName, "The number of evaluations for each problem.", new IntValue(3)));
     139      Parameters.Add(new ValueParameter<StringValue>(QualityMeasureNameName, "The name of the quality result of the base-level algorithm. Subresults can be accessed by dot separator.", new StringValue("BestQuality")));
    135140
    136141      var validIntManipulators = new ItemSet<IIntValueManipulator>(ApplicationManager.Manager.GetInstances<IIntValueManipulator>());
     
    174179    [StorableHook(HookType.AfterDeserialization)]
    175180    private void AfterDeserializationHook() {
     181      if(!Parameters.ContainsKey(QualityMeasureNameName)) Parameters.Add(new ValueParameter<StringValue>(QualityMeasureNameName, "The name of the quality result of the base-level algorithm. Subresults can be accessed by dot separator.", new StringValue("BestQuality"))); // backwards compatibility
    176182      RegisterParameterEvents();
    177183    }
     
    211217      if (RunsAnalyzer != null) {
    212218        RunsAnalyzer.ParameterConfigurationParameter.ActualName = ((RandomParameterConfigurationCreator)SolutionCreator).ParameterConfigurationParameter.ActualName;
    213       } 
     219      }
    214220      if (PMOPopulationDiversityAnalyzer != null) {
    215221        PMOPopulationDiversityAnalyzer.SolutionParameter.ActualName = ((RandomParameterConfigurationCreator)SolutionCreator).ParameterConfigurationParameter.ActualName;
     
    260266      IAlgorithm instance = (IAlgorithm)Activator.CreateInstance(AlgorithmType.Value);
    261267      this.ProblemType.ValidTypes = ApplicationManager.Manager.GetTypes(instance.ProblemType, true).ToList();
    262       this.ProblemType.Value = this.ProblemType.ValidTypes.SingleOrDefault(t => t == typeof(SingleObjectiveTestFunctionProblem)) ?? this.ProblemType.ValidTypes.Where(t => t != typeof(MetaOptimizationProblem)).FirstOrDefault();
    263       // ProblemType_ValueChanged will add one problem and create ParameterConfigurationTree
     268      var newProblemType = this.ProblemType.ValidTypes.SingleOrDefault(t => t == typeof(SingleObjectiveTestFunctionProblem)) ?? this.ProblemType.ValidTypes.Where(t => t != typeof(MetaOptimizationProblem)).FirstOrDefault();
     269      if (this.ProblemType.Value != newProblemType)
     270        this.ProblemType.Value = newProblemType; // ProblemType_ValueChanged will add one problem and create ParameterConfigurationTree
     271      else
     272        ProblemType_ValueChanged(this, EventArgs.Empty); // call explicitly
    264273    }
    265274
     
    274283    }
    275284
    276     private void Problems_ItemsAdded(object sender, Collections.CollectionItemsChangedEventArgs<IndexedItem<IProblem>> e) {
     285    private void Problems_ItemsAdded(object sender, CollectionItemsChangedEventArgs<IndexedItem<IProblem>> e) {
    277286      // the first problem in the list is always the instance for the algorithm - this way some basic wiring between problem and algorithm can be sustained
    278287      if (e.Items.Single().Index == 0) {
     
    287296    }
    288297
    289     private void Problems_ItemsRemoved(object sender, Collections.CollectionItemsChangedEventArgs<IndexedItem<IProblem>> e) {
     298    private void Problems_ItemsRemoved(object sender, CollectionItemsChangedEventArgs<IndexedItem<IProblem>> e) {
    290299      if (e.Items.Single().Index == 0) {
    291300        ParameterConfigurationTreeParameter.ActualValue = null;
Note: See TracChangeset for help on using the changeset viewer.