Free cookie consent management tool by TermsFeed Policy Generator

Ignore:
Timestamp:
08/29/19 13:53:26 (6 years ago)
Author:
mkommend
Message:

#2521: Integrated changes of #2943 into problem refactoring branch.

Location:
branches/2521_ProblemRefactoring/HeuristicLab.Optimization/3.3/BasicProblems
Files:
9 edited

Legend:

Unmodified
Added
Removed
  • branches/2521_ProblemRefactoring/HeuristicLab.Optimization/3.3/BasicProblems/Interfaces/IMultiObjectiveProblem.cs

    r16751 r17225  
    11#region License Information
    2 
    32/* HeuristicLab
    43 * Copyright (C) 2002-2015 Heuristic and Evolutionary Algorithms Laboratory (HEAL)
     
    1918 * along with HeuristicLab. If not, see <http://www.gnu.org/licenses/>.
    2019 */
    21 
    2220#endregion
    2321
     22using HeuristicLab.Core;
     23using HeuristicLab.Data;
     24
    2425namespace HeuristicLab.Optimization {
    25   public interface IMultiObjectiveProblem<TEncoding, TEncodedSolution> : IProblem<TEncoding, TEncodedSolution>, IMultiObjectiveHeuristicOptimizationProblem
    26     where TEncoding : class, IEncoding<TEncodedSolution>
    27     where TEncodedSolution : class, IEncodedSolution {
     26  public interface IMultiObjectiveProblem : IProblem, IMultiObjectiveHeuristicOptimizationProblem {
    2827
    2928  }
     29
     30  public interface IMultiObjectiveProblem<TEncoding, TEncodedSolution> : IMultiObjectiveProblem, IProblem<TEncoding, TEncodedSolution>
     31    where TEncoding : class, IEncoding<TEncodedSolution>
     32    where TEncodedSolution : class, IEncodedSolution { }
    3033}
  • branches/2521_ProblemRefactoring/HeuristicLab.Optimization/3.3/BasicProblems/Interfaces/IMultiObjectiveProblemDefinition.cs

    r16806 r17225  
    2020#endregion
    2121
     22using System.Collections;
     23using System.Collections.Generic;
    2224using HEAL.Attic;
    2325using HeuristicLab.Core;
     26using HeuristicLab.Data;
    2427
    2528namespace HeuristicLab.Optimization {
     29  public interface IMultiObjectiveProblemDefinition {
     30    int Objectives { get; }
     31    bool[] Maximization { get; }
     32    IReadOnlyList<double[]> BestKnownFront { get; }
     33    double[] ReferencePoint { get; }
     34  }
     35
    2636  [StorableType("39eacdb5-80a0-425d-902a-00eb3e1d6610")]
    27   public interface IMultiObjectiveProblemDefinition<TEncoding, TEncodedSolution> : IProblemDefinition<TEncoding, TEncodedSolution>
     37  public interface IMultiObjectiveProblemDefinition<TEncoding, TEncodedSolution> : IMultiObjectiveProblemDefinition, IProblemDefinition<TEncoding, TEncodedSolution>
    2838    where TEncoding : class, IEncoding<TEncodedSolution>
    2939    where TEncodedSolution : class, IEncodedSolution {
    30 
    31     int Objectives { get; }
    32     bool[] Maximization { get; }
    3340    double[] Evaluate(TEncodedSolution solution, IRandom random);
    3441    void Analyze(TEncodedSolution[] solutions, double[][] qualities, ResultCollection results, IRandom random);
  • branches/2521_ProblemRefactoring/HeuristicLab.Optimization/3.3/BasicProblems/Interfaces/ISingleObjectiveProblem.cs

    r16751 r17225  
    11#region License Information
    2 
    32/* HeuristicLab
    43 * Copyright (C) 2002-2015 Heuristic and Evolutionary Algorithms Laboratory (HEAL)
     
    1918 * along with HeuristicLab. If not, see <http://www.gnu.org/licenses/>.
    2019 */
    21 
    2220#endregion
    2321
    2422
    2523namespace HeuristicLab.Optimization {
    26   public interface ISingleObjectiveProblem<TEncoding, TEncodedSolution> : IProblem<TEncoding, TEncodedSolution>, ISingleObjectiveHeuristicOptimizationProblem
    27     where TEncoding : class, IEncoding<TEncodedSolution>
    28     where TEncodedSolution : class, IEncodedSolution {
     24  public interface ISingleObjectiveProblem : ISingleObjectiveHeuristicOptimizationProblem {
    2925
    3026  }
     27
     28  public interface ISingleObjectiveProblem<TEncoding, TEncodedSolution> : ISingleObjectiveProblem, IProblem<TEncoding, TEncodedSolution>
     29    where TEncoding : class, IEncoding<TEncodedSolution>
     30    where TEncodedSolution : class, IEncodedSolution { }
    3131}
  • branches/2521_ProblemRefactoring/HeuristicLab.Optimization/3.3/BasicProblems/Interfaces/ISingleObjectiveProblemDefinition.cs

    r16751 r17225  
    2525
    2626namespace HeuristicLab.Optimization {
     27  public interface ISingleObjectiveProblemDefinition {
     28    bool Maximization { get; }
     29    bool IsBetter(double quality, double bestQuality);
     30  }
     31
    2732  [StorableType("7ec7bf7e-aaa7-4681-828b-3401cf67e2b3")]
    28   public interface ISingleObjectiveProblemDefinition<TEncoding, TEncodedSolution> : IProblemDefinition<TEncoding, TEncodedSolution>
     33  public interface ISingleObjectiveProblemDefinition<TEncoding, TEncodedSolution> : ISingleObjectiveProblemDefinition, IProblemDefinition<TEncoding, TEncodedSolution>
    2934    where TEncoding : class, IEncoding<TEncodedSolution>
    3035    where TEncodedSolution : class, IEncodedSolution {
    31     bool Maximization { get; }
    3236    double Evaluate(TEncodedSolution solution, IRandom random);
    3337    void Analyze(TEncodedSolution[] solutions, double[] qualities, ResultCollection results, IRandom random);
    3438    IEnumerable<TEncodedSolution> GetNeighbors(TEncodedSolution solution, IRandom random);
    35     bool IsBetter(double quality, double bestQuality);
    3639  }
    3740}
  • branches/2521_ProblemRefactoring/HeuristicLab.Optimization/3.3/BasicProblems/MultiObjectiveProblem.cs

    r16806 r17225  
    2020#endregion
    2121
     22using System.Collections;
     23using System.Collections.Generic;
    2224using System.Linq;
    2325using HEAL.Attic;
     
    3537    where TEncoding : class, IEncoding<TEncodedSolution>
    3638    where TEncodedSolution : class, IEncodedSolution {
     39    #region Parameternames
     40    public const string MaximizationParameterName = "Maximization";
     41    public const string BestKnownFrontParameterName = "BestKnownFront";
     42    public const string ReferencePointParameterName = "ReferencePoint";
     43    #endregion
    3744
    38     protected IValueParameter<BoolArray> MaximizationParameter {
    39       get { return (IValueParameter<BoolArray>)Parameters["Maximization"]; }
     45    #region Parameterproperties
     46    public IValueParameter<BoolArray> MaximizationParameter {
     47      get { return (IValueParameter<BoolArray>)Parameters[MaximizationParameterName]; }
    4048    }
     49    public IValueParameter<DoubleMatrix> BestKnownFrontParameter {
     50      get { return (IValueParameter<DoubleMatrix>)Parameters[BestKnownFrontParameterName]; }
     51    }
     52    public IValueParameter<DoubleArray> ReferencePointParameter {
     53      get { return (IValueParameter<DoubleArray>)Parameters[ReferencePointParameterName]; }
     54    }
     55    #endregion
     56
    4157
    4258    [StorableConstructor]
     
    4965
    5066    protected MultiObjectiveProblem() : base() {
    51       Parameters.Add(new ValueParameter<BoolArray>("Maximization", "Set to false if the problem should be minimized.", (BoolArray)new BoolArray(Maximization).AsReadOnly()));
    52 
     67      Parameters.Add(new ValueParameter<BoolArray>(MaximizationParameterName, "Set to false if the problem should be minimized.", (BoolArray)new BoolArray(Maximization).AsReadOnly()));
     68      Parameters.Add(new OptionalValueParameter<DoubleMatrix>(BestKnownFrontParameterName, "A double matrix representing the best known qualites for this problem (aka points on the Pareto front). Points are to be given in a row-wise fashion."));
     69      Parameters.Add(new OptionalValueParameter<DoubleArray>(ReferencePointParameterName, "The refrence point for hypervolume calculations on this problem"));
    5370      Operators.Add(Evaluator);
    5471      Operators.Add(new MultiObjectiveAnalyzer<TEncodedSolution>());
    55 
    5672      ParameterizeOperators();
    5773    }
    5874
    5975    protected MultiObjectiveProblem(TEncoding encoding) : base(encoding) {
    60       Parameters.Add(new ValueParameter<BoolArray>("Maximization", "Set to false if the problem should be minimized.", (BoolArray)new BoolArray(Maximization).AsReadOnly()));
    61 
     76      Parameters.Add(new ValueParameter<BoolArray>(MaximizationParameterName, "Set to false if the problem should be minimized.", (BoolArray)new BoolArray(Maximization).AsReadOnly()));
     77      Parameters.Add(new OptionalValueParameter<DoubleMatrix>(BestKnownFrontParameterName, "A double matrix representing the best known qualites for this problem (aka points on the Pareto front). Points are to be given in a row-wise fashion."));
     78      Parameters.Add(new OptionalValueParameter<DoubleArray>(ReferencePointParameterName, "The refrence point for hypervolume calculations on this problem"));
    6279      Operators.Add(Evaluator);
    6380      Operators.Add(new MultiObjectiveAnalyzer<TEncodedSolution>());
    64 
    6581      ParameterizeOperators();
    6682    }
     
    7187    }
    7288
    73     public int Objectives => Maximization.Length;
     89    public int Objectives {
     90      get { return Maximization.Length; }
     91    }
    7492    public abstract bool[] Maximization { get; }
     93
     94    public virtual IReadOnlyList<double[]> BestKnownFront {
     95      get {
     96        if (!Parameters.ContainsKey(BestKnownFrontParameterName)) return null;
     97        var mat = BestKnownFrontParameter.Value;
     98        if (mat == null) return null;
     99        var v = new double[mat.Rows][];
     100        for (var i = 0; i < mat.Rows; i++) {
     101          var r = v[i] = new double[mat.Columns];
     102          for (var j = 0; j < mat.Columns; j++) {
     103            r[j] = mat[i, j];
     104          }
     105        }
     106        return v;
     107      }
     108      set {
     109        if (value == null || value.Count == 0) {
     110          BestKnownFrontParameter.Value = new DoubleMatrix();
     111          return;
     112        }
     113        var mat = new DoubleMatrix(value.Count, value[0].Length);
     114        for (int i = 0; i < value.Count; i++) {
     115          for (int j = 0; j < value[i].Length; j++) {
     116            mat[i, j] = value[i][j];
     117          }
     118        }
     119
     120        BestKnownFrontParameter.Value = mat;
     121      }
     122    }
     123    public virtual double[] ReferencePoint {
     124      get { return ReferencePointParameter.Value != null ? ReferencePointParameter.Value.CloneAsArray() : null; }
     125      set { ReferencePointParameter.Value = new DoubleArray(value); }
     126    }
     127
    75128    public abstract double[] Evaluate(TEncodedSolution solution, IRandom random);
    76129    public virtual void Analyze(TEncodedSolution[] solutions, double[][] qualities, ResultCollection results, IRandom random) { }
     130
    77131
    78132    protected override void OnOperatorsChanged() {
     
    115169    #region IMultiObjectiveHeuristicOptimizationProblem Members
    116170    IParameter IMultiObjectiveHeuristicOptimizationProblem.MaximizationParameter {
    117       get { return Parameters["Maximization"]; }
     171      get { return Parameters[MaximizationParameterName]; }
    118172    }
    119173    IMultiObjectiveEvaluator IMultiObjectiveHeuristicOptimizationProblem.Evaluator {
  • branches/2521_ProblemRefactoring/HeuristicLab.Optimization/3.3/BasicProblems/Operators/MultiEncodingCreator.cs

    r16801 r17225  
    3535    }
    3636
    37     public override string OperatorPrefix => "Creator";
     37    public override string OperatorPrefix {
     38      get { return "Creator"; }
     39    }
    3840
    3941    [StorableConstructor]
  • branches/2521_ProblemRefactoring/HeuristicLab.Optimization/3.3/BasicProblems/Operators/MultiEncodingCrossover.cs

    r16801 r17225  
    3333    }
    3434
    35     public override string OperatorPrefix => "Crossover";
     35    public override string OperatorPrefix {
     36      get { return "Crossover"; }
     37    }
    3638
    3739    [StorableConstructor]
  • branches/2521_ProblemRefactoring/HeuristicLab.Optimization/3.3/BasicProblems/Operators/MultiEncodingManipulator.cs

    r16801 r17225  
    3333    }
    3434
    35     public override string OperatorPrefix => "Manipulator";
     35    public override string OperatorPrefix {
     36      get { return "Manipulator"; }
     37    }
    3638    [StorableConstructor]
    3739    private MultiEncodingManipulator(StorableConstructorFlag _) : base(_) { }
  • branches/2521_ProblemRefactoring/HeuristicLab.Optimization/3.3/BasicProblems/Problem.cs

    r16948 r17225  
    3636    where TEncodedSolution : class, IEncodedSolution
    3737    where TEvaluator : class, IEvaluator {
    38 
    3938    public string Filename { get; set; } // TODO: Really okay here? should be in Problem (non-generic)
    4039
     
    6059    }
    6160    event EventHandler IHeuristicOptimizationProblem.SolutionCreatorChanged {
    62       add { Encoding.SolutionCreatorChanged += value; }
    63       remove { Encoding.SolutionCreatorChanged -= value; }
     61      add {
     62        if (Encoding != null) Encoding.SolutionCreatorChanged += value;
     63      }
     64      remove {
     65        if (Encoding != null) Encoding.SolutionCreatorChanged -= value;
     66      }
    6467    }
    6568
     
    7275      protected set { EvaluatorParameter.Value = value; }
    7376    }
    74     IEvaluator IHeuristicOptimizationProblem.Evaluator { get { return Evaluator; } }
    75     IParameter IHeuristicOptimizationProblem.EvaluatorParameter { get { return EvaluatorParameter; } }
     77    IEvaluator IHeuristicOptimizationProblem.Evaluator {
     78      get { return Evaluator; }
     79    }
     80    IParameter IHeuristicOptimizationProblem.EvaluatorParameter {
     81      get { return EvaluatorParameter; }
     82    }
    7683
    7784    public event EventHandler EvaluatorChanged;
     
    9097      get {
    9198        if (Encoding == null) return base.ExecutionContextItems;
    92         return base.ExecutionContextItems.Concat(new[] { Encoding });
     99        return base.ExecutionContextItems.Concat(new[] {Encoding});
    93100      }
    94101    }
     
    173180        if (!oldMultiEncoding.Encodings.SequenceEqual(newMultiEncoding.Encodings, new TypeEqualityComparer<IEncoding>())) return;
    174181
    175         var nestedEncodings = oldMultiEncoding.Encodings.Zip(newMultiEncoding.Encodings, (o, n) => new { oldEnc = o, newEnc = n });
     182        var nestedEncodings = oldMultiEncoding.Encodings.Zip(newMultiEncoding.Encodings, (o, n) => new {oldEnc = o, newEnc = n});
    176183        foreach (var multi in nestedEncodings)
    177184          AdaptEncodingOperators(multi.oldEnc, multi.newEnc);
Note: See TracChangeset for help on using the changeset viewer.