Changeset 13469 for branches/ProblemRefactoring/HeuristicLab.Optimization/3.3/BasicProblems/Problem.cs
- Timestamp:
- 12/15/15 15:16:24 (9 years ago)
- File:
-
- 1 edited
Legend:
- Unmodified
- Added
- Removed
-
branches/ProblemRefactoring/HeuristicLab.Optimization/3.3/BasicProblems/Problem.cs
r13396 r13469 30 30 namespace HeuristicLab.Optimization { 31 31 [StorableClass] 32 public abstract class Problem<TEncoding, TSolution, TEvaluator> : HeuristicOptimizationProblem<TEvaluator, ISolutionCreator<TSolution>>, IProblemDefinition<TEncoding, TSolution>, IStorableContent 32 public abstract class Problem<TEncoding, TSolution, TEvaluator> : Problem, 33 IHeuristicOptimizationProblem, IProblemDefinition<TEncoding, TSolution>, IStorableContent 33 34 where TEncoding : class, IEncoding<TSolution> 34 35 where TSolution : class, ISolution 35 36 where TEvaluator : class, IEvaluator { 36 37 37 public string Filename { get; set; } // TODO: Really okay here? 38 public string Filename { get; set; } // TODO: Really okay here? should be in Problem (non-generic) 38 39 40 //TODO remove parametr for encoding? 39 41 protected IValueParameter<TEncoding> EncodingParameter { 40 42 get { return (IValueParameter<TEncoding>)Parameters["Encoding"]; } 41 43 } 42 43 44 //mkommend necessary for reuse of operators if the encoding changes 44 45 private TEncoding oldEncoding; 45 46 46 public TEncoding Encoding { 47 47 get { return EncodingParameter.Value; } … … 51 51 } 52 52 } 53 54 ISolutionCreator IHeuristicOptimizationProblem.SolutionCreator { 55 get { return Encoding.SolutionCreator; } 56 } 57 IParameter IHeuristicOptimizationProblem.SolutionCreatorParameter { 58 get { return Encoding.SolutionCreatorParameter; } 59 } 60 event EventHandler IHeuristicOptimizationProblem.SolutionCreatorChanged { 61 add { Encoding.SolutionCreatorChanged += value; } 62 remove { Encoding.SolutionCreatorChanged -= value; } 63 } 64 65 //TODO is a parameter for the evaluator really necessary, only single-objective or multi-objective evulators calling the func are possible 66 public ValueParameter<TEvaluator> EvaluatorParameter { 67 get { return (ValueParameter<TEvaluator>)Parameters["Evaluator"]; } 68 } 69 public TEvaluator Evaluator { 70 get { return EvaluatorParameter.Value; } 71 protected set { EvaluatorParameter.Value = value; } 72 } 73 IEvaluator IHeuristicOptimizationProblem.Evaluator { get { return Evaluator; } } 74 IParameter IHeuristicOptimizationProblem.EvaluatorParameter { get { return EvaluatorParameter; } } 75 76 public event EventHandler EvaluatorChanged; 77 protected virtual void OnEvaluatorChanged() { 78 EventHandler handler = EvaluatorChanged; 79 if (handler != null) 80 handler(this, EventArgs.Empty); 81 } 82 53 83 54 84 protected override IEnumerable<IItem> GetOperators() { … … 66 96 : base() { 67 97 Parameters.Add(new ValueParameter<TEncoding>("Encoding", "Describes the configuration of the encoding, what the variables are called, what type they are and their bounds if any.")); 98 Parameters.Add(new ValueParameter<TEvaluator>("Evaluator", "The operator used to evaluate a solution.")); 99 68 100 if (Encoding != null) { 69 101 oldEncoding = Encoding; 70 SolutionCreator = Encoding.SolutionCreator;71 102 Parameterize(); 72 103 } … … 76 107 if (encoding == null) throw new ArgumentNullException("encoding"); 77 108 Parameters.Add(new ValueParameter<TEncoding>("Encoding", "Describes the configuration of the encoding, what the variables are called, what type they are and their bounds if any.", encoding)); 109 Parameters.Add(new ValueParameter<TEvaluator>("Evaluator", "The operator used to evaluate a solution.")); 110 78 111 oldEncoding = Encoding; 79 SolutionCreator = Encoding.SolutionCreator;80 112 Parameterize(); 81 113 … … 99 131 private void RegisterEvents() { 100 132 EncodingParameter.ValueChanged += (o, e) => OnEncodingChanged(); 133 EvaluatorParameter.ValueChanged += (o, e) => OnEvaluatorChanged(); 101 134 //var multiEncoding = Encoding as MultiEncoding; 102 135 //if (multiEncoding != null) multiEncoding.EncodingsChanged += MultiEncodingOnEncodingsChanged; … … 122 155 op.EncodingParameter.ActualName = EncodingParameter.Name; 123 156 124 SolutionCreator = Encoding.SolutionCreator;125 126 157 //var multiEncoding = Encoding as MultiEncoding; 127 158 //if (multiEncoding != null) multiEncoding.EncodingsChanged += MultiEncodingOnEncodingsChanged; 128 159 } 129 160 130 protected override void OnSolutionCreatorChanged() {131 base.OnSolutionCreatorChanged();132 Encoding.SolutionCreator = SolutionCreator;133 }161 //protected override void OnSolutionCreatorChanged() { 162 // base.OnSolutionCreatorChanged(); 163 // Encoding.SolutionCreator = SolutionCreator; 164 //} 134 165 135 166 private static void AdaptEncodingOperators(IEncoding oldEncoding, IEncoding newEncoding) { 136 167 if (oldEncoding.GetType() != newEncoding.GetType()) return; 137 168 138 if (oldEncoding .GetType() == typeof(CombinedEncoding)) {169 if (oldEncoding is CombinedEncoding) { 139 170 var oldMultiEncoding = (CombinedEncoding)oldEncoding; 140 171 var newMultiEncoding = (CombinedEncoding)newEncoding;
Note: See TracChangeset
for help on using the changeset viewer.