Free cookie consent management tool by TermsFeed Policy Generator

source: branches/HeuristicLab.MetaOptimization/HeuristicLab.Problems.MetaOptimization/3.3/Encodings/ValueTypeParameterConfiguration.cs @ 4830

Last change on this file since 4830 was 4830, checked in by cneumuel, 13 years ago

#1215 worked on metaoptimization

File size: 3.2 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;
9using HeuristicLab.Common;
10
11namespace HeuristicLab.Problems.MetaOptimization {
12  [StorableClass]
13  public abstract class ValueTypeParameterConfiguration<T> : ParameterConfiguration where T : class, IItem, IStringConvertibleValue, IDeepCloneable {
14    [Storable]
15    private IItemList<IRange<T>> ranges;
16    public IItemList<IRange<T>> Ranges {
17      get { return ranges; }
18    }
19
20    public ValueTypeParameterConfiguration(ParameterConfiguration parentConfiguration, string parameterName, IItem value) : base(parentConfiguration, parameterName, value) {
21      this.ranges = new ItemList<IRange<T>>();
22      this.ranges.ItemsAdded += new CollectionItemsChangedEventHandler<IndexedItem<IRange<T>>>(ranges_ItemsAdded);
23      this.ranges.ItemsRemoved += new CollectionItemsChangedEventHandler<IndexedItem<IRange<T>>>(ranges_ItemsRemoved);
24      this.ranges.CollectionReset += new CollectionItemsChangedEventHandler<IndexedItem<IRange<T>>>(ranges_CollectionReset);
25    }
26
27    protected ValueTypeParameterConfiguration() { }
28    [StorableConstructor]
29    protected ValueTypeParameterConfiguration(bool deserializing) : base(deserializing) { }
30    protected ValueTypeParameterConfiguration(ValueTypeParameterConfiguration<T> original, Cloner cloner) : base(original, cloner) {
31      this.ranges = cloner.Clone(original.Ranges);
32    }
33
34    void ranges_CollectionReset(object sender, CollectionItemsChangedEventArgs<IndexedItem<IRange<T>>> e) {
35      foreach (var i in e.Items) {
36        DeregisterItemEvents(i.Value);
37      }
38      OnStringChanged(sender, e);
39    }
40
41    void ranges_ItemsRemoved(object sender, CollectionItemsChangedEventArgs<IndexedItem<IRange<T>>> e) {
42      foreach (var i in e.Items) {
43        DeregisterItemEvents(i.Value);
44      }
45      OnStringChanged(sender, e);
46    }
47
48    void ranges_ItemsAdded(object sender, CollectionItemsChangedEventArgs<IndexedItem<IRange<T>>> e) {
49      foreach (var i in e.Items) {
50        RegisterItemEvents(i.Value);
51      }
52      OnStringChanged(sender, e);
53    }
54
55    private void DeregisterItemEvents(IRange<T> range) {
56      range.ToStringChanged -= new EventHandler(range_ToStringChanged);
57    }
58    private void RegisterItemEvents(IRange<T> range) {
59      range.ToStringChanged += new EventHandler(range_ToStringChanged);
60    }
61
62    public IntValue GetRandomValue() {
63      return new IntValue(0);
64    }
65   
66    void range_ToStringChanged(object sender, EventArgs e) {
67      OnStringChanged(sender, e);
68    }
69
70    public override string ToString() {
71      return string.Format("{0}: ({1})", base.ToString(), string.Join(",", ranges.Select(r => r.ToString()).ToArray()));
72    }
73
74    //public override void SetRandomValue(IRandom random) {
75    //  int rangeIndex = random.Next(ranges.Count);
76    //  int value = random.Next(ranges.ElementAt(rangeIndex).LowerBound.Value, ranges.ElementAt(rangeIndex).UpperBound.Value); // TODO: respect StepSize parameter
77    //  this.Parameter.ActualValue = new IntValue(value);
78    //}
79  }
80}
Note: See TracBrowser for help on using the repository browser.