Free cookie consent management tool by TermsFeed Policy Generator

Ignore:
Timestamp:
10/04/19 14:23:08 (5 years ago)
Author:
abeham
Message:

#2521: reverted r17309

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

Legend:

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

    r17309 r17315  
    2828  public interface IMultiObjectiveProblemDefinition {
    2929    int Objectives { get; }
    30     IReadOnlyList<bool> Maximization { get; }
     30    bool[] Maximization { get; }
    3131    IReadOnlyList<double[]> BestKnownFront { get; }
    3232    double[] ReferencePoint { get; }
  • branches/2521_ProblemRefactoring/HeuristicLab.Optimization/3.3/BasicProblems/MultiObjectiveProblem.cs

    r17309 r17315  
    3737    where TEncodedSolution : class, IEncodedSolution {
    3838    #region Parameternames
     39    public const string MaximizationParameterName = "Maximization";
    3940    public const string BestKnownFrontParameterName = "BestKnownFront";
    4041    public const string ReferencePointParameterName = "ReferencePoint";
     
    4243
    4344    #region Parameterproperties
    44     [Storable] protected IValueParameter<BoolArray> MaximizationParameter { get; }
     45    public IValueParameter<BoolArray> MaximizationParameter {
     46      get { return (IValueParameter<BoolArray>)Parameters[MaximizationParameterName]; }
     47    }
    4548    public IValueParameter<DoubleMatrix> BestKnownFrontParameter {
    4649      get { return (IValueParameter<DoubleMatrix>)Parameters[BestKnownFrontParameterName]; }
     
    5760    protected MultiObjectiveProblem(MultiObjectiveProblem<TEncoding, TEncodedSolution> original, Cloner cloner)
    5861      : base(original, cloner) {
    59       MaximizationParameter = cloner.Clone(original.MaximizationParameter);
    6062      ParameterizeOperators();
    6163    }
    6264
    6365    protected MultiObjectiveProblem() : base() {
    64       MaximizationParameter = new ValueParameter<BoolArray>("Maximization", "Set to false if the problem should be minimized.", new BoolArray(new[] { false, false }).AsReadOnly()) { Hidden = true, ReadOnly = true };
    65       Parameters.Add(MaximizationParameter);
     66      Parameters.Add(new ValueParameter<BoolArray>(MaximizationParameterName, "Set to false if the problem should be minimized.", (BoolArray)new BoolArray(Maximization).AsReadOnly()));
    6667      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."));
    6768      Parameters.Add(new OptionalValueParameter<DoubleArray>(ReferencePointParameterName, "The refrence point for hypervolume calculations on this problem"));
     
    7273
    7374    protected MultiObjectiveProblem(TEncoding encoding) : base(encoding) {
    74       MaximizationParameter = new ValueParameter<BoolArray>("Maximization", "Set to false if the problem should be minimized.", new BoolArray(new[] { false, false }).AsReadOnly()) { Hidden = true, ReadOnly = true };
    75       Parameters.Add(MaximizationParameter);
     75      Parameters.Add(new ValueParameter<BoolArray>(MaximizationParameterName, "Set to false if the problem should be minimized.", (BoolArray)new BoolArray(Maximization).AsReadOnly()));
    7676      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."));
    7777      Parameters.Add(new OptionalValueParameter<DoubleArray>(ReferencePointParameterName, "The refrence point for hypervolume calculations on this problem"));
     
    8989      get { return Maximization.Length; }
    9090    }
    91     IReadOnlyList<bool> IMultiObjectiveProblemDefinition.Maximization {
    92       get { return Maximization.CloneAsArray(); }
    93     }
    94     public BoolArray Maximization {
    95       get { return MaximizationParameter.Value; }
    96       set {
    97         if (Maximization == value) return;
    98         MaximizationParameter.ReadOnly = false;
    99         MaximizationParameter.Value = value.AsReadOnly();
    100         MaximizationParameter.ReadOnly = true;
    101       }
    102     }
     91    public abstract bool[] Maximization { get; }
    10392
    10493    public virtual IReadOnlyList<double[]> BestKnownFront {
     
    179168    #region IMultiObjectiveHeuristicOptimizationProblem Members
    180169    IParameter IMultiObjectiveHeuristicOptimizationProblem.MaximizationParameter {
    181       get { return MaximizationParameter; }
     170      get { return Parameters[MaximizationParameterName]; }
    182171    }
    183172    IMultiObjectiveEvaluator IMultiObjectiveHeuristicOptimizationProblem.Evaluator {
  • branches/2521_ProblemRefactoring/HeuristicLab.Optimization/3.3/MultiObjective/DominationCalculator.cs

    r17309 r17315  
    4747    /// <param name="dominateOnEqualQualities">Whether solutions of exactly equal quality should dominate one another.</param>
    4848    /// <returns>The pareto front containing the best solutions and their associated quality resp. fitness.</returns>
    49     public static List<Tuple<T, double[]>> CalculateBestParetoFront<T>(T[] solutions, double[][] qualities, IReadOnlyList<bool> maximization, bool dominateOnEqualQualities = true) {
     49    public static List<Tuple<T, double[]>> CalculateBestParetoFront<T>(T[] solutions, double[][] qualities, bool[] maximization, bool dominateOnEqualQualities = true) {
    5050      var populationSize = solutions.Length;
    5151      Dictionary<T, List<int>> dominatedIndividuals;
     
    7272    /// <param name="dominateOnEqualQualities">Whether solutions of exactly equal quality should dominate one another.</param>
    7373    /// <returns>A sorted list of the pareto fronts from best to worst.</returns>
    74     public static List<List<Tuple<T, double[]>>> CalculateAllParetoFronts<T>(T[] solutions, double[][] qualities, IReadOnlyList<bool> maximization, out int[] rank, bool dominateOnEqualQualities = true) {
     74    public static List<List<Tuple<T, double[]>>> CalculateAllParetoFronts<T>(T[] solutions, double[][] qualities, bool[] maximization, out int[] rank, bool dominateOnEqualQualities = true) {
    7575      var populationSize = solutions.Length;
    7676
     
    101101    }
    102102
    103     private static List<Tuple<T, double[]>> CalculateBestFront<T>(T[] solutions, double[][] qualities, IReadOnlyList<bool> maximization, bool dominateOnEqualQualities, int populationSize, out Dictionary<T, List<int>> dominatedIndividuals, out int[] dominationCounter, out int[] rank) {
     103    private static List<Tuple<T, double[]>> CalculateBestFront<T>(T[] solutions, double[][] qualities, bool[] maximization, bool dominateOnEqualQualities, int populationSize, out Dictionary<T, List<int>> dominatedIndividuals, out int[] dominationCounter, out int[] rank) {
    104104      var front = new List<Tuple<T, double[]>>();
    105105      dominatedIndividuals = new Dictionary<T, List<int>>();
     
    155155    /// <param name="dominateOnEqualQualities">Whether solutions of exactly equal quality should dominate one another.</param>
    156156    /// <returns>A sorted list of the pareto fronts where each front contains the indices of the <paramref name="solutions"/> and <paramref name="qualities"/>.</returns>
    157     public static List<List<int>> CalculateAllParetoFrontsIndices<T>(T[] solutions, double[][] qualities, IReadOnlyList<bool> maximization, bool dominateOnEqualQualities = true) {
     157    public static List<List<int>> CalculateAllParetoFrontsIndices<T>(T[] solutions, double[][] qualities, bool[] maximization, bool dominateOnEqualQualities = true) {
    158158      return CalculateAllParetoFrontsIndices(solutions, qualities, maximization, out var rank, dominateOnEqualQualities);
    159159    }
     
    178178    /// <param name="dominateOnEqualQualities">Whether solutions of exactly equal quality should dominate one another.</param>
    179179    /// <returns>A sorted list of the pareto fronts where each front contains the indices of the <paramref name="solutions"/> and <paramref name="qualities"/>.</returns>
    180     public static List<List<int>> CalculateAllParetoFrontsIndices<T>(T[] solutions, double[][] qualities, IReadOnlyList<bool> maximization, out int[] rank, bool dominateOnEqualQualities = true) {
     180    public static List<List<int>> CalculateAllParetoFrontsIndices<T>(T[] solutions, double[][] qualities, bool[] maximization, out int[] rank, bool dominateOnEqualQualities = true) {
    181181      var populationSize = solutions.Length;
    182182
     
    207207    }
    208208
    209     private static List<int> CalculateBestFrontIndices<T>(T[] solutions, double[][] qualities, IReadOnlyList<bool> maximization, bool dominateOnEqualQualities, int populationSize, List<int>[] dominatedIndividuals, int[] dominationCounter, int[] rank) {
     209    private static List<int> CalculateBestFrontIndices<T>(T[] solutions, double[][] qualities, bool[] maximization, bool dominateOnEqualQualities, int populationSize, List<int>[] dominatedIndividuals, int[] dominationCounter, int[] rank) {
    210210      var front = new List<int>();
    211211      for (var pI = 0; pI < populationSize - 1; pI++) {
     
    244244    /// <param name="dominateOnEqualQualities">Whether the result should be Dominates in case both fitness vectors are exactly equal</param>
    245245    /// <returns>Dominates if left dominates right, IsDominated if right dominates left and IsNonDominated otherwise.</returns>
    246     public static DominationResult Dominates(double[] left, double[] right, IReadOnlyList<bool> maximizations, bool dominateOnEqualQualities) {
     246    public static DominationResult Dominates(double[] left, double[] right, bool[] maximizations, bool dominateOnEqualQualities) {
    247247      //mkommend Caution: do not use LINQ.SequenceEqual for comparing the two quality arrays (left and right) due to performance reasons
    248248      if (dominateOnEqualQualities) {
  • branches/2521_ProblemRefactoring/HeuristicLab.Optimization/3.3/MultiObjective/HypervolumeCalculator.cs

    r17309 r17315  
    2626namespace HeuristicLab.Optimization {
    2727  public static class HypervolumeCalculator {
    28     public static double[] CalculateNadirPoint(IEnumerable<double[]> qualities, IReadOnlyList<bool> maximization) {
     28    public static double[] CalculateNadirPoint(IEnumerable<double[]> qualities, bool[] maximization) {
    2929      var res = maximization.Select(m => m ? double.MaxValue : double.MinValue).ToArray();
    3030      foreach (var quality in qualities)
     
    5959    /// </summary>
    6060    ///
    61     public static double CalculateHypervolume(IList<double[]> qualities, double[] referencePoint, IReadOnlyList<bool> maximization) {
     61    public static double CalculateHypervolume(IList<double[]> qualities, double[] referencePoint, bool[] maximization) {
    6262      qualities = qualities.Where(vec => DominationCalculator.Dominates(vec, referencePoint, maximization, false) == DominationResult.Dominates).ToArray();
    6363      if (qualities.Count== 0) return 0; //TODO computation for negative hypervolume?
    64       if (maximization.Count == 2)
     64      if (maximization.Length == 2)
    6565        return Calculate2D(qualities, referencePoint, maximization);
    6666
    67       if (maximization.All(x => !x))
     67      if (Array.TrueForAll(maximization, x => !x))
    6868        return CalculateMultiDimensional(qualities, referencePoint);
    6969      throw new NotImplementedException("HypervolumeCalculator calculation for more than two dimensions is supported only with minimization problems.");
     
    7878    /// <param name="maximization"></param>
    7979    /// <returns></returns>
    80     public static double Calculate2D(IList<double[]> front, double[] referencePoint, IReadOnlyList<bool> maximization) {
     80    public static double Calculate2D(IList<double[]> front, double[] referencePoint, bool[] maximization) {
    8181      if (front == null) throw new ArgumentNullException("front");
    8282      if (referencePoint == null) throw new ArgumentNullException("referencePoint");
Note: See TracChangeset for help on using the changeset viewer.