Changeset 17317
- Timestamp:
- 10/04/19 16:03:51 (5 years ago)
- Location:
- branches/2521_ProblemRefactoring
- Files:
-
- 16 edited
Legend:
- Unmodified
- Added
- Removed
-
branches/2521_ProblemRefactoring/HeuristicLab.Core/3.3/Interfaces/IValueParameter.cs
r17226 r17317 37 37 public interface IValueParameter<T> : IValueParameter where T : class, IItem { 38 38 new T Value { get; set; } 39 40 /// <summary> 41 /// Sets property <see cref="Value"/> regardless of ReadOnly state 42 /// </summary> 43 /// <param name="value">The value to set.</param> 44 void ForceValue(T value); 39 45 } 40 46 } -
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 } -
branches/2521_ProblemRefactoring/HeuristicLab.Parameters/3.3/FixedValueParameter.cs
r17226 r17317 32 32 [StorableType("7787B99D-5F32-4639-B47A-76CB4D204392")] 33 33 public class FixedValueParameter<T> : ValueParameter<T>, IFixedValueParameter<T> where T : class, IItem, new() { 34 IItem IFixedValueParameter.Value { get { return Value; } } 34 35 35 public override T Value { 36 get { return base.Value; } 37 set { throw new NotSupportedException("FixedValueParameters do not support setting their value."); } 36 public override void ForceValue(T value) { 37 throw new NotSupportedException("FixedValueParameters do not support setting their value."); 38 38 } 39 40 IItem IFixedValueParameter.Value { get { return Value; } }41 39 42 40 [StorableConstructor] -
branches/2521_ProblemRefactoring/HeuristicLab.Parameters/3.3/OptionalConstrainedValueParameter.cs
r17226 r17317 53 53 set { 54 54 if (ReadOnly) throw new InvalidOperationException("Cannot set the value of a readonly parameter."); 55 if (value != this.value) { 56 if ((value != null) && !validValues.Contains(value)) throw new ArgumentException("Invalid value."); 57 DeregisterValueEvents(); 58 this.value = value; 59 RegisterValueEvents(); 60 OnValueChanged(); 61 } 55 DoSetValue(value); 56 } 57 } 58 public virtual void ForceValue(T value) { 59 DoSetValue(value); 60 } 61 private void DoSetValue(T value) { 62 if (value != this.value) { 63 if ((value != null) && !validValues.Contains(value)) throw new ArgumentException("Invalid value."); 64 DeregisterValueEvents(); 65 this.value = value; 66 RegisterValueEvents(); 67 OnValueChanged(); 62 68 } 63 69 } -
branches/2521_ProblemRefactoring/HeuristicLab.Parameters/3.3/OptionalValueParameter.cs
r17226 r17317 46 46 set { 47 47 if (ReadOnly) throw new InvalidOperationException("Cannot set the value of a readonly parameter."); 48 if (value != this.value) { 49 DeregisterValueEvents(); 50 this.value = value; 51 RegisterValueEvents(); 52 OnValueChanged(); 53 } 48 DoSetValue(value); 49 } 50 } 51 public virtual void ForceValue(T value) { 52 DoSetValue(value); 53 } 54 private void DoSetValue(T value) { 55 if (value != this.value) { 56 DeregisterValueEvents(); 57 this.value = value; 58 RegisterValueEvents(); 59 OnValueChanged(); 54 60 } 55 61 } -
branches/2521_ProblemRefactoring/HeuristicLab.Parameters/3.3/ValueLookupParameter.cs
r17226 r17317 46 46 set { 47 47 if (ReadOnly) throw new InvalidOperationException("Cannot set the value of a readonly parameter."); 48 if (value != this.value) { 49 DeregisterValueEvents(); 50 this.value = value; 51 RegisterValueEvents(); 52 OnValueChanged(); 53 } 54 } 55 } 48 DoSetValue(value); 49 } 50 } 51 public virtual void ForceValue(T value) { 52 DoSetValue(value); 53 } 54 private void DoSetValue(T value) { 55 if (value != this.value) { 56 DeregisterValueEvents(); 57 this.value = value; 58 RegisterValueEvents(); 59 OnValueChanged(); 60 } 61 } 62 56 63 IItem IValueParameter.Value { 57 64 get { return Value; } -
branches/2521_ProblemRefactoring/HeuristicLab.Problems.DataAnalysis.Symbolic/3.4/SymbolicDataAnalysisMultiObjectiveProblem.cs
r17226 r17317 20 20 #endregion 21 21 22 using System; 22 23 using System.Linq; 24 using HEAL.Attic; 23 25 using HeuristicLab.Common; 24 26 using HeuristicLab.Core; … … 26 28 using HeuristicLab.Optimization; 27 29 using HeuristicLab.Parameters; 28 using HEAL.Attic;29 30 30 31 namespace HeuristicLab.Problems.DataAnalysis.Symbolic { … … 77 78 78 79 private void RegisterEventHandler() { 79 Evaluator.QualitiesParameter.ActualNameChanged += new System.EventHandler(QualitiesParameter_ActualNameChanged); 80 Evaluator.QualitiesParameter.ActualNameChanged += new EventHandler(QualitiesParameter_ActualNameChanged); 81 MaximizationParameter.ValueChanged += MaximizationParameter_ValueChanged; 80 82 } 81 83 82 84 protected override void OnEvaluatorChanged() { 83 85 base.OnEvaluatorChanged(); 84 Evaluator.QualitiesParameter.ActualNameChanged += new System.EventHandler(QualitiesParameter_ActualNameChanged);86 Evaluator.QualitiesParameter.ActualNameChanged += new EventHandler(QualitiesParameter_ActualNameChanged); 85 87 Maximization = new BoolArray(Evaluator.Maximization.ToArray()); 86 88 ParameterizeOperators(); 87 89 } 88 90 89 private void QualitiesParameter_ActualNameChanged(object sender, System.EventArgs e) {91 private void QualitiesParameter_ActualNameChanged(object sender, EventArgs e) { 90 92 ParameterizeOperators(); 93 } 94 95 private void MaximizationParameter_ValueChanged(object sender, EventArgs e) { 96 OnMaximizationChanged(); 91 97 } 92 98 … … 98 104 } 99 105 } 106 107 public event EventHandler MaximizationChanged; 108 protected void OnMaximizationChanged() { 109 MaximizationChanged?.Invoke(this, EventArgs.Empty); 110 } 100 111 } 101 112 } -
branches/2521_ProblemRefactoring/HeuristicLab.Problems.DataAnalysis.Symbolic/3.4/SymbolicDataAnalysisSingleObjectiveProblem.cs
r17226 r17317 22 22 using System; 23 23 using System.Linq; 24 using HEAL.Attic; 24 25 using HeuristicLab.Common; 25 26 using HeuristicLab.Core; … … 27 28 using HeuristicLab.Optimization; 28 29 using HeuristicLab.Parameters; 29 using HEAL.Attic;30 30 31 31 namespace HeuristicLab.Problems.DataAnalysis.Symbolic { … … 95 95 private void RegisterEventHandler() { 96 96 Evaluator.QualityParameter.ActualNameChanged += new EventHandler(QualityParameter_ActualNameChanged); 97 MaximizationParameter.ValueChanged += MaximizationParameter_ValueChanged; 97 98 } 98 99 … … 108 109 } 109 110 111 private void MaximizationParameter_ValueChanged(object sender, EventArgs e) { 112 OnMaximizationChanged(); 113 } 114 110 115 protected override void ParameterizeOperators() { 111 116 base.ParameterizeOperators(); … … 116 121 } 117 122 } 123 124 public event EventHandler MaximizationChanged; 125 protected void OnMaximizationChanged() { 126 MaximizationChanged?.Invoke(this, EventArgs.Empty); 127 } 118 128 } 119 129 } -
branches/2521_ProblemRefactoring/HeuristicLab.Problems.ExternalEvaluation/3.4/MultiObjectiveExternalEvaluationProblem.cs
r17315 r17317 90 90 public MultiObjectiveExternalEvaluationProblem(TEncoding encoding) 91 91 : base(encoding) { 92 Parameters.Remove("Maximization"); // readonly in base class93 Parameters.Add(new FixedValueParameter<BoolArray>("Maximization", "Set to false if the problem should be minimized.", new BoolArray()));92 MaximizationParameter.ReadOnly = false; 93 MaximizationParameter.Value = new BoolArray(); 94 94 Parameters.Add(new OptionalValueParameter<EvaluationCache>("Cache", "Cache of previously evaluated solutions.")); 95 95 Parameters.Add(new ValueParameter<CheckedItemCollection<IEvaluationServiceClient>>("Clients", "The clients that are used to communicate with the external application.", new CheckedItemCollection<IEvaluationServiceClient>() { new EvaluationServiceClient() })); … … 99 99 100 100 #region Multi Objective Problem Overrides 101 public override bool[] Maximization {102 get {103 return Parameters.ContainsKey("Maximization") ? ((IValueParameter<BoolArray>)Parameters["Maximization"]).Value.ToArray() : new bool[0];104 }105 }106 107 101 public virtual void SetMaximization(bool[] maximization) { 108 102 ((IStringConvertibleArray)MaximizationParameter.Value).Length = maximization.Length; -
branches/2521_ProblemRefactoring/HeuristicLab.Problems.Programmable/3.3/MultiObjectiveProgrammableProblem.cs
r17315 r17317 26 26 using HeuristicLab.Common.Resources; 27 27 using HeuristicLab.Core; 28 using HeuristicLab.Data;29 28 using HeuristicLab.Optimization; 30 29 using HeuristicLab.Parameters; … … 94 93 95 94 private void OnProblemDefinitionChanged() { 96 Parameters.Remove("Maximization"); 97 Parameters.Add(new ValueParameter<BoolArray>("Maximization", "Set to false if the problem should be minimized.", (BoolArray)new BoolArray(Maximization).AsReadOnly()) {Hidden = true}); 95 Maximization = ProblemDefinition.Maximization; 98 96 Encoding = (TEncoding)ProblemScript.Encoding.Clone(); 99 97 … … 107 105 private void OnProblemScriptNameChanged() { 108 106 Name = ProblemScript.Name; 109 }110 111 public override bool[] Maximization {112 get { return Parameters.ContainsKey("ProblemScript") ? ProblemDefinition.Maximization : new[] {false}; }113 107 } 114 108 -
branches/2521_ProblemRefactoring/HeuristicLab.Problems.TestFunctions.MultiObjective/3.3/MultiObjectiveTestFunctionProblem.cs
r17315 r17317 20 20 #endregion 21 21 using System; 22 using System.Linq;23 22 using HEAL.Attic; 24 23 using HeuristicLab.Analysis; … … 52 51 53 52 #region Properties 54 public override bool[] Maximization {55 get {56 //necessary because of virtual member call in base ctor57 if (!Parameters.ContainsKey("TestFunction")) return new bool[0];58 return TestFunction.Maximization(Objectives).ToArray();59 }60 }61 62 53 public int ProblemSize { 63 54 get { return ProblemSizeParameter.Value.Value; } … … 141 132 #region Events 142 133 private void UpdateParameterValues() { 143 Parameters.Remove(MaximizationParameterName); 144 Parameters.Add(new FixedValueParameter<BoolArray>(MaximizationParameterName, "Set to false if the problem should be minimized.", (BoolArray)new BoolArray(TestFunction.Maximization(Objectives)).AsReadOnly())); 134 Maximization = TestFunction.Maximization(Objectives); 145 135 146 136 Parameters.Remove(BestKnownFrontParameterName);
Note: See TracChangeset
for help on using the changeset viewer.