Changeset 4997 for branches/HeuristicLab.MetaOptimization/HeuristicLab.Problems.MetaOptimization/3.3/Encodings/ValueConfigurations/ValueConfiguration.cs
- Timestamp:
- 11/30/10 01:08:19 (13 years ago)
- Location:
- branches/HeuristicLab.MetaOptimization
- Files:
-
- 2 edited
Legend:
- Unmodified
- Added
- Removed
-
branches/HeuristicLab.MetaOptimization
- Property svn:ignore
-
old new 1 1 HeuristicLab.MetaOptimization.suo 2 2 HeuristicLab.MetaOptimization.Test 3 HeuristicLab.MetaOptimization.Tests 4 TestResults 5 HeuristicLab.MetaOptimization.vsmdi 6 Local.testsettings 7 TraceAndTestImpact.testsettings
-
- Property svn:ignore
-
branches/HeuristicLab.MetaOptimization/HeuristicLab.Problems.MetaOptimization/3.3/Encodings/ValueConfigurations/ValueConfiguration.cs
r4984 r4997 45 45 } 46 46 47 protected ConstrainedValue constrainedValue;48 public ConstrainedValue ConstrainedValue {49 get { return constrainedValue; }47 protected ConstrainedValue actualValue; 48 public ConstrainedValue ActualValue { 49 get { return actualValue; } 50 50 set { 51 if (this. constrainedValue != value) {51 if (this.actualValue != value) { 52 52 ClearParameterConfigurations(); 53 this. constrainedValue = value;53 this.actualValue = value; 54 54 PopulateParameterConfigurations(); 55 55 OnValueChanged(); … … 67 67 public ValueConfiguration(IItem value, Type valueDataType) { 68 68 this.ParameterConfigurations = new ItemList<IParameterConfiguration>(); 69 this. ConstrainedValue = new ConstrainedValue(value, valueDataType);69 this.ActualValue = new ConstrainedValue(value, valueDataType); 70 70 this.IsOptimizable = true; 71 if ( constrainedValue.ValueDataType == typeof(IntValue)) {72 rangeConstraint = new Range<IntValue>(new IntValue(0), (IntValue)value, new IntValue(1));73 } else if ( constrainedValue.ValueDataType == typeof(DoubleValue)) {74 rangeConstraint = new Range<DoubleValue>(new DoubleValue(0), (DoubleValue)value, new DoubleValue(0.01));75 } else if ( constrainedValue.ValueDataType == typeof(PercentValue)) {76 rangeConstraint = new Range<PercentValue>(new PercentValue(0), new PercentValue(1), new PercentValue(0.001));77 } else if ( constrainedValue.ValueDataType == typeof(BoolValue)) {71 if (actualValue.ValueDataType == typeof(IntValue)) { 72 rangeConstraint = new IntValueRange(new IntValue(0), (IntValue)value, new IntValue(1)); 73 } else if (actualValue.ValueDataType == typeof(DoubleValue)) { 74 rangeConstraint = new DoubleValueRange(new DoubleValue(0), (DoubleValue)value, new DoubleValue(0.01)); 75 } else if (actualValue.ValueDataType == typeof(PercentValue)) { 76 rangeConstraint = new PercentValueRange(new PercentValue(0), new PercentValue(1), new PercentValue(0.001)); 77 } else if (actualValue.ValueDataType == typeof(BoolValue)) { 78 78 this.IsOptimizable = false; // there is nothing to configure for bools 79 79 } else { … … 87 87 protected ValueConfiguration(bool deserializing) { } 88 88 protected ValueConfiguration(ValueConfiguration original, Cloner cloner) : base(original, cloner) { 89 this.ParameterConfigurations = cloner.Clone(original. ParameterConfigurations);90 this. ConstrainedValue = cloner.Clone(original.ConstrainedValue);89 this.ParameterConfigurations = cloner.Clone(original.parameterConfigurations); 90 this.actualValue = cloner.Clone(original.ActualValue); 91 91 this.rangeConstraint = cloner.Clone(original.RangeConstraint); 92 this.IsOptimizable = original.IsOptimizable; 92 this.isOptimizable = original.isOptimizable; 93 this.optimize = original.optimize; 93 94 RegisterEvents(); 94 95 } … … 99 100 100 101 protected virtual void PopulateParameterConfigurations() { 101 if (this. constrainedValue.Value is IParameterizedNamedItem) {102 var parameterizedItem = this. constrainedValue.Value as IParameterizedNamedItem;102 if (this.actualValue.Value is IParameterizedNamedItem) { 103 var parameterizedItem = this.actualValue.Value as IParameterizedNamedItem; 103 104 foreach (var childParameter in parameterizedItem.Parameters) { 104 105 var pc = ParameterConfiguration.Create(parameterizedItem, childParameter); … … 113 114 private void RegisterEvents() { 114 115 if (this.RangeConstraint != null) this.RangeConstraint.ToStringChanged += new EventHandler(RangeConstraint_ToStringChanged); 115 if (this. ConstrainedValue != null) this.ConstrainedValue.ToStringChanged += new EventHandler(ConstrainedValue_ToStringChanged);116 if (this.ActualValue != null) this.ActualValue.ToStringChanged += new EventHandler(ConstrainedValue_ToStringChanged); 116 117 } 117 118 private void DeregisterEvents() { 118 119 if (this.RangeConstraint != null) this.RangeConstraint.ToStringChanged += new EventHandler(RangeConstraint_ToStringChanged); 119 if (this. ConstrainedValue != null) this.ConstrainedValue.ToStringChanged += new EventHandler(ConstrainedValue_ToStringChanged);120 if (this.ActualValue != null) this.ActualValue.ToStringChanged += new EventHandler(ConstrainedValue_ToStringChanged); 120 121 } 121 122 … … 129 130 #region IItem Members 130 131 public override string ItemDescription { 131 get { return ( constrainedValue != null && constrainedValue.Value != null) ? constrainedValue.Value.ItemDescription : base.ItemDescription; }132 get { return (actualValue != null && actualValue.Value != null) ? actualValue.Value.ItemDescription : base.ItemDescription; } 132 133 } 133 134 134 135 public override Image ItemImage { 135 get { return ( constrainedValue != null && constrainedValue.Value != null) ? constrainedValue.Value.ItemImage : base.ItemImage; }136 get { return (actualValue != null && actualValue.Value != null) ? actualValue.Value.ItemImage : base.ItemImage; } 136 137 } 137 138 138 139 public override string ItemName { 139 get { return ( constrainedValue != null && constrainedValue.Value != null) ? constrainedValue.Value.ItemDescription : base.ItemName; }140 get { return (actualValue != null && actualValue.Value != null) ? actualValue.Value.ItemDescription : base.ItemName; } 140 141 } 141 142 #endregion … … 162 163 163 164 public override string ToString() { 164 if ( ConstrainedValue != null && ConstrainedValue.Value != null) {165 if ( ConstrainedValue.Value is IParameterizedItem) {165 if (ActualValue != null && ActualValue.Value != null) { 166 if (ActualValue.Value is IParameterizedItem) { 166 167 if (Optimize) { 167 return string.Format("{0} (Optimize)", ConstrainedValue.Value.ItemName);168 } else { 169 return string.Format("{0}", ConstrainedValue.Value.ItemName);168 return string.Format("{0} (Optimize)", ActualValue.Value.ItemName); 169 } else { 170 return string.Format("{0}", ActualValue.Value.ItemName); 170 171 } 171 172 } else { 172 173 if (Optimize) { 173 return string.Format("{0} (Optimize: {1})", ConstrainedValue.Value.ItemName, RangeConstraint);174 } else { 175 return string.Format("{0}: {1}", ConstrainedValue.Value.ItemName, ConstrainedValue.Value);174 return string.Format("{0} (Optimize: {1})", ActualValue.Value.ItemName, RangeConstraint); 175 } else { 176 return string.Format("{0}: {1}", ActualValue.Value.ItemName, ActualValue.Value); 176 177 } 177 178 } … … 180 181 } 181 182 } 183 184 public void Parameterize() { 185 foreach (IParameterConfiguration pc in this.ParameterConfigurations) { 186 pc.Parameterize(); 187 } 188 } 189 190 public void Randomize() { 191 if (Optimize) { 192 if (rangeConstraint != null) { 193 this.actualValue.Value = rangeConstraint.GetRandomValue(); 194 } else { 195 foreach (IParameterConfiguration pc in this.ParameterConfigurations) { 196 pc.Randomize(); 197 } 198 } 199 } 200 } 201 202 public void Mutate() { 203 if (Optimize) { 204 if (rangeConstraint != null) { 205 Random rand = new Random(); // todo: use common random 206 // mutate every other value. todo: use some kind of mutation operator which is exchangable 207 if(rand.NextDouble() > 0.5) 208 this.actualValue.Value = rangeConstraint.GetRandomValue(); 209 } else { 210 foreach (IParameterConfiguration pc in this.ParameterConfigurations) { 211 pc.Mutate(); 212 } 213 } 214 } 215 } 216 217 public void Cross(IOptimizable other) { 218 if (Optimize) { 219 IValueConfiguration otherVc = (IValueConfiguration)other; 220 if (rangeConstraint != null) { 221 if (this.actualValue.ValueDataType == typeof(IntValue)) { 222 this.actualValue.Value = new IntValue((((IntValue)this.actualValue.Value).Value + ((IntValue)other.ActualValue.Value).Value) / 2); 223 } else if (this.actualValue.ValueDataType == typeof(DoubleValue)) { 224 this.actualValue.Value = new DoubleValue((((DoubleValue)this.actualValue.Value).Value + ((DoubleValue)other.ActualValue.Value).Value) / 2); 225 } else if (this.actualValue.ValueDataType == typeof(PercentValue)) { 226 this.actualValue.Value = new PercentValue((((PercentValue)this.actualValue.Value).Value + ((PercentValue)other.ActualValue.Value).Value) / 2); 227 } else if (this.actualValue.ValueDataType == typeof(BoolValue)) { 228 bool first = ((BoolValue)this.actualValue.Value).Value; 229 bool second = ((BoolValue)other.ActualValue.Value).Value; 230 if (first && second) { 231 this.actualValue.Value = new BoolValue(true); 232 } else if (!first && !second) { 233 this.actualValue.Value = new BoolValue(false); 234 } else { 235 Random rand = new Random(); // todo: use common random 236 if(rand.NextDouble() > 0.5) 237 this.actualValue.Value = new BoolValue(true); 238 else 239 this.actualValue.Value = new BoolValue(false); 240 } 241 } else { 242 throw new NotImplementedException(); 243 } 244 } else { 245 for (int i = 0; i < this.ParameterConfigurations.Count; i++) { 246 this.ParameterConfigurations.ElementAt(i).Cross(otherVc.ParameterConfigurations.ElementAt(i)); 247 } 248 } 249 } 250 } 182 251 } 183 252 }
Note: See TracChangeset
for help on using the changeset viewer.