Free cookie consent management tool by TermsFeed Policy Generator

source: trunk/sources/HeuristicLab.Problems.TestFunctions/3.3/SingleObjectiveTestFunctionProblem.cs @ 6042

Last change on this file since 6042 was 6042, checked in by abeham, 13 years ago

#1425

  • Changed LocalImprovementOperators
    • Changed interface (made Problem a property, added a property that denotes the type of the problem that it can be applied on, added some general parameters)
    • Added some parameters and wiring
    • Changed move discovery and parameterization and added a helper class to ease finding compatible move operators
    • Discovering only IMultiMoveOperators and IExhaustiveMoveOperators and putting the multi move ones first
    • Fixed bug in Apply method that could create an endless string of nested execution contexts
    • Removed all problem specific analyzers in the two local improvement operators and only left the BestAverageWorstQualityAnalyzer since it doesn't make any sense to perform diversity or allele analysis during local improvement in the most common case and those analyzers take a lot of time (one can always add them manually should he/she be interested). The analyzers in the VNS's Analyzer parameter are left untouched.
  • Removed shaking operator and interface from VNS plugin and added that to Optimization and Optimization.Operators
  • Changed some ValueParameters to ConstrainedValueParameters and added type discovery to fill them (using the ProblemType property to get compatible local improvement operators)
  • Added missing GPL license headers
  • Changed some ValueParameters to the new FixedValueParameters
  • Added an additional encoding specific ShakingOperator to each encoding and added that to each problem
    • reason is that only the problem/encoding can really decide if a shaking operator is meaningful or not
  • Fixed an unrelated bug in the BestAverageWorstQualityAnalyzer that I encountered (and made the fix backwards compatible)
    • Also added a snippet for creating the backwards compatible comment marker and region
  • Fixed the operator graph of the VNS main loop
    • The condition to continue only when the local search was not successful is not necessary and is not part of the VNS definition as far as I know it (only condition to break the inner loop is when k reaches k_max)
  • Changed the ShakingOperator to input current index and output the maximum number of neighborhoods instead of a boolean that indicates that the last index has been reached since the maximum number is a little more generally useful and equally powerful in modeling
    • Remodeled the VNS main loop to check for k < k_max in order to continue the inner loop
  • other changes that I forgot...

Still necessary

  • test, test, test
  • check for backwards compatible breakers
  • add a maximum evaluated solutions stop criterion
  • optionally: implement fast problem specific local search improvement operators that do not build on the whole generic overhead (e.g. a 2-opt TSP specific local search operator). The idea of VNS is really to converge to a local optimum which is difficult to achieve using the current rather limited termination options
File size: 21.8 KB
Line 
1#region License Information
2/* HeuristicLab
3 * Copyright (C) 2002-2011 Heuristic and Evolutionary Algorithms Laboratory (HEAL)
4 *
5 * This file is part of HeuristicLab.
6 *
7 * HeuristicLab is free software: you can redistribute it and/or modify
8 * it under the terms of the GNU General Public License as published by
9 * the Free Software Foundation, either version 3 of the License, or
10 * (at your option) any later version.
11 *
12 * HeuristicLab is distributed in the hope that it will be useful,
13 * but WITHOUT ANY WARRANTY; without even the implied warranty of
14 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
15 * GNU General Public License for more details.
16 *
17 * You should have received a copy of the GNU General Public License
18 * along with HeuristicLab. If not, see <http://www.gnu.org/licenses/>.
19 */
20#endregion
21
22using System;
23using System.Collections.Generic;
24using System.Drawing;
25using System.Linq;
26using HeuristicLab.Common;
27using HeuristicLab.Core;
28using HeuristicLab.Data;
29using HeuristicLab.Encodings.RealVectorEncoding;
30using HeuristicLab.Optimization;
31using HeuristicLab.Parameters;
32using HeuristicLab.Persistence.Default.CompositeSerializers.Storable;
33using HeuristicLab.PluginInfrastructure;
34
35namespace HeuristicLab.Problems.TestFunctions {
36  [Item("Single Objective Test Function", "Test function with real valued inputs and a single objective.")]
37  [StorableClass]
38  [Creatable("Problems")]
39  public sealed class SingleObjectiveTestFunctionProblem : ParameterizedNamedItem, ISingleObjectiveHeuristicOptimizationProblem, IStorableContent {
40    public string Filename { get; set; }
41
42    [Storable]
43    private StdDevStrategyVectorCreator strategyVectorCreator;
44    [Storable]
45    private StdDevStrategyVectorCrossover strategyVectorCrossover;
46    [Storable]
47    private StdDevStrategyVectorManipulator strategyVectorManipulator;
48
49    public override Image ItemImage {
50      get { return HeuristicLab.Common.Resources.VSImageLibrary.Type; }
51    }
52
53    #region Parameter Properties
54    public ValueParameter<BoolValue> MaximizationParameter {
55      get { return (ValueParameter<BoolValue>)Parameters["Maximization"]; }
56    }
57    IParameter ISingleObjectiveHeuristicOptimizationProblem.MaximizationParameter {
58      get { return MaximizationParameter; }
59    }
60    public ValueParameter<DoubleMatrix> BoundsParameter {
61      get { return (ValueParameter<DoubleMatrix>)Parameters["Bounds"]; }
62    }
63    public ValueParameter<IntValue> ProblemSizeParameter {
64      get { return (ValueParameter<IntValue>)Parameters["ProblemSize"]; }
65    }
66    public ValueParameter<IRealVectorCreator> SolutionCreatorParameter {
67      get { return (ValueParameter<IRealVectorCreator>)Parameters["SolutionCreator"]; }
68    }
69    IParameter IHeuristicOptimizationProblem.SolutionCreatorParameter {
70      get { return SolutionCreatorParameter; }
71    }
72    public ValueParameter<ISingleObjectiveTestFunctionProblemEvaluator> EvaluatorParameter {
73      get { return (ValueParameter<ISingleObjectiveTestFunctionProblemEvaluator>)Parameters["Evaluator"]; }
74    }
75    IParameter IHeuristicOptimizationProblem.EvaluatorParameter {
76      get { return EvaluatorParameter; }
77    }
78    public OptionalValueParameter<DoubleValue> BestKnownQualityParameter {
79      get { return (OptionalValueParameter<DoubleValue>)Parameters["BestKnownQuality"]; }
80    }
81    IParameter ISingleObjectiveHeuristicOptimizationProblem.BestKnownQualityParameter {
82      get { return BestKnownQualityParameter; }
83    }
84    public OptionalValueParameter<RealVector> BestKnownSolutionParameter {
85      get { return (OptionalValueParameter<RealVector>)Parameters["BestKnownSolution"]; }
86    }
87    #endregion
88
89    #region Properties
90    public BoolValue Maximization {
91      get { return MaximizationParameter.Value; }
92      set { MaximizationParameter.Value = value; }
93    }
94    public DoubleMatrix Bounds {
95      get { return BoundsParameter.Value; }
96      set { BoundsParameter.Value = value; }
97    }
98    public IntValue ProblemSize {
99      get { return ProblemSizeParameter.Value; }
100      set { ProblemSizeParameter.Value = value; }
101    }
102    public IRealVectorCreator SolutionCreator {
103      get { return SolutionCreatorParameter.Value; }
104      set { SolutionCreatorParameter.Value = value; }
105    }
106    ISolutionCreator IHeuristicOptimizationProblem.SolutionCreator {
107      get { return SolutionCreatorParameter.Value; }
108    }
109    public ISingleObjectiveTestFunctionProblemEvaluator Evaluator {
110      get { return EvaluatorParameter.Value; }
111      set { EvaluatorParameter.Value = value; }
112    }
113    ISingleObjectiveEvaluator ISingleObjectiveHeuristicOptimizationProblem.Evaluator {
114      get { return EvaluatorParameter.Value; }
115    }
116    IEvaluator IHeuristicOptimizationProblem.Evaluator {
117      get { return EvaluatorParameter.Value; }
118    }
119    public DoubleValue BestKnownQuality {
120      get { return BestKnownQualityParameter.Value; }
121      set { BestKnownQualityParameter.Value = value; }
122    }
123    public IEnumerable<IOperator> Operators {
124      get { return operators; }
125    }
126    private BestSingleObjectiveTestFunctionSolutionAnalyzer BestSingleObjectiveTestFunctionSolutionAnalyzer {
127      get { return operators.OfType<BestSingleObjectiveTestFunctionSolutionAnalyzer>().FirstOrDefault(); }
128    }
129    #endregion
130
131    [Storable]
132    private List<IOperator> operators;
133
134    [StorableConstructor]
135    private SingleObjectiveTestFunctionProblem(bool deserializing) : base(deserializing) { }
136    private SingleObjectiveTestFunctionProblem(SingleObjectiveTestFunctionProblem original, Cloner cloner)
137      : base(original, cloner) {
138      operators = original.operators.Where(x => original.IsNotFieldReferenced(x)).Select(x => cloner.Clone(x)).ToList();
139      strategyVectorCreator = cloner.Clone(original.strategyVectorCreator);
140      operators.Add(strategyVectorCreator);
141      strategyVectorCrossover = cloner.Clone(original.strategyVectorCrossover);
142      operators.Add(strategyVectorCrossover);
143      strategyVectorManipulator = cloner.Clone(original.strategyVectorManipulator);
144      operators.Add(strategyVectorManipulator);
145      AttachEventHandlers();
146    }
147    public SingleObjectiveTestFunctionProblem()
148      : base() {
149      UniformRandomRealVectorCreator creator = new UniformRandomRealVectorCreator();
150      AckleyEvaluator evaluator = new AckleyEvaluator();
151
152      Parameters.Add(new ValueParameter<BoolValue>("Maximization", "Set to false as most test functions are minimization problems.", new BoolValue(evaluator.Maximization)));
153      Parameters.Add(new ValueParameter<DoubleMatrix>("Bounds", "The lower and upper bounds in each dimension.", evaluator.Bounds));
154      Parameters.Add(new ValueParameter<IntValue>("ProblemSize", "The dimension of the problem.", new IntValue(2)));
155      Parameters.Add(new ValueParameter<IRealVectorCreator>("SolutionCreator", "The operator which should be used to create new test function solutions.", creator));
156      Parameters.Add(new ValueParameter<ISingleObjectiveTestFunctionProblemEvaluator>("Evaluator", "The operator which should be used to evaluate test function solutions.", evaluator));
157      Parameters.Add(new OptionalValueParameter<DoubleValue>("BestKnownQuality", "The quality of the best known solution of this test function.", new DoubleValue(evaluator.BestKnownQuality)));
158      Parameters.Add(new OptionalValueParameter<RealVector>("BestKnownSolution", "The best known solution for this test function instance."));
159
160      strategyVectorCreator = new StdDevStrategyVectorCreator();
161      strategyVectorCreator.LengthParameter.ActualName = ProblemSizeParameter.Name;
162      strategyVectorCrossover = new StdDevStrategyVectorCrossover();
163      strategyVectorManipulator = new StdDevStrategyVectorManipulator();
164      strategyVectorManipulator.LearningRateParameter.Value = new DoubleValue(0.5);
165      strategyVectorManipulator.GeneralLearningRateParameter.Value = new DoubleValue(0.5);
166
167      creator.RealVectorParameter.ActualName = "Point";
168      ParameterizeSolutionCreator();
169      ParameterizeEvaluator();
170
171      InitializeOperators();
172      AttachEventHandlers();
173      UpdateStrategyVectorBounds();
174    }
175
176    public override IDeepCloneable Clone(Cloner cloner) {
177      return new SingleObjectiveTestFunctionProblem(this, cloner);
178    }
179
180    private bool IsNotFieldReferenced(IOperator x) {
181      return !(x == strategyVectorCreator
182        || x == strategyVectorCrossover
183        || x == strategyVectorManipulator);
184    }
185
186    #region Events
187    public event EventHandler SolutionCreatorChanged;
188    private void OnSolutionCreatorChanged() {
189      EventHandler handler = SolutionCreatorChanged;
190      if (handler != null) handler(this, EventArgs.Empty);
191    }
192    public event EventHandler EvaluatorChanged;
193    private void OnEvaluatorChanged() {
194      EventHandler handler = EvaluatorChanged;
195      if (handler != null) handler(this, EventArgs.Empty);
196    }
197    public event EventHandler OperatorsChanged;
198    private void OnOperatorsChanged() {
199      EventHandler handler = OperatorsChanged;
200      if (handler != null) handler(this, EventArgs.Empty);
201    }
202    public event EventHandler Reset;
203    private void OnReset() {
204      EventHandler handler = Reset;
205      if (handler != null) handler(this, EventArgs.Empty);
206    }
207
208    private void ProblemSizeParameter_ValueChanged(object sender, EventArgs e) {
209      ProblemSize.ValueChanged += new EventHandler(ProblemSize_ValueChanged);
210      ProblemSize_ValueChanged(null, EventArgs.Empty);
211    }
212    private void ProblemSize_ValueChanged(object sender, EventArgs e) {
213      if (ProblemSize.Value < 1) ProblemSize.Value = 1;
214      ParameterizeSolutionCreator();
215      ParameterizeEvaluator();
216      strategyVectorManipulator.GeneralLearningRateParameter.Value = new DoubleValue(1.0 / Math.Sqrt(2 * ProblemSize.Value));
217      strategyVectorManipulator.LearningRateParameter.Value = new DoubleValue(1.0 / Math.Sqrt(2 * Math.Sqrt(ProblemSize.Value)));
218      OnReset();
219    }
220    private void SolutionCreatorParameter_ValueChanged(object sender, EventArgs e) {
221      ParameterizeSolutionCreator();
222      ParameterizeAnalyzers();
223      SolutionCreator_RealVectorParameter_ActualNameChanged(null, EventArgs.Empty);
224      OnSolutionCreatorChanged();
225    }
226    private void SolutionCreator_RealVectorParameter_ActualNameChanged(object sender, EventArgs e) {
227      ParameterizeEvaluator();
228      ParameterizeOperators();
229      ParameterizeAnalyzers();
230    }
231    private void EvaluatorParameter_ValueChanged(object sender, EventArgs e) {
232      ParameterizeEvaluator();
233      UpdateMoveEvaluators();
234      ParameterizeAnalyzers();
235      Maximization.Value = Evaluator.Maximization;
236      BoundsParameter.Value = Evaluator.Bounds;
237      if (ProblemSize.Value < Evaluator.MinimumProblemSize)
238        ProblemSize.Value = Evaluator.MinimumProblemSize;
239      else if (ProblemSize.Value > Evaluator.MaximumProblemSize)
240        ProblemSize.Value = Evaluator.MaximumProblemSize;
241      BestKnownQuality = new DoubleValue(Evaluator.BestKnownQuality);
242      Evaluator.QualityParameter.ActualNameChanged += new EventHandler(Evaluator_QualityParameter_ActualNameChanged);
243      Evaluator_QualityParameter_ActualNameChanged(null, EventArgs.Empty);
244      OnEvaluatorChanged();
245      OnReset();
246    }
247    private void Evaluator_QualityParameter_ActualNameChanged(object sender, EventArgs e) {
248      ParameterizeOperators();
249    }
250    private void BoundsParameter_ValueChanged(object sender, EventArgs e) {
251      Bounds.ToStringChanged += new EventHandler(Bounds_ToStringChanged);
252      Bounds_ToStringChanged(null, EventArgs.Empty);
253    }
254    private void Bounds_ToStringChanged(object sender, EventArgs e) {
255      if (Bounds.Columns != 2 || Bounds.Rows < 1)
256        Bounds = new DoubleMatrix(1, 2);
257      ParameterizeOperators();
258      UpdateStrategyVectorBounds();
259    }
260    private void Bounds_ItemChanged(object sender, EventArgs<int, int> e) {
261      if (e.Value2 == 0 && Bounds[e.Value, 1] <= Bounds[e.Value, 0])
262        Bounds[e.Value, 1] = Bounds[e.Value, 0] + 0.1;
263      if (e.Value2 == 1 && Bounds[e.Value, 0] >= Bounds[e.Value, 1])
264        Bounds[e.Value, 0] = Bounds[e.Value, 1] - 0.1;
265      ParameterizeOperators();
266      UpdateStrategyVectorBounds();
267    }
268    private void MoveGenerator_AdditiveMoveParameter_ActualNameChanged(object sender, EventArgs e) {
269      string name = ((ILookupParameter<AdditiveMove>)sender).ActualName;
270      foreach (IAdditiveRealVectorMoveOperator op in Operators.OfType<IAdditiveRealVectorMoveOperator>()) {
271        op.AdditiveMoveParameter.ActualName = name;
272      }
273    }
274    private void SphereEvaluator_Parameter_ValueChanged(object sender, EventArgs e) {
275      SphereEvaluator eval = (Evaluator as SphereEvaluator);
276      if (eval != null) {
277        foreach (ISphereMoveEvaluator op in Operators.OfType<ISphereMoveEvaluator>()) {
278          op.C = eval.C;
279          op.Alpha = eval.Alpha;
280        }
281      }
282    }
283    private void RastriginEvaluator_Parameter_ValueChanged(object sender, EventArgs e) {
284      RastriginEvaluator eval = (Evaluator as RastriginEvaluator);
285      if (eval != null) {
286        foreach (IRastriginMoveEvaluator op in Operators.OfType<IRastriginMoveEvaluator>()) {
287          op.A = eval.A;
288        }
289      }
290    }
291    private void strategyVectorCreator_BoundsParameter_ValueChanged(object sender, EventArgs e) {
292      strategyVectorManipulator.BoundsParameter.Value = (DoubleMatrix)strategyVectorCreator.BoundsParameter.Value.Clone();
293    }
294    private void strategyVectorCreator_StrategyParameterParameter_ActualNameChanged(object sender, EventArgs e) {
295      string name = strategyVectorCreator.StrategyParameterParameter.ActualName;
296      strategyVectorCrossover.ParentsParameter.ActualName = name;
297      strategyVectorCrossover.StrategyParameterParameter.ActualName = name;
298      strategyVectorManipulator.StrategyParameterParameter.ActualName = name;
299    }
300    #endregion
301
302    #region Helpers
303    [StorableHook(HookType.AfterDeserialization)]
304    private void AfterDeserialization() {
305      // BackwardsCompatibility3.3
306      #region Backwards compatible code (remove with 3.4)
307      if (operators == null) InitializeOperators();
308      #endregion
309      AttachEventHandlers();
310    }
311
312    private void AttachEventHandlers() {
313      ProblemSizeParameter.ValueChanged += new EventHandler(ProblemSizeParameter_ValueChanged);
314      ProblemSize.ValueChanged += new EventHandler(ProblemSize_ValueChanged);
315      BoundsParameter.ValueChanged += new EventHandler(BoundsParameter_ValueChanged);
316      Bounds.ToStringChanged += new EventHandler(Bounds_ToStringChanged);
317      Bounds.ItemChanged += new EventHandler<EventArgs<int, int>>(Bounds_ItemChanged);
318      SolutionCreatorParameter.ValueChanged += new EventHandler(SolutionCreatorParameter_ValueChanged);
319      SolutionCreator.RealVectorParameter.ActualNameChanged += new EventHandler(SolutionCreator_RealVectorParameter_ActualNameChanged);
320      EvaluatorParameter.ValueChanged += new EventHandler(EvaluatorParameter_ValueChanged);
321      Evaluator.QualityParameter.ActualNameChanged += new EventHandler(Evaluator_QualityParameter_ActualNameChanged);
322      strategyVectorCreator.BoundsParameter.ValueChanged += new EventHandler(strategyVectorCreator_BoundsParameter_ValueChanged);
323      strategyVectorCreator.StrategyParameterParameter.ActualNameChanged += new EventHandler(strategyVectorCreator_StrategyParameterParameter_ActualNameChanged);
324    }
325    private void ParameterizeAnalyzers() {
326      BestSingleObjectiveTestFunctionSolutionAnalyzer.RealVectorParameter.ActualName = SolutionCreator.RealVectorParameter.ActualName;
327      BestSingleObjectiveTestFunctionSolutionAnalyzer.ResultsParameter.ActualName = "Results";
328      BestSingleObjectiveTestFunctionSolutionAnalyzer.QualityParameter.ActualName = Evaluator.QualityParameter.ActualName;
329      BestSingleObjectiveTestFunctionSolutionAnalyzer.BestKnownQualityParameter.ActualName = BestKnownQualityParameter.Name;
330      BestSingleObjectiveTestFunctionSolutionAnalyzer.BestKnownSolutionParameter.ActualName = BestKnownSolutionParameter.Name;
331      BestSingleObjectiveTestFunctionSolutionAnalyzer.MaximizationParameter.ActualName = MaximizationParameter.Name;
332      BestSingleObjectiveTestFunctionSolutionAnalyzer.EvaluatorParameter.ActualName = EvaluatorParameter.Name;
333      BestSingleObjectiveTestFunctionSolutionAnalyzer.BoundsParameter.ActualName = BoundsParameter.Name;
334    }
335    private void InitializeOperators() {
336      operators = new List<IOperator>();
337      operators.Add(new BestSingleObjectiveTestFunctionSolutionAnalyzer());
338      ParameterizeAnalyzers();
339      operators.AddRange(ApplicationManager.Manager.GetInstances<IRealVectorOperator>().Cast<IOperator>());
340      operators.Add(strategyVectorCreator);
341      operators.Add(strategyVectorCrossover);
342      operators.Add(strategyVectorManipulator);
343      UpdateMoveEvaluators();
344      ParameterizeOperators();
345      InitializeMoveGenerators();
346    }
347    private void InitializeMoveGenerators() {
348      foreach (IAdditiveRealVectorMoveOperator op in Operators.OfType<IAdditiveRealVectorMoveOperator>()) {
349        if (op is IMoveGenerator) {
350          op.AdditiveMoveParameter.ActualNameChanged += new EventHandler(MoveGenerator_AdditiveMoveParameter_ActualNameChanged);
351        }
352      }
353    }
354    private void UpdateMoveEvaluators() {
355      foreach (ISingleObjectiveTestFunctionMoveEvaluator op in Operators.OfType<ISingleObjectiveTestFunctionMoveEvaluator>().ToList())
356        operators.Remove(op);
357      foreach (ISingleObjectiveTestFunctionMoveEvaluator op in ApplicationManager.Manager.GetInstances<ISingleObjectiveTestFunctionMoveEvaluator>())
358        if (op.EvaluatorType == Evaluator.GetType()) {
359          operators.Add(op);
360          #region Synchronize evaluator specific parameters with the parameters of the corresponding move evaluators
361          if (op is ISphereMoveEvaluator) {
362            SphereEvaluator e = (Evaluator as SphereEvaluator);
363            e.AlphaParameter.ValueChanged += new EventHandler(SphereEvaluator_Parameter_ValueChanged);
364            e.CParameter.ValueChanged += new EventHandler(SphereEvaluator_Parameter_ValueChanged);
365            ISphereMoveEvaluator em = (op as ISphereMoveEvaluator);
366            em.C = e.C;
367            em.Alpha = e.Alpha;
368          } else if (op is IRastriginMoveEvaluator) {
369            RastriginEvaluator e = (Evaluator as RastriginEvaluator);
370            e.AParameter.ValueChanged += new EventHandler(RastriginEvaluator_Parameter_ValueChanged);
371            IRastriginMoveEvaluator em = (op as IRastriginMoveEvaluator);
372            em.A = e.A;
373          }
374          #endregion
375        }
376      ParameterizeOperators();
377      OnOperatorsChanged();
378    }
379    private void ParameterizeSolutionCreator() {
380      SolutionCreator.LengthParameter.Value = new IntValue(ProblemSize.Value);
381    }
382    private void ParameterizeEvaluator() {
383      Evaluator.PointParameter.ActualName = SolutionCreator.RealVectorParameter.ActualName;
384      BestKnownSolutionParameter.Value = Evaluator.GetBestKnownSolution(ProblemSize.Value);
385    }
386    private void ParameterizeOperators() {
387      foreach (IRealVectorCrossover op in Operators.OfType<IRealVectorCrossover>()) {
388        op.ParentsParameter.ActualName = SolutionCreator.RealVectorParameter.ActualName;
389        op.ChildParameter.ActualName = SolutionCreator.RealVectorParameter.ActualName;
390        op.BoundsParameter.ActualName = BoundsParameter.Name;
391      }
392      foreach (IRealVectorManipulator op in Operators.OfType<IRealVectorManipulator>()) {
393        op.RealVectorParameter.ActualName = SolutionCreator.RealVectorParameter.ActualName;
394        op.BoundsParameter.ActualName = BoundsParameter.Name;
395      }
396      foreach (IRealVectorMoveOperator op in Operators.OfType<IRealVectorMoveOperator>()) {
397        op.RealVectorParameter.ActualName = SolutionCreator.RealVectorParameter.ActualName;
398      }
399      foreach (IRealVectorMoveGenerator op in Operators.OfType<IRealVectorMoveGenerator>()) {
400        op.BoundsParameter.ActualName = BoundsParameter.Name;
401      }
402      foreach (ISingleObjectiveTestFunctionAdditiveMoveEvaluator op in Operators.OfType<ISingleObjectiveTestFunctionAdditiveMoveEvaluator>()) {
403        op.QualityParameter.ActualName = Evaluator.QualityParameter.ActualName;
404        op.RealVectorParameter.ActualName = SolutionCreator.RealVectorParameter.ActualName;
405      }
406      foreach (IRealVectorParticleCreator op in Operators.OfType<IRealVectorParticleCreator>()) {
407        op.RealVectorParameter.ActualName = SolutionCreator.RealVectorParameter.ActualName;
408        op.BoundsParameter.ActualName = BoundsParameter.Name;
409        op.ProblemSizeParameter.ActualName = ProblemSizeParameter.Name;
410      }
411      foreach (IRealVectorParticleUpdater op in Operators.OfType<IRealVectorParticleUpdater>()) {
412        op.RealVectorParameter.ActualName = SolutionCreator.RealVectorParameter.ActualName;
413        op.BoundsParameter.ActualName = BoundsParameter.Name;
414      }
415      foreach (IRealVectorSwarmUpdater op in Operators.OfType<IRealVectorSwarmUpdater>()) {
416        op.RealVectorParameter.ActualName = SolutionCreator.RealVectorParameter.ActualName;
417        op.MaximizationParameter.ActualName = MaximizationParameter.Name;
418      }
419      foreach (var op in Operators.OfType<IRealVectorMultiNeighborhoodShakingOperator>())
420        op.RealVectorParameter.ActualName = SolutionCreator.RealVectorParameter.ActualName;
421    }
422    private void UpdateStrategyVectorBounds() {
423      DoubleMatrix strategyBounds = (DoubleMatrix)Bounds.Clone();
424      for (int i = 0; i < strategyBounds.Rows; i++) {
425        if (strategyBounds[i, 0] < 0) strategyBounds[i, 0] = 0;
426        strategyBounds[i, 1] = 0.1 * (Bounds[i, 1] - Bounds[i, 0]);
427      }
428      strategyVectorCreator.BoundsParameter.Value = strategyBounds;
429    }
430    #endregion
431  }
432}
Note: See TracBrowser for help on using the repository browser.