Free cookie consent management tool by TermsFeed Policy Generator

source: branches/HeuristicLab.MetaOptimization/HeuristicLab.Problems.MetaOptimization/3.3/Encoding/ValueConfigurations/ValueConfiguration.cs @ 5665

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

#1215

  • implemented optimization of problem parameters
File size: 5.2 KB
Line 
1using System;
2using System.Collections.Generic;
3using System.Drawing;
4using HeuristicLab.Common;
5using HeuristicLab.Core;
6using HeuristicLab.Persistence.Default.CompositeSerializers.Storable;
7
8namespace HeuristicLab.Problems.MetaOptimization {
9  // TODO: ItemName/Descr, storability
10  [StorableClass]
11  public abstract class ValueConfiguration : NamedItem, IValueConfiguration {
12    public override bool CanChangeName {
13      get { return true; }
14    }
15
16    public override bool CanChangeDescription {
17      get { return true; }
18    }
19
20    [Storable]
21    protected bool isOptimizable;
22    public bool IsOptimizable {
23      get { return isOptimizable; }
24      set {
25        if (this.isOptimizable != value) {
26          this.isOptimizable = value;
27          OnIsOptimizableChanged();
28        }
29      }
30    }
31
32    [Storable]
33    protected bool optimize;
34    public virtual bool Optimize {
35      get { return optimize; }
36      set {
37        if (optimize != value) {
38          optimize = value;
39          OnOptimizeChanged();
40          OnToStringChanged();
41        }
42      }
43    }
44
45    [Storable]
46    protected ConstrainedValue actualValue;
47    public virtual ConstrainedValue ActualValue {
48      get { return actualValue; }
49      set {
50        if (this.actualValue != value) {
51          DeregisterActualValueEvents();
52          this.actualValue = value;
53          OnValueChanged();
54          OnToStringChanged();
55          RegisterActualValueEvents();
56        }
57      }
58    }
59
60    [Storable]
61    protected int number = 0;
62    public int Number {
63      get { return number; }
64      set {
65        if (value != number) {
66          number = value;
67          OnToStringChanged();
68        }
69      }
70    }
71
72    #region Constructors and Cloning
73    public ValueConfiguration(IItem value, Type valueDataType) {
74      this.ActualValue = new ConstrainedValue(value, valueDataType, new ItemSet<IItem> { value }, false);
75      this.IsOptimizable = true;
76    }
77
78    public ValueConfiguration() { }
79    [StorableConstructor]
80    protected ValueConfiguration(bool deserializing) { }
81    protected ValueConfiguration(ValueConfiguration original, Cloner cloner)
82      : base(original, cloner) {
83      this.actualValue = cloner.Clone(original.ActualValue);
84      this.isOptimizable = original.isOptimizable;
85      this.optimize = original.optimize;
86      this.number = original.number;
87      RegisterActualValueEvents();
88    }
89    #endregion
90
91    private void RegisterActualValueEvents() {
92      if (this.actualValue != null) this.actualValue.ToStringChanged += new EventHandler(actualValue_ToStringChanged);
93    }
94    private void DeregisterActualValueEvents() {
95      if (this.actualValue != null) this.actualValue.ToStringChanged -= new EventHandler(actualValue_ToStringChanged);
96    }
97
98    #region Events
99    private void actualValue_ToStringChanged(object sender, EventArgs e) {
100      OnToStringChanged();
101    }
102    #endregion
103
104    #region IItem Members
105    public override string ItemDescription {
106      get { return (actualValue != null && actualValue.Value != null) ? actualValue.Value.ItemDescription : base.ItemDescription; }
107    }
108
109    public override Image ItemImage {
110      get { return (actualValue != null && actualValue.Value != null) ? actualValue.Value.ItemImage : base.ItemImage; }
111    }
112
113    public override string ItemName {
114      get { return (actualValue != null && actualValue.Value != null) ? actualValue.Value.ItemDescription : base.ItemName; }
115    }
116    #endregion
117
118    #region Event Handlers
119    public virtual event EventHandler ValueChanged;
120    protected virtual void OnValueChanged() {
121      var handler = ValueChanged;
122      if (handler != null) handler(this, EventArgs.Empty);
123    }
124
125    public virtual event EventHandler IsOptimizableChanged;
126    private void OnIsOptimizableChanged() {
127      var handler = IsOptimizableChanged;
128      if (handler != null) handler(this, EventArgs.Empty);
129    }
130
131    public virtual event EventHandler OptimizeChanged;
132    protected virtual void OnOptimizeChanged() {
133      var handler = OptimizeChanged;
134      if (handler != null) handler(this, EventArgs.Empty);
135    }
136    #endregion
137
138    public string NumberedName {
139      get {
140        if (this.number == 0) {
141          return (ActualValue != null && ActualValue.Value != null) ? ActualValue.Value.ItemName : base.ToString();
142        } else {
143          return string.Format("{0} {1}", ActualValue.Value.ItemName, number);
144        }
145      }
146    }
147
148    public abstract void Randomize(IRandom random);
149    public abstract void Mutate(IRandom random, MutateDelegate mutate, IIntValueManipulator intValueManipulator, IDoubleValueManipulator doubleValueManipulator);
150    public abstract void Cross(IRandom random, IOptimizable other, CrossDelegate cross, IIntValueCrossover intValueCrossover, IDoubleValueCrossover doubleValueCrossover);
151    public abstract double CalculateSimilarity(IOptimizable optimizable);
152    public abstract string ParameterInfoString { get; }
153    public abstract void CollectOptimizedParameterNames(List<string> parameterNames, string prefix);
154    public abstract List<IOptimizable> GetAllOptimizables();
155  }
156}
Note: See TracBrowser for help on using the repository browser.