Free cookie consent management tool by TermsFeed Policy Generator

Ignore:
Timestamp:
12/15/15 15:16:24 (9 years ago)
Author:
mkommend
Message:

#2521: Refactored problem base classes and adapted scheduling encoding, scheduling problem and unit tests.

File:
1 edited

Legend:

Unmodified
Added
Removed
  • branches/ProblemRefactoring/HeuristicLab.Optimization/3.3/BasicProblems/Problem.cs

    r13396 r13469  
    3030namespace HeuristicLab.Optimization {
    3131  [StorableClass]
    32   public abstract class Problem<TEncoding, TSolution, TEvaluator> : HeuristicOptimizationProblem<TEvaluator, ISolutionCreator<TSolution>>, IProblemDefinition<TEncoding, TSolution>, IStorableContent
     32  public abstract class Problem<TEncoding, TSolution, TEvaluator> : Problem,
     33    IHeuristicOptimizationProblem, IProblemDefinition<TEncoding, TSolution>, IStorableContent
    3334    where TEncoding : class, IEncoding<TSolution>
    3435    where TSolution : class, ISolution
    3536    where TEvaluator : class, IEvaluator {
    3637
    37     public string Filename { get; set; } // TODO: Really okay here?
     38    public string Filename { get; set; } // TODO: Really okay here? should be in Problem (non-generic)
    3839
     40    //TODO remove parametr for encoding?
    3941    protected IValueParameter<TEncoding> EncodingParameter {
    4042      get { return (IValueParameter<TEncoding>)Parameters["Encoding"]; }
    4143    }
    42 
    4344    //mkommend necessary for reuse of operators if the encoding changes
    4445    private TEncoding oldEncoding;
    45 
    4646    public TEncoding Encoding {
    4747      get { return EncodingParameter.Value; }
     
    5151      }
    5252    }
     53
     54    ISolutionCreator IHeuristicOptimizationProblem.SolutionCreator {
     55      get { return Encoding.SolutionCreator; }
     56    }
     57    IParameter IHeuristicOptimizationProblem.SolutionCreatorParameter {
     58      get { return Encoding.SolutionCreatorParameter; }
     59    }
     60    event EventHandler IHeuristicOptimizationProblem.SolutionCreatorChanged {
     61      add { Encoding.SolutionCreatorChanged += value; }
     62      remove { Encoding.SolutionCreatorChanged -= value; }
     63    }
     64
     65    //TODO is a parameter for the evaluator really necessary, only single-objective or multi-objective evulators calling the func are possible
     66    public ValueParameter<TEvaluator> EvaluatorParameter {
     67      get { return (ValueParameter<TEvaluator>)Parameters["Evaluator"]; }
     68    }
     69    public TEvaluator Evaluator {
     70      get { return EvaluatorParameter.Value; }
     71      protected set { EvaluatorParameter.Value = value; }
     72    }
     73    IEvaluator IHeuristicOptimizationProblem.Evaluator { get { return Evaluator; } }
     74    IParameter IHeuristicOptimizationProblem.EvaluatorParameter { get { return EvaluatorParameter; } }
     75
     76    public event EventHandler EvaluatorChanged;
     77    protected virtual void OnEvaluatorChanged() {
     78      EventHandler handler = EvaluatorChanged;
     79      if (handler != null)
     80        handler(this, EventArgs.Empty);
     81    }
     82
    5383
    5484    protected override IEnumerable<IItem> GetOperators() {
     
    6696      : base() {
    6797      Parameters.Add(new ValueParameter<TEncoding>("Encoding", "Describes the configuration of the encoding, what the variables are called, what type they are and their bounds if any."));
     98      Parameters.Add(new ValueParameter<TEvaluator>("Evaluator", "The operator used to evaluate a solution."));
     99
    68100      if (Encoding != null) {
    69101        oldEncoding = Encoding;
    70         SolutionCreator = Encoding.SolutionCreator;
    71102        Parameterize();
    72103      }
     
    76107      if (encoding == null) throw new ArgumentNullException("encoding");
    77108      Parameters.Add(new ValueParameter<TEncoding>("Encoding", "Describes the configuration of the encoding, what the variables are called, what type they are and their bounds if any.", encoding));
     109      Parameters.Add(new ValueParameter<TEvaluator>("Evaluator", "The operator used to evaluate a solution."));
     110
    78111      oldEncoding = Encoding;
    79       SolutionCreator = Encoding.SolutionCreator;
    80112      Parameterize();
    81113
     
    99131    private void RegisterEvents() {
    100132      EncodingParameter.ValueChanged += (o, e) => OnEncodingChanged();
     133      EvaluatorParameter.ValueChanged += (o, e) => OnEvaluatorChanged();
    101134      //var multiEncoding = Encoding as MultiEncoding;
    102135      //if (multiEncoding != null) multiEncoding.EncodingsChanged += MultiEncodingOnEncodingsChanged;
     
    122155        op.EncodingParameter.ActualName = EncodingParameter.Name;
    123156
    124       SolutionCreator = Encoding.SolutionCreator;
    125 
    126157      //var multiEncoding = Encoding as MultiEncoding;
    127158      //if (multiEncoding != null) multiEncoding.EncodingsChanged += MultiEncodingOnEncodingsChanged;
    128159    }
    129160
    130     protected override void OnSolutionCreatorChanged() {
    131       base.OnSolutionCreatorChanged();
    132       Encoding.SolutionCreator = SolutionCreator;
    133     }
     161    //protected override void OnSolutionCreatorChanged() {
     162    //  base.OnSolutionCreatorChanged();
     163    //  Encoding.SolutionCreator = SolutionCreator;
     164    //}
    134165
    135166    private static void AdaptEncodingOperators(IEncoding oldEncoding, IEncoding newEncoding) {
    136167      if (oldEncoding.GetType() != newEncoding.GetType()) return;
    137168
    138       if (oldEncoding.GetType() == typeof(CombinedEncoding)) {
     169      if (oldEncoding is CombinedEncoding) {
    139170        var oldMultiEncoding = (CombinedEncoding)oldEncoding;
    140171        var newMultiEncoding = (CombinedEncoding)newEncoding;
Note: See TracChangeset for help on using the changeset viewer.