Free cookie consent management tool by TermsFeed Policy Generator

Ignore:
Timestamp:
10/26/11 23:36:10 (13 years ago)
Author:
abeham
Message:

#1663

  • Added an *Operators* parameter in Problem
  • Adapted KnapsackProblem, OnemaxProblem, SingleObjectiveTestFunctionProblem, TravelingSalesmanProblem, and VehicleRoutingProblem to derive from SingleObjectiveHeuristicOptimizationProblem<U, V>, renamed and marked old list as obsolete. Note that QuadraticAssignmentProblem, as well as the new DataAnalysisProblems already derived from that class. ArtificialAntProblem was not yet modified.
  • Added some test lists and adapted SamplesTest
  • Added plugin dependencies that the unit test was complaining about
File:
1 edited

Legend:

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

    r6042 r6938  
    2222using System;
    2323using System.Collections.Generic;
    24 using System.Drawing;
    2524using System.Linq;
    2625using HeuristicLab.Common;
     
    3736  [Creatable("Problems")]
    3837  [StorableClass]
    39   public sealed class OneMaxProblem : ParameterizedNamedItem, ISingleObjectiveHeuristicOptimizationProblem, IStorableContent {
     38  public sealed class OneMaxProblem : SingleObjectiveHeuristicOptimizationProblem<IOneMaxEvaluator, IBinaryVectorCreator>, IStorableContent {
    4039    public string Filename { get; set; }
    4140
    42     public override Image ItemImage {
    43       get { return HeuristicLab.Common.Resources.VSImageLibrary.Type; }
    44     }
    45 
    4641    #region Parameter Properties
    47     public ValueParameter<BoolValue> MaximizationParameter {
    48       get { return (ValueParameter<BoolValue>)Parameters["Maximization"]; }
    49     }
    50     IParameter ISingleObjectiveHeuristicOptimizationProblem.MaximizationParameter {
    51       get { return MaximizationParameter; }
    52     }
    5342    public ValueParameter<IntValue> LengthParameter {
    5443      get { return (ValueParameter<IntValue>)Parameters["Length"]; }
    55     }
    56     public ValueParameter<IBinaryVectorCreator> SolutionCreatorParameter {
    57       get { return (ValueParameter<IBinaryVectorCreator>)Parameters["SolutionCreator"]; }
    58     }
    59     IParameter IHeuristicOptimizationProblem.SolutionCreatorParameter {
    60       get { return SolutionCreatorParameter; }
    61     }
    62     public ValueParameter<IOneMaxEvaluator> EvaluatorParameter {
    63       get { return (ValueParameter<IOneMaxEvaluator>)Parameters["Evaluator"]; }
    64     }
    65     IParameter IHeuristicOptimizationProblem.EvaluatorParameter {
    66       get { return EvaluatorParameter; }
    67     }
    68     public ValueParameter<DoubleValue> BestKnownQualityParameter {
    69       get { return (ValueParameter<DoubleValue>)Parameters["BestKnownQuality"]; }
    70     }
    71     IParameter ISingleObjectiveHeuristicOptimizationProblem.BestKnownQualityParameter {
    72       get { return BestKnownQualityParameter; }
    7344    }
    7445    #endregion
     
    7950      set { LengthParameter.Value = value; }
    8051    }
    81     public IBinaryVectorCreator SolutionCreator {
    82       get { return SolutionCreatorParameter.Value; }
    83       set { SolutionCreatorParameter.Value = value; }
    84     }
    85     ISolutionCreator IHeuristicOptimizationProblem.SolutionCreator {
    86       get { return SolutionCreatorParameter.Value; }
    87     }
    88     public IOneMaxEvaluator Evaluator {
    89       get { return EvaluatorParameter.Value; }
    90       set { EvaluatorParameter.Value = value; }
    91     }
    92     ISingleObjectiveEvaluator ISingleObjectiveHeuristicOptimizationProblem.Evaluator {
    93       get { return EvaluatorParameter.Value; }
    94     }
    95     IEvaluator IHeuristicOptimizationProblem.Evaluator {
    96       get { return EvaluatorParameter.Value; }
    97     }
    98     public DoubleValue BestKnownQuality {
    99       get { return BestKnownQualityParameter.Value; }
    100     }
    101     public IEnumerable<IOperator> Operators {
    102       get { return operators.Cast<IOperator>(); }
    103     }
    10452    private BestOneMaxSolutionAnalyzer BestOneMaxSolutionAnalyzer {
    105       get { return operators.OfType<BestOneMaxSolutionAnalyzer>().FirstOrDefault(); }
     53      get { return Operators.OfType<BestOneMaxSolutionAnalyzer>().FirstOrDefault(); }
    10654    }
    10755    #endregion
    10856
    109     [Storable]
    110     private List<IOperator> operators;
     57    // BackwardsCompatibility3.3
     58    #region Backwards compatible code, remove with 3.4
     59    [Obsolete]
     60    [Storable(Name = "operators")]
     61    private IEnumerable<IOperator> oldOperators {
     62      get { return null; }
     63      set {
     64        if (value != null && value.Any())
     65          Operators.AddRange(value);
     66      }
     67    }
     68    #endregion
    11169
    11270    [StorableConstructor]
     
    11472    private OneMaxProblem(OneMaxProblem original, Cloner cloner)
    11573      : base(original, cloner) {
    116       operators = original.operators.Select(x => (IOperator)cloner.Clone(x)).ToList();
    11774      AttachEventHandlers();
    11875    }
    11976    public OneMaxProblem()
    120       : base() {
    121       RandomBinaryVectorCreator creator = new RandomBinaryVectorCreator();
    122       OneMaxEvaluator evaluator = new OneMaxEvaluator();
     77      : base(new OneMaxEvaluator(), new RandomBinaryVectorCreator()) {
     78      Parameters.Add(new ValueParameter<IntValue>("Length", "The length of the BinaryVector.", new IntValue(5)));
     79      BestKnownQuality.Value = 5;
    12380
    124       Parameters.Add(new ValueParameter<BoolValue>("Maximization", "Set to true as the OneMax Problem is a maximization problem.", new BoolValue(true)));
    125       Parameters.Add(new ValueParameter<IntValue>("Length", "The length of the BinaryVector.", new IntValue(5)));
    126       Parameters.Add(new ValueParameter<IBinaryVectorCreator>("SolutionCreator", "The operator which should be used to create new OneMax solutions.", creator));
    127       Parameters.Add(new ValueParameter<IOneMaxEvaluator>("Evaluator", "The operator which should be used to evaluate OneMax solutions.", evaluator));
    128       Parameters.Add(new ValueParameter<DoubleValue>("BestKnownQuality", "The quality of the best known solution of this OneMax instance.", new DoubleValue(5)));
    129 
    130       creator.BinaryVectorParameter.ActualName = "OneMaxSolution";
    131       evaluator.QualityParameter.ActualName = "NumberOfOnes";
     81      SolutionCreator.BinaryVectorParameter.ActualName = "OneMaxSolution";
     82      Evaluator.QualityParameter.ActualName = "NumberOfOnes";
    13283      ParameterizeSolutionCreator();
    13384      ParameterizeEvaluator();
     
    14293
    14394    #region Events
    144     public event EventHandler SolutionCreatorChanged;
    145     private void OnSolutionCreatorChanged() {
    146       EventHandler handler = SolutionCreatorChanged;
    147       if (handler != null) handler(this, EventArgs.Empty);
    148     }
    149     public event EventHandler EvaluatorChanged;
    150     private void OnEvaluatorChanged() {
    151       EventHandler handler = EvaluatorChanged;
    152       if (handler != null) handler(this, EventArgs.Empty);
    153     }
    154     public event EventHandler OperatorsChanged;
    155     private void OnOperatorsChanged() {
    156       EventHandler handler = OperatorsChanged;
    157       if (handler != null) handler(this, EventArgs.Empty);
    158     }
    159     public event EventHandler Reset;
    160     private void OnReset() {
    161       EventHandler handler = Reset;
    162       if (handler != null) handler(this, EventArgs.Empty);
    163     }
    164 
    165     private void SolutionCreatorParameter_ValueChanged(object sender, EventArgs e) {
     95    protected override void OnSolutionCreatorChanged() {
     96      base.OnSolutionCreatorChanged();
    16697      SolutionCreator.BinaryVectorParameter.ActualNameChanged += new EventHandler(SolutionCreator_BinaryVectorParameter_ActualNameChanged);
    16798      ParameterizeSolutionCreator();
     
    169100      ParameterizeAnalyzer();
    170101      ParameterizeOperators();
    171       OnSolutionCreatorChanged();
     102    }
     103    protected override void OnEvaluatorChanged() {
     104      base.OnEvaluatorChanged();
     105      ParameterizeEvaluator();
     106      ParameterizeAnalyzer();
    172107    }
    173108    private void SolutionCreator_BinaryVectorParameter_ActualNameChanged(object sender, EventArgs e) {
     
    176111      ParameterizeOperators();
    177112    }
    178     private void EvaluatorParameter_ValueChanged(object sender, EventArgs e) {
    179       ParameterizeEvaluator();
    180       ParameterizeAnalyzer();
    181       OnEvaluatorChanged();
    182     }
    183     void LengthParameter_ValueChanged(object sender, EventArgs e) {
     113    private void LengthParameter_ValueChanged(object sender, EventArgs e) {
    184114      ParameterizeSolutionCreator();
    185115      LengthParameter.Value.ValueChanged += new EventHandler(Length_ValueChanged);
    186116      BestKnownQualityParameter.Value.Value = Length.Value;
    187117    }
    188     void Length_ValueChanged(object sender, EventArgs e) {
     118    private void Length_ValueChanged(object sender, EventArgs e) {
    189119      BestKnownQualityParameter.Value.Value = Length.Value;
    190120    }
    191     void BestKnownQualityParameter_ValueChanged(object sender, EventArgs e) {
     121    private void BestKnownQualityParameter_ValueChanged(object sender, EventArgs e) {
    192122      BestKnownQualityParameter.Value.Value = Length.Value;
    193123    }
    194     void OneBitflipMoveParameter_ActualNameChanged(object sender, EventArgs e) {
     124    private void OneBitflipMoveParameter_ActualNameChanged(object sender, EventArgs e) {
    195125      string name = ((ILookupParameter<OneBitflipMove>)sender).ActualName;
    196126      foreach (IOneBitflipMoveOperator op in Operators.OfType<IOneBitflipMoveOperator>()) {
     
    205135      // BackwardsCompatibility3.3
    206136      #region Backwards compatible code (remove with 3.4)
    207       if (operators == null) InitializeOperators();
     137      if (Operators.Count == 0) InitializeOperators();
    208138      #endregion
    209139      AttachEventHandlers();
     
    211141
    212142    private void AttachEventHandlers() {
    213       SolutionCreatorParameter.ValueChanged += new EventHandler(SolutionCreatorParameter_ValueChanged);
    214143      SolutionCreator.BinaryVectorParameter.ActualNameChanged += new EventHandler(SolutionCreator_BinaryVectorParameter_ActualNameChanged);
    215       EvaluatorParameter.ValueChanged += new EventHandler(EvaluatorParameter_ValueChanged);
    216144      LengthParameter.ValueChanged += new EventHandler(LengthParameter_ValueChanged);
    217145      LengthParameter.Value.ValueChanged += new EventHandler(Length_ValueChanged);
     
    233161    }
    234162    private void InitializeOperators() {
    235       operators = new List<IOperator>();
    236       operators.Add(new BestOneMaxSolutionAnalyzer());
     163      Operators.Add(new BestOneMaxSolutionAnalyzer());
    237164      ParameterizeAnalyzer();
    238165      foreach (IBinaryVectorOperator op in ApplicationManager.Manager.GetInstances<IBinaryVectorOperator>()) {
    239166        if (!(op is ISingleObjectiveMoveEvaluator) || (op is IOneMaxMoveEvaluator)) {
    240           operators.Add(op);
     167          Operators.Add(op);
    241168        }
    242169      }
Note: See TracChangeset for help on using the changeset viewer.