Free cookie consent management tool by TermsFeed Policy Generator

Ignore:
Timestamp:
11/16/11 15:07:36 (12 years ago)
Author:
ascheibe
Message:

#1659 updated branch from trunk

Location:
branches/Benchmarking
Files:
3 edited

Legend:

Unmodified
Added
Removed
  • branches/Benchmarking

  • branches/Benchmarking/sources

  • branches/Benchmarking/sources/HeuristicLab.Problems.TestFunctions/3.3/SingleObjectiveTestFunctionProblem.cs

    r6051 r7000  
    2222using System;
    2323using System.Collections.Generic;
    24 using System.Drawing;
    2524using System.Linq;
    2625using HeuristicLab.Common;
     
    3736  [StorableClass]
    3837  [Creatable("Problems")]
    39   public sealed class SingleObjectiveTestFunctionProblem : ParameterizedNamedItem, ISingleObjectiveHeuristicOptimizationProblem, IStorableContent {
     38  public sealed class SingleObjectiveTestFunctionProblem : SingleObjectiveHeuristicOptimizationProblem<ISingleObjectiveTestFunctionProblemEvaluator, IRealVectorCreator>, IStorableContent {
    4039    public string Filename { get; set; }
    4140
     
    4746    private StdDevStrategyVectorManipulator strategyVectorManipulator;
    4847
    49     public override Image ItemImage {
    50       get { return HeuristicLab.Common.Resources.VSImageLibrary.Type; }
    51     }
    52 
    5348    #region Parameter Properties
    54     public ValueParameter<BoolValue> MaximizationParameter {
    55       get { return (ValueParameter<BoolValue>)Parameters["Maximization"]; }
    56     }
    57     IParameter ISingleObjectiveHeuristicOptimizationProblem.MaximizationParameter {
    58       get { return MaximizationParameter; }
    59     }
    6049    public ValueParameter<DoubleMatrix> BoundsParameter {
    6150      get { return (ValueParameter<DoubleMatrix>)Parameters["Bounds"]; }
     
    6453      get { return (ValueParameter<IntValue>)Parameters["ProblemSize"]; }
    6554    }
    66     public ValueParameter<IRealVectorCreator> SolutionCreatorParameter {
    67       get { return (ValueParameter<IRealVectorCreator>)Parameters["SolutionCreator"]; }
    68     }
    69     IParameter IHeuristicOptimizationProblem.SolutionCreatorParameter {
    70       get { return SolutionCreatorParameter; }
    71     }
    72     public ValueParameter<ISingleObjectiveTestFunctionProblemEvaluator> EvaluatorParameter {
    73       get { return (ValueParameter<ISingleObjectiveTestFunctionProblemEvaluator>)Parameters["Evaluator"]; }
    74     }
    75     IParameter IHeuristicOptimizationProblem.EvaluatorParameter {
    76       get { return EvaluatorParameter; }
    77     }
    78     public OptionalValueParameter<DoubleValue> BestKnownQualityParameter {
    79       get { return (OptionalValueParameter<DoubleValue>)Parameters["BestKnownQuality"]; }
    80     }
    81     IParameter ISingleObjectiveHeuristicOptimizationProblem.BestKnownQualityParameter {
    82       get { return BestKnownQualityParameter; }
    83     }
    8455    public OptionalValueParameter<RealVector> BestKnownSolutionParameter {
    8556      get { return (OptionalValueParameter<RealVector>)Parameters["BestKnownSolution"]; }
     
    8859
    8960    #region Properties
    90     public BoolValue Maximization {
    91       get { return MaximizationParameter.Value; }
    92       set { MaximizationParameter.Value = value; }
    93     }
    9461    public DoubleMatrix Bounds {
    9562      get { return BoundsParameter.Value; }
     
    10067      set { ProblemSizeParameter.Value = value; }
    10168    }
    102     public IRealVectorCreator SolutionCreator {
    103       get { return SolutionCreatorParameter.Value; }
    104       set { SolutionCreatorParameter.Value = value; }
    105     }
    106     ISolutionCreator IHeuristicOptimizationProblem.SolutionCreator {
    107       get { return SolutionCreatorParameter.Value; }
    108     }
    109     public ISingleObjectiveTestFunctionProblemEvaluator Evaluator {
    110       get { return EvaluatorParameter.Value; }
    111       set { EvaluatorParameter.Value = value; }
    112     }
    113     ISingleObjectiveEvaluator ISingleObjectiveHeuristicOptimizationProblem.Evaluator {
    114       get { return EvaluatorParameter.Value; }
    115     }
    116     IEvaluator IHeuristicOptimizationProblem.Evaluator {
    117       get { return EvaluatorParameter.Value; }
    118     }
    119     public DoubleValue BestKnownQuality {
    120       get { return BestKnownQualityParameter.Value; }
    121       set { BestKnownQualityParameter.Value = value; }
    122     }
    123     public IEnumerable<IOperator> Operators {
    124       get { return operators; }
    125     }
    12669    private BestSingleObjectiveTestFunctionSolutionAnalyzer BestSingleObjectiveTestFunctionSolutionAnalyzer {
    127       get { return operators.OfType<BestSingleObjectiveTestFunctionSolutionAnalyzer>().FirstOrDefault(); }
    128     }
    129     #endregion
    130 
    131     [Storable]
    132     private List<IOperator> operators;
     70      get { return Operators.OfType<BestSingleObjectiveTestFunctionSolutionAnalyzer>().FirstOrDefault(); }
     71    }
     72    #endregion
     73
     74    // BackwardsCompatibility3.3
     75    #region Backwards compatible code, remove with 3.4
     76    [Obsolete]
     77    [Storable(Name = "operators")]
     78    private IEnumerable<IOperator> oldOperators {
     79      get { return null; }
     80      set {
     81        if (value != null && value.Any())
     82          Operators.AddRange(value);
     83      }
     84    }
     85    #endregion
    13386
    13487    [StorableConstructor]
     
    13689    private SingleObjectiveTestFunctionProblem(SingleObjectiveTestFunctionProblem original, Cloner cloner)
    13790      : base(original, cloner) {
    138       operators = original.operators.Where(x => original.IsNotFieldReferenced(x)).Select(x => cloner.Clone(x)).ToList();
    13991      strategyVectorCreator = cloner.Clone(original.strategyVectorCreator);
    140       operators.Add(strategyVectorCreator);
    14192      strategyVectorCrossover = cloner.Clone(original.strategyVectorCrossover);
    142       operators.Add(strategyVectorCrossover);
    14393      strategyVectorManipulator = cloner.Clone(original.strategyVectorManipulator);
    144       operators.Add(strategyVectorManipulator);
    14594      AttachEventHandlers();
    14695    }
    14796    public SingleObjectiveTestFunctionProblem()
    148       : base() {
    149       UniformRandomRealVectorCreator creator = new UniformRandomRealVectorCreator();
    150       AckleyEvaluator evaluator = new AckleyEvaluator();
    151 
    152       Parameters.Add(new ValueParameter<BoolValue>("Maximization", "Set to false as most test functions are minimization problems.", new BoolValue(evaluator.Maximization)));
    153       Parameters.Add(new ValueParameter<DoubleMatrix>("Bounds", "The lower and upper bounds in each dimension.", evaluator.Bounds));
     97      : base(new AckleyEvaluator(), new UniformRandomRealVectorCreator()) {
     98      Parameters.Add(new ValueParameter<DoubleMatrix>("Bounds", "The lower and upper bounds in each dimension.", Evaluator.Bounds));
    15499      Parameters.Add(new ValueParameter<IntValue>("ProblemSize", "The dimension of the problem.", new IntValue(2)));
    155       Parameters.Add(new ValueParameter<IRealVectorCreator>("SolutionCreator", "The operator which should be used to create new test function solutions.", creator));
    156       Parameters.Add(new ValueParameter<ISingleObjectiveTestFunctionProblemEvaluator>("Evaluator", "The operator which should be used to evaluate test function solutions.", evaluator));
    157       Parameters.Add(new OptionalValueParameter<DoubleValue>("BestKnownQuality", "The quality of the best known solution of this test function.", new DoubleValue(evaluator.BestKnownQuality)));
    158100      Parameters.Add(new OptionalValueParameter<RealVector>("BestKnownSolution", "The best known solution for this test function instance."));
     101
     102      Maximization.Value = Evaluator.Maximization;
     103      BestKnownQuality.Value = Evaluator.BestKnownQuality;
    159104
    160105      strategyVectorCreator = new StdDevStrategyVectorCreator();
     
    165110      strategyVectorManipulator.GeneralLearningRateParameter.Value = new DoubleValue(0.5);
    166111
    167       creator.RealVectorParameter.ActualName = "Point";
     112      SolutionCreator.RealVectorParameter.ActualName = "Point";
    168113      ParameterizeSolutionCreator();
    169114      ParameterizeEvaluator();
     
    185130
    186131    #region Events
    187     public event EventHandler SolutionCreatorChanged;
    188     private void OnSolutionCreatorChanged() {
    189       EventHandler handler = SolutionCreatorChanged;
    190       if (handler != null) handler(this, EventArgs.Empty);
    191     }
    192     public event EventHandler EvaluatorChanged;
    193     private void OnEvaluatorChanged() {
    194       EventHandler handler = EvaluatorChanged;
    195       if (handler != null) handler(this, EventArgs.Empty);
    196     }
    197     public event EventHandler OperatorsChanged;
    198     private void OnOperatorsChanged() {
    199       EventHandler handler = OperatorsChanged;
    200       if (handler != null) handler(this, EventArgs.Empty);
    201     }
    202     public event EventHandler Reset;
    203     private void OnReset() {
    204       EventHandler handler = Reset;
    205       if (handler != null) handler(this, EventArgs.Empty);
    206     }
    207 
    208     private void ProblemSizeParameter_ValueChanged(object sender, EventArgs e) {
    209       ProblemSize.ValueChanged += new EventHandler(ProblemSize_ValueChanged);
    210       ProblemSize_ValueChanged(null, EventArgs.Empty);
    211     }
    212     private void ProblemSize_ValueChanged(object sender, EventArgs e) {
    213       if (ProblemSize.Value < 1) ProblemSize.Value = 1;
    214       ParameterizeSolutionCreator();
    215       ParameterizeEvaluator();
    216       strategyVectorManipulator.GeneralLearningRateParameter.Value = new DoubleValue(1.0 / Math.Sqrt(2 * ProblemSize.Value));
    217       strategyVectorManipulator.LearningRateParameter.Value = new DoubleValue(1.0 / Math.Sqrt(2 * Math.Sqrt(ProblemSize.Value)));
    218       OnReset();
    219     }
    220     private void SolutionCreatorParameter_ValueChanged(object sender, EventArgs e) {
     132    protected override void OnSolutionCreatorChanged() {
     133      base.OnSolutionCreatorChanged();
    221134      ParameterizeSolutionCreator();
    222135      ParameterizeAnalyzers();
     136      SolutionCreator.RealVectorParameter.ActualNameChanged += new EventHandler(SolutionCreator_RealVectorParameter_ActualNameChanged);
    223137      SolutionCreator_RealVectorParameter_ActualNameChanged(null, EventArgs.Empty);
    224       OnSolutionCreatorChanged();
    225     }
    226     private void SolutionCreator_RealVectorParameter_ActualNameChanged(object sender, EventArgs e) {
    227       ParameterizeEvaluator();
    228       ParameterizeOperators();
    229       ParameterizeAnalyzers();
    230     }
    231     private void EvaluatorParameter_ValueChanged(object sender, EventArgs e) {
     138    }
     139    protected override void OnEvaluatorChanged() {
     140      base.OnEvaluatorChanged();
    232141      ParameterizeEvaluator();
    233142      UpdateMoveEvaluators();
     
    242151      Evaluator.QualityParameter.ActualNameChanged += new EventHandler(Evaluator_QualityParameter_ActualNameChanged);
    243152      Evaluator_QualityParameter_ActualNameChanged(null, EventArgs.Empty);
    244       OnEvaluatorChanged();
    245153      OnReset();
     154    }
     155    private void ProblemSizeParameter_ValueChanged(object sender, EventArgs e) {
     156      ProblemSize.ValueChanged += new EventHandler(ProblemSize_ValueChanged);
     157      ProblemSize_ValueChanged(null, EventArgs.Empty);
     158    }
     159    private void ProblemSize_ValueChanged(object sender, EventArgs e) {
     160      if (ProblemSize.Value < 1) ProblemSize.Value = 1;
     161      ParameterizeSolutionCreator();
     162      ParameterizeEvaluator();
     163      strategyVectorManipulator.GeneralLearningRateParameter.Value = new DoubleValue(1.0 / Math.Sqrt(2 * ProblemSize.Value));
     164      strategyVectorManipulator.LearningRateParameter.Value = new DoubleValue(1.0 / Math.Sqrt(2 * Math.Sqrt(ProblemSize.Value)));
     165      OnReset();
     166    }
     167    private void SolutionCreator_RealVectorParameter_ActualNameChanged(object sender, EventArgs e) {
     168      ParameterizeEvaluator();
     169      ParameterizeOperators();
     170      ParameterizeAnalyzers();
    246171    }
    247172    private void Evaluator_QualityParameter_ActualNameChanged(object sender, EventArgs e) {
     
    305230      // BackwardsCompatibility3.3
    306231      #region Backwards compatible code (remove with 3.4)
    307       if (operators == null) InitializeOperators();
     232      if (Operators.Count == 0) InitializeOperators();
    308233      #endregion
    309234      AttachEventHandlers();
     
    316241      Bounds.ToStringChanged += new EventHandler(Bounds_ToStringChanged);
    317242      Bounds.ItemChanged += new EventHandler<EventArgs<int, int>>(Bounds_ItemChanged);
    318       SolutionCreatorParameter.ValueChanged += new EventHandler(SolutionCreatorParameter_ValueChanged);
    319243      SolutionCreator.RealVectorParameter.ActualNameChanged += new EventHandler(SolutionCreator_RealVectorParameter_ActualNameChanged);
    320       EvaluatorParameter.ValueChanged += new EventHandler(EvaluatorParameter_ValueChanged);
    321244      Evaluator.QualityParameter.ActualNameChanged += new EventHandler(Evaluator_QualityParameter_ActualNameChanged);
    322245      strategyVectorCreator.BoundsParameter.ValueChanged += new EventHandler(strategyVectorCreator_BoundsParameter_ValueChanged);
     
    334257    }
    335258    private void InitializeOperators() {
    336       operators = new List<IOperator>();
    337       operators.Add(new BestSingleObjectiveTestFunctionSolutionAnalyzer());
     259      Operators.Add(new BestSingleObjectiveTestFunctionSolutionAnalyzer());
    338260      ParameterizeAnalyzers();
    339       operators.AddRange(ApplicationManager.Manager.GetInstances<IRealVectorOperator>().Cast<IOperator>());
    340       operators.Add(strategyVectorCreator);
    341       operators.Add(strategyVectorCrossover);
    342       operators.Add(strategyVectorManipulator);
     261      Operators.AddRange(ApplicationManager.Manager.GetInstances<IRealVectorOperator>().Cast<IOperator>());
     262      Operators.Add(strategyVectorCreator);
     263      Operators.Add(strategyVectorCrossover);
     264      Operators.Add(strategyVectorManipulator);
    343265      UpdateMoveEvaluators();
    344266      ParameterizeOperators();
     
    354276    private void UpdateMoveEvaluators() {
    355277      foreach (ISingleObjectiveTestFunctionMoveEvaluator op in Operators.OfType<ISingleObjectiveTestFunctionMoveEvaluator>().ToList())
    356         operators.Remove(op);
     278        Operators.Remove(op);
    357279      foreach (ISingleObjectiveTestFunctionMoveEvaluator op in ApplicationManager.Manager.GetInstances<ISingleObjectiveTestFunctionMoveEvaluator>())
    358280        if (op.EvaluatorType == Evaluator.GetType()) {
    359           operators.Add(op);
     281          Operators.Add(op);
    360282          #region Synchronize evaluator specific parameters with the parameters of the corresponding move evaluators
    361283          if (op is ISphereMoveEvaluator) {
Note: See TracChangeset for help on using the changeset viewer.