- Timestamp:
- 08/29/19 13:53:26 (6 years ago)
- 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 1 1 #region License Information 2 3 2 /* HeuristicLab 4 3 * Copyright (C) 2002-2015 Heuristic and Evolutionary Algorithms Laboratory (HEAL) … … 19 18 * along with HeuristicLab. If not, see <http://www.gnu.org/licenses/>. 20 19 */ 21 22 20 #endregion 23 21 22 using HeuristicLab.Core; 23 using HeuristicLab.Data; 24 24 25 namespace 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 { 28 27 29 28 } 29 30 public interface IMultiObjectiveProblem<TEncoding, TEncodedSolution> : IMultiObjectiveProblem, IProblem<TEncoding, TEncodedSolution> 31 where TEncoding : class, IEncoding<TEncodedSolution> 32 where TEncodedSolution : class, IEncodedSolution { } 30 33 } -
branches/2521_ProblemRefactoring/HeuristicLab.Optimization/3.3/BasicProblems/Interfaces/IMultiObjectiveProblemDefinition.cs
r16806 r17225 20 20 #endregion 21 21 22 using System.Collections; 23 using System.Collections.Generic; 22 24 using HEAL.Attic; 23 25 using HeuristicLab.Core; 26 using HeuristicLab.Data; 24 27 25 28 namespace 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 26 36 [StorableType("39eacdb5-80a0-425d-902a-00eb3e1d6610")] 27 public interface IMultiObjectiveProblemDefinition<TEncoding, TEncodedSolution> : I ProblemDefinition<TEncoding, TEncodedSolution>37 public interface IMultiObjectiveProblemDefinition<TEncoding, TEncodedSolution> : IMultiObjectiveProblemDefinition, IProblemDefinition<TEncoding, TEncodedSolution> 28 38 where TEncoding : class, IEncoding<TEncodedSolution> 29 39 where TEncodedSolution : class, IEncodedSolution { 30 31 int Objectives { get; }32 bool[] Maximization { get; }33 40 double[] Evaluate(TEncodedSolution solution, IRandom random); 34 41 void Analyze(TEncodedSolution[] solutions, double[][] qualities, ResultCollection results, IRandom random); -
branches/2521_ProblemRefactoring/HeuristicLab.Optimization/3.3/BasicProblems/Interfaces/ISingleObjectiveProblem.cs
r16751 r17225 1 1 #region License Information 2 3 2 /* HeuristicLab 4 3 * Copyright (C) 2002-2015 Heuristic and Evolutionary Algorithms Laboratory (HEAL) … … 19 18 * along with HeuristicLab. If not, see <http://www.gnu.org/licenses/>. 20 19 */ 21 22 20 #endregion 23 21 24 22 25 23 namespace 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 { 29 25 30 26 } 27 28 public interface ISingleObjectiveProblem<TEncoding, TEncodedSolution> : ISingleObjectiveProblem, IProblem<TEncoding, TEncodedSolution> 29 where TEncoding : class, IEncoding<TEncodedSolution> 30 where TEncodedSolution : class, IEncodedSolution { } 31 31 } -
branches/2521_ProblemRefactoring/HeuristicLab.Optimization/3.3/BasicProblems/Interfaces/ISingleObjectiveProblemDefinition.cs
r16751 r17225 25 25 26 26 namespace HeuristicLab.Optimization { 27 public interface ISingleObjectiveProblemDefinition { 28 bool Maximization { get; } 29 bool IsBetter(double quality, double bestQuality); 30 } 31 27 32 [StorableType("7ec7bf7e-aaa7-4681-828b-3401cf67e2b3")] 28 public interface ISingleObjectiveProblemDefinition<TEncoding, TEncodedSolution> : I ProblemDefinition<TEncoding, TEncodedSolution>33 public interface ISingleObjectiveProblemDefinition<TEncoding, TEncodedSolution> : ISingleObjectiveProblemDefinition, IProblemDefinition<TEncoding, TEncodedSolution> 29 34 where TEncoding : class, IEncoding<TEncodedSolution> 30 35 where TEncodedSolution : class, IEncodedSolution { 31 bool Maximization { get; }32 36 double Evaluate(TEncodedSolution solution, IRandom random); 33 37 void Analyze(TEncodedSolution[] solutions, double[] qualities, ResultCollection results, IRandom random); 34 38 IEnumerable<TEncodedSolution> GetNeighbors(TEncodedSolution solution, IRandom random); 35 bool IsBetter(double quality, double bestQuality);36 39 } 37 40 } -
branches/2521_ProblemRefactoring/HeuristicLab.Optimization/3.3/BasicProblems/MultiObjectiveProblem.cs
r16806 r17225 20 20 #endregion 21 21 22 using System.Collections; 23 using System.Collections.Generic; 22 24 using System.Linq; 23 25 using HEAL.Attic; … … 35 37 where TEncoding : class, IEncoding<TEncodedSolution> 36 38 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 37 44 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]; } 40 48 } 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 41 57 42 58 [StorableConstructor] … … 49 65 50 66 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")); 53 70 Operators.Add(Evaluator); 54 71 Operators.Add(new MultiObjectiveAnalyzer<TEncodedSolution>()); 55 56 72 ParameterizeOperators(); 57 73 } 58 74 59 75 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")); 62 79 Operators.Add(Evaluator); 63 80 Operators.Add(new MultiObjectiveAnalyzer<TEncodedSolution>()); 64 65 81 ParameterizeOperators(); 66 82 } … … 71 87 } 72 88 73 public int Objectives => Maximization.Length; 89 public int Objectives { 90 get { return Maximization.Length; } 91 } 74 92 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 75 128 public abstract double[] Evaluate(TEncodedSolution solution, IRandom random); 76 129 public virtual void Analyze(TEncodedSolution[] solutions, double[][] qualities, ResultCollection results, IRandom random) { } 130 77 131 78 132 protected override void OnOperatorsChanged() { … … 115 169 #region IMultiObjectiveHeuristicOptimizationProblem Members 116 170 IParameter IMultiObjectiveHeuristicOptimizationProblem.MaximizationParameter { 117 get { return Parameters[ "Maximization"]; }171 get { return Parameters[MaximizationParameterName]; } 118 172 } 119 173 IMultiObjectiveEvaluator IMultiObjectiveHeuristicOptimizationProblem.Evaluator { -
branches/2521_ProblemRefactoring/HeuristicLab.Optimization/3.3/BasicProblems/Operators/MultiEncodingCreator.cs
r16801 r17225 35 35 } 36 36 37 public override string OperatorPrefix => "Creator"; 37 public override string OperatorPrefix { 38 get { return "Creator"; } 39 } 38 40 39 41 [StorableConstructor] -
branches/2521_ProblemRefactoring/HeuristicLab.Optimization/3.3/BasicProblems/Operators/MultiEncodingCrossover.cs
r16801 r17225 33 33 } 34 34 35 public override string OperatorPrefix => "Crossover"; 35 public override string OperatorPrefix { 36 get { return "Crossover"; } 37 } 36 38 37 39 [StorableConstructor] -
branches/2521_ProblemRefactoring/HeuristicLab.Optimization/3.3/BasicProblems/Operators/MultiEncodingManipulator.cs
r16801 r17225 33 33 } 34 34 35 public override string OperatorPrefix => "Manipulator"; 35 public override string OperatorPrefix { 36 get { return "Manipulator"; } 37 } 36 38 [StorableConstructor] 37 39 private MultiEncodingManipulator(StorableConstructorFlag _) : base(_) { } -
branches/2521_ProblemRefactoring/HeuristicLab.Optimization/3.3/BasicProblems/Problem.cs
r16948 r17225 36 36 where TEncodedSolution : class, IEncodedSolution 37 37 where TEvaluator : class, IEvaluator { 38 39 38 public string Filename { get; set; } // TODO: Really okay here? should be in Problem (non-generic) 40 39 … … 60 59 } 61 60 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 } 64 67 } 65 68 … … 72 75 protected set { EvaluatorParameter.Value = value; } 73 76 } 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 } 76 83 77 84 public event EventHandler EvaluatorChanged; … … 90 97 get { 91 98 if (Encoding == null) return base.ExecutionContextItems; 92 return base.ExecutionContextItems.Concat(new[] { Encoding});99 return base.ExecutionContextItems.Concat(new[] {Encoding}); 93 100 } 94 101 } … … 173 180 if (!oldMultiEncoding.Encodings.SequenceEqual(newMultiEncoding.Encodings, new TypeEqualityComparer<IEncoding>())) return; 174 181 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}); 176 183 foreach (var multi in nestedEncodings) 177 184 AdaptEncodingOperators(multi.oldEnc, multi.newEnc);
Note: See TracChangeset
for help on using the changeset viewer.