- Timestamp:
- 10/04/19 16:03:51 (5 years ago)
- Location:
- branches/2521_ProblemRefactoring/HeuristicLab.Optimization/3.3
- Files:
-
- 6 edited
Legend:
- Unmodified
- Added
- Removed
-
branches/2521_ProblemRefactoring/HeuristicLab.Optimization/3.3/BasicProblems/Interfaces/IMultiObjectiveProblem.cs
r17257 r17317 20 20 #endregion 21 21 22 using System; 22 23 using HEAL.Attic; 23 24 24 25 namespace HeuristicLab.Optimization { 25 26 [StorableType("251d79f1-a065-47f9-85a3-2e8dbdbf685e")] 26 public interface IMultiObjectiveProblem : IProblem, IMultiObjectiveHeuristicOptimizationProblem { } 27 public interface IMultiObjectiveProblem : IProblem, IMultiObjectiveHeuristicOptimizationProblem { 28 event EventHandler MaximizationChanged; 29 } 27 30 28 31 [StorableType("806fb361-1469-4903-9f54-f8678b0717b9")] -
branches/2521_ProblemRefactoring/HeuristicLab.Optimization/3.3/BasicProblems/Interfaces/ISingleObjectiveProblem.cs
r17257 r17317 20 20 #endregion 21 21 22 22 using System; 23 23 using HEAL.Attic; 24 24 25 25 namespace HeuristicLab.Optimization { 26 26 [StorableType("24830fd5-7d97-41a5-9d7e-d84f1b7ab259")] 27 public interface ISingleObjectiveProblem : ISingleObjectiveHeuristicOptimizationProblem { } 27 public interface ISingleObjectiveProblem : ISingleObjectiveHeuristicOptimizationProblem { 28 event EventHandler MaximizationChanged; 29 } 28 30 29 31 [StorableType("9cc9422f-0bb5-41e8-9d9e-6e0b66a66449")] -
branches/2521_ProblemRefactoring/HeuristicLab.Optimization/3.3/BasicProblems/MultiObjectiveProblem.cs
r17315 r17317 20 20 #endregion 21 21 22 using System; 22 23 using System.Collections.Generic; 23 24 using System.Linq; … … 37 38 where TEncodedSolution : class, IEncodedSolution { 38 39 #region Parameternames 39 public const string MaximizationParameterName = "Maximization";40 40 public const string BestKnownFrontParameterName = "BestKnownFront"; 41 41 public const string ReferencePointParameterName = "ReferencePoint"; … … 43 43 44 44 #region Parameterproperties 45 public IValueParameter<BoolArray> MaximizationParameter { 46 get { return (IValueParameter<BoolArray>)Parameters[MaximizationParameterName]; } 47 } 45 [Storable] public IValueParameter<BoolArray> MaximizationParameter { get; } 48 46 public IValueParameter<DoubleMatrix> BestKnownFrontParameter { 49 47 get { return (IValueParameter<DoubleMatrix>)Parameters[BestKnownFrontParameterName]; } … … 60 58 protected MultiObjectiveProblem(MultiObjectiveProblem<TEncoding, TEncodedSolution> original, Cloner cloner) 61 59 : base(original, cloner) { 60 MaximizationParameter = cloner.Clone(original.MaximizationParameter); 62 61 ParameterizeOperators(); 63 62 } 64 63 65 64 protected MultiObjectiveProblem() : base() { 66 Parameters.Add(new ValueParameter<BoolArray>(MaximizationParameterName, "Set to false if the problem should be minimized.", (BoolArray)new BoolArray(Maximization).AsReadOnly())); 65 MaximizationParameter = new ValueParameter<BoolArray>("Maximization", "The dimensions correspond to the different objectives: False if the objective should be minimized, true if it should be maximized..", new BoolArray(new bool[] { }, @readonly: true)); 66 Parameters.Add(MaximizationParameter); 67 67 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.")); 68 68 Parameters.Add(new OptionalValueParameter<DoubleArray>(ReferencePointParameterName, "The refrence point for hypervolume calculations on this problem")); … … 73 73 74 74 protected MultiObjectiveProblem(TEncoding encoding) : base(encoding) { 75 Parameters.Add(new ValueParameter<BoolArray>(MaximizationParameterName, "Set to false if the problem should be minimized.", (BoolArray)new BoolArray(Maximization).AsReadOnly())); 75 MaximizationParameter = new ValueParameter<BoolArray>("Maximization", "The dimensions correspond to the different objectives: False if the objective should be minimized, true if it should be maximized..", new BoolArray(new bool[] { }, @readonly: true)); 76 Parameters.Add(MaximizationParameter); 76 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.")); 77 78 Parameters.Add(new OptionalValueParameter<DoubleArray>(ReferencePointParameterName, "The refrence point for hypervolume calculations on this problem")); … … 89 90 get { return Maximization.Length; } 90 91 } 91 public abstract bool[] Maximization { get; } 92 public bool[] Maximization { 93 get { return MaximizationParameter.Value.CloneAsArray(); } 94 protected set { 95 if (MaximizationParameter.Value.SequenceEqual(value)) return; 96 MaximizationParameter.ForceValue(new BoolArray(value, @readonly: true)); 97 OnMaximizationChanged(); 98 } 99 } 92 100 93 101 public virtual IReadOnlyList<double[]> BestKnownFront { … … 168 176 #region IMultiObjectiveHeuristicOptimizationProblem Members 169 177 IParameter IMultiObjectiveHeuristicOptimizationProblem.MaximizationParameter { 170 get { return Parameters[MaximizationParameterName]; }178 get { return MaximizationParameter; } 171 179 } 172 180 IMultiObjectiveEvaluator IMultiObjectiveHeuristicOptimizationProblem.Evaluator { … … 174 182 } 175 183 #endregion 184 185 public event EventHandler MaximizationChanged; 186 protected void OnMaximizationChanged() { 187 MaximizationChanged?.Invoke(this, EventArgs.Empty); 188 } 176 189 } 177 190 } -
branches/2521_ProblemRefactoring/HeuristicLab.Optimization/3.3/BasicProblems/SingleObjectiveProblem.cs
r17279 r17317 59 59 get { return MaximizationParameter.Value.Value; } 60 60 protected set { 61 if (MaximizationParameter.Value.Value == value) return; 62 MaximizationParameter.ReadOnly = false; 63 MaximizationParameter.Value = new BoolValue(value).AsReadOnly(); 64 MaximizationParameter.ReadOnly = true; 61 if (Maximization == value) return; 62 MaximizationParameter.ForceValue(new BoolValue(value, @readonly: true)); 63 OnMaximizationChanged(); 65 64 } 66 65 } … … 185 184 } 186 185 #endregion 186 187 public event EventHandler MaximizationChanged; 188 protected void OnMaximizationChanged() { 189 MaximizationChanged?.Invoke(this, EventArgs.Empty); 190 } 187 191 } 188 192 } -
branches/2521_ProblemRefactoring/HeuristicLab.Optimization/3.3/Problems/MultiObjectiveHeuristicOptimizationProblem.cs
r17226 r17317 20 20 #endregion 21 21 22 using System; 23 using HEAL.Attic; 22 24 using HeuristicLab.Common; 23 25 using HeuristicLab.Core; 24 26 using HeuristicLab.Data; 25 27 using HeuristicLab.Parameters; 26 using HEAL.Attic;27 28 28 29 namespace HeuristicLab.Optimization { … … 36 37 [StorableConstructor] 37 38 protected MultiObjectiveHeuristicOptimizationProblem(StorableConstructorFlag _) : base(_) { } 38 protected MultiObjectiveHeuristicOptimizationProblem(MultiObjectiveHeuristicOptimizationProblem<T, U> original, Cloner cloner) : base(original, cloner) { } 39 protected MultiObjectiveHeuristicOptimizationProblem(MultiObjectiveHeuristicOptimizationProblem<T, U> original, Cloner cloner) 40 : base(original, cloner) { 41 RegisterEventHandlers(); 42 } 39 43 protected MultiObjectiveHeuristicOptimizationProblem() 40 44 : base() { 41 45 Parameters.Add(new ValueParameter<BoolArray>(MaximizationParameterName, "Determines for each objective whether it should be maximized or minimized.")); 46 47 RegisterEventHandlers(); 42 48 } 43 49 … … 45 51 : base(evaluator, solutionCreator) { 46 52 Parameters.Add(new ValueParameter<BoolArray>(MaximizationParameterName, "Determines for each objective whether it should be maximized or minimized.")); 53 54 RegisterEventHandlers(); 55 } 56 57 private void RegisterEventHandlers() { 58 MaximizationParameter.ValueChanged += MaximizationParameterOnValueChanged; 59 } 60 61 private void MaximizationParameterOnValueChanged(object sender, EventArgs e) { 62 OnMaximizationChanged(); 47 63 } 48 64 … … 61 77 get { return Evaluator; } 62 78 } 79 80 public event EventHandler MaximizationChanged; 81 protected void OnMaximizationChanged() { 82 MaximizationChanged?.Invoke(this, EventArgs.Empty); 83 } 63 84 } 64 85 } -
branches/2521_ProblemRefactoring/HeuristicLab.Optimization/3.3/Problems/SingleObjectiveHeuristicOptimizationProblem.cs
r17226 r17317 20 20 #endregion 21 21 22 using System; 23 using HEAL.Attic; 22 24 using HeuristicLab.Common; 23 25 using HeuristicLab.Core; 24 26 using HeuristicLab.Data; 25 27 using HeuristicLab.Parameters; 26 using HEAL.Attic;27 28 28 29 namespace HeuristicLab.Optimization { … … 37 38 [StorableConstructor] 38 39 protected SingleObjectiveHeuristicOptimizationProblem(StorableConstructorFlag _) : base(_) { } 39 protected SingleObjectiveHeuristicOptimizationProblem(SingleObjectiveHeuristicOptimizationProblem<T, U> original, Cloner cloner) : base(original, cloner) { } 40 protected SingleObjectiveHeuristicOptimizationProblem(SingleObjectiveHeuristicOptimizationProblem<T, U> original, Cloner cloner) 41 : base(original, cloner) { 42 RegisterEventHandlers(); 43 } 40 44 protected SingleObjectiveHeuristicOptimizationProblem() 41 45 : base() { 42 46 Parameters.Add(new ValueParameter<BoolValue>(MaximizationParameterName, "Set to false if the problem should be minimized.", new BoolValue())); 43 47 Parameters.Add(new OptionalValueParameter<DoubleValue>(BestKnownQualityParameterName, "The quality of the best known solution of this problem.")); 48 49 RegisterEventHandlers(); 44 50 } 45 51 … … 48 54 Parameters.Add(new ValueParameter<BoolValue>(MaximizationParameterName, "Set to false if the problem should be minimized.", new BoolValue())); 49 55 Parameters.Add(new OptionalValueParameter<DoubleValue>(BestKnownQualityParameterName, "The quality of the best known solution of this problem.")); 56 57 RegisterEventHandlers(); 58 } 59 60 private void RegisterEventHandlers() { 61 MaximizationParameter.ValueChanged += MaximizationParameterOnValueChanged; 62 } 63 64 private void MaximizationParameterOnValueChanged(object sender, EventArgs e) { 65 OnMaximizationChanged(); 50 66 } 51 67 … … 59 75 } 60 76 #endregion 77 RegisterEventHandlers(); 61 78 } 62 79 public ValueParameter<BoolValue> MaximizationParameter { … … 68 85 public BoolValue Maximization { 69 86 get { return MaximizationParameter.Value; } 70 set { MaximizationParameter.Value = value; } 87 set { 88 if (Maximization == value) return; 89 MaximizationParameter.Value = value; 90 } 71 91 } 72 92 … … 85 105 get { return Evaluator; } 86 106 } 107 108 public event EventHandler MaximizationChanged; 109 protected void OnMaximizationChanged() { 110 MaximizationChanged?.Invoke(this, EventArgs.Empty); 111 } 87 112 } 88 113 }
Note: See TracChangeset
for help on using the changeset viewer.