Free cookie consent management tool by TermsFeed Policy Generator

source: branches/HeuristicLab.MetaOptimization/HeuristicLab.Problems.MetaOptimization/3.3/Encodings/NumericParameterConfiguration.cs @ 4525

Last change on this file since 4525 was 4525, checked in by cneumuel, 14 years ago

implemented basic crossover operator for ParameterSets. MetaOptimization is now functional on a basic level (Configuration and Crossing only works for IntValue Parameters) (#1215)

File size: 3.1 KB
Line 
1using System;
2using System.Collections.Generic;
3using System.Linq;
4using System.Text;
5using HeuristicLab.Data;
6using HeuristicLab.Core;
7using HeuristicLab.Collections;
8using HeuristicLab.Persistence.Default.CompositeSerializers.Storable;
9
10namespace HeuristicLab.Problems.MetaOptimization {
11  [StorableClass]
12  public class NumericParameterConfiguration : ParameterConfiguration {
13    [Storable]
14    private NumericRangeList ranges;
15    public NumericRangeList Ranges {
16      get { return ranges; }
17    }
18
19    protected NumericParameterConfiguration() { }
20   
21    [StorableConstructor]
22    protected NumericParameterConfiguration(bool deserializing) : base(deserializing) { }
23
24    public NumericParameterConfiguration(IParameter parameter, string category)
25      : base(parameter, category) {
26      this.ranges = new NumericRangeList();
27      this.ranges.ItemsAdded += new CollectionItemsChangedEventHandler<INumericRange>(ranges_ItemsAdded);
28      this.ranges.ItemsRemoved += new CollectionItemsChangedEventHandler<INumericRange>(ranges_ItemsRemoved);
29      this.ranges.CollectionReset += new CollectionItemsChangedEventHandler<INumericRange>(ranges_CollectionReset);
30    }
31
32
33
34    void ranges_CollectionReset(object sender, CollectionItemsChangedEventArgs<INumericRange> e) {
35      foreach (var i in e.Items) {
36        DeregisterItemEvents(i);
37      }
38      OnToStringChanged();
39    }
40
41    void ranges_ItemsRemoved(object sender, CollectionItemsChangedEventArgs<INumericRange> e) {
42      foreach (var i in e.Items) {
43        DeregisterItemEvents(i);
44      }
45      OnToStringChanged();
46    }
47
48    void ranges_ItemsAdded(object sender, CollectionItemsChangedEventArgs<INumericRange> e) {
49      foreach (var i in e.Items) {
50        RegisterItemEvents(i);
51      }
52      OnToStringChanged();
53    }
54
55    private void DeregisterItemEvents(INumericRange range) {
56      range.ToStringChanged -= new EventHandler(range_ToStringChanged);
57    }
58    private void RegisterItemEvents(INumericRange range) {
59      range.ToStringChanged += new EventHandler(range_ToStringChanged);
60    }
61
62    public IntValue GetRandomValue() {
63      return new IntValue(0);
64    }
65
66    #region Cloning
67    public override Common.IDeepCloneable Clone(Common.Cloner cloner) {
68      NumericParameterConfiguration clone = (NumericParameterConfiguration)base.Clone(cloner);
69      clone.ranges = new NumericRangeList();
70      foreach (INumericRange range in this.ranges) {
71        clone.ranges.Add(range);
72      }
73      return clone;
74    }
75    #endregion
76
77    void range_ToStringChanged(object sender, EventArgs e) {
78      OnToStringChanged();
79    }
80
81    public override string ToString() {
82      return string.Format("{0}: ({1})", base.ToString(), string.Join(",", ranges.Select(r => r.ToString()).ToArray()));
83    }
84
85    public override void SetParameterWithRandomValue(IRandom random) {
86      int rangeIndex = random.Next(ranges.Count);
87      int value = random.Next(ranges.ElementAt(rangeIndex).LowerBound.Value, ranges.ElementAt(rangeIndex).UpperBound.Value); // TODO: respect StepSize parameter
88      this.Parameter.ActualValue = new IntValue(value);
89    }
90  }
91}
Note: See TracBrowser for help on using the repository browser.