Changeset 4997 for branches/HeuristicLab.MetaOptimization/HeuristicLab.Problems.MetaOptimization/3.3/Encodings
- Timestamp:
- 11/30/10 01:08:19 (14 years ago)
- Location:
- branches/HeuristicLab.MetaOptimization
- Files:
-
- 3 added
- 6 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/Crossovers/ParameterConfigurationCrossover.cs
r4839 r4997 73 73 IntegerVector integerChild = HeuristicLab.Encodings.IntegerVectorEncoding.DiscreteCrossover.Apply( 74 74 RandomParameter.ActualValue, 75 new IntegerVector(new IntArray(new int[] { ((IntValue)parameter1.ActualValue Configuration).Value })),76 new IntegerVector(new IntArray(new int[] { ((IntValue)parameter2.ActualValue Configuration).Value })));75 new IntegerVector(new IntArray(new int[] { ((IntValue)parameter1.ActualValue.Value).Value })), 76 new IntegerVector(new IntArray(new int[] { ((IntValue)parameter2.ActualValue.Value).Value }))); 77 77 return new IntValue(integerChild[0]); 78 78 } -
branches/HeuristicLab.MetaOptimization/HeuristicLab.Problems.MetaOptimization/3.3/Encodings/ParameterConfigurations/ParameterConfiguration.cs
r4984 r4997 80 80 } 81 81 82 // todo: chooses one of the parameter configurations as actual value 83 protected IValueConfiguration actualValueConfiguration; 84 public IValueConfiguration ActualValueConfiguration { 85 get { return this.actualValueConfiguration; } 86 set { this.actualValueConfiguration = value; } 87 } 88 89 public ConstrainedValue ConstrainedValue { 90 get { return actualValueConfiguration.ConstrainedValue; } 91 set { actualValueConfiguration.ConstrainedValue = value; } 82 protected int actualValueConfigurationIndex = 0; 83 84 protected ConstrainedValue actualValue; 85 public ConstrainedValue ActualValue { 86 get { return actualValue; } 87 set { actualValue = value; } 92 88 } 93 89 … … 103 99 this.validValues = GetValidValues(); 104 100 this.ValueConfigurations = new CheckedValueConfigurationCollection(this.valueDataType); 105 this.ActualValue Configuration = new ValueConfiguration(valueParameter.Value, valueParameter.DataType);101 this.ActualValue = new ConstrainedValue(valueParameter.Value, valueParameter.DataType); 106 102 if (Optimize) { 107 103 PopulateValueConfigurations(); … … 112 108 [StorableConstructor] 113 109 protected ParameterConfiguration(bool deserializing) { } 114 protected ParameterConfiguration(ParameterConfiguration original, Cloner cloner) 115 : base(original, cloner) { 116 this.ParameterName = original.ParameterName; 110 protected ParameterConfiguration(ParameterConfiguration original, Cloner cloner) : base(original, cloner) { 111 this.parameterName = original.ParameterName; 117 112 this.parameterDataType = original.parameterDataType; 118 113 this.parameter = cloner.Clone(original.parameter); 119 this. ValueDataType = original.ValueDataType;120 this. ValidValues = original.ValidValues.Select(x => cloner.Clone(x));114 this.valueDataType = original.ValueDataType; 115 this.validValues = original.ValidValues.Select(x => cloner.Clone(x)); 121 116 this.ValueConfigurations = cloner.Clone(original.ValueConfigurations); 122 this.ActualValue Configuration = cloner.Clone(original.ActualValueConfiguration);123 this. Optimize = original.optimize;117 this.ActualValue = cloner.Clone(original.ActualValue); 118 this.optimize = original.optimize; 124 119 } 125 120 public override IDeepCloneable Clone(Cloner cloner) { … … 143 138 foreach (IItem validValue in this.validValues) { 144 139 IItem val; 145 if ( actualValueConfiguration.ConstrainedValue.Value != null && actualValueConfiguration.ConstrainedValue.ValueDataType == validValue.GetType()) {146 val = actualValueConfiguration.ConstrainedValue.Value; // use existing value for that type (if available)140 if (ActualValue.Value != null && ActualValue.ValueDataType == validValue.GetType()) { 141 val = ActualValue.Value; // use existing value for that type (if available) 147 142 } else { 148 143 val = validValue; … … 228 223 return string.Format("{0}: (Optimize: {1})", ParameterName, ValueConfigurations.CheckedItems.Count()); 229 224 } else { 230 return string.Format("{0}: {1}", ParameterName, ConstrainedValue.Value);225 return string.Format("{0}: {1}", ParameterName, ActualValue.Value); 231 226 } 232 227 } … … 239 234 return null; 240 235 } 236 237 public void Parameterize() { 238 this.parameter.ActualValue = this.ActualValue.Value; 239 } 240 241 public void Randomize() { 242 if (Optimize) { 243 Random rand = new Random(); // todo: use global random 244 actualValueConfigurationIndex = rand.Next(ValueConfigurations.CheckedItems.Count()); 245 this.ValueConfigurations.CheckedItems.ElementAt(actualValueConfigurationIndex).Randomize(); 246 this.ActualValue = this.ValueConfigurations.CheckedItems.ElementAt(actualValueConfigurationIndex).ActualValue; 247 } 248 } 249 250 public void Mutate() { 251 if (Optimize) { 252 foreach (IValueConfiguration vc in this.ValueConfigurations.CheckedItems) { 253 vc.Mutate(); 254 } 255 this.ActualValue = this.ValueConfigurations.CheckedItems.ElementAt(actualValueConfigurationIndex).ActualValue; 256 } 257 } 258 259 public void Cross(IOptimizable other) { 260 if (Optimize) { 261 IParameterConfiguration otherPc = (IParameterConfiguration)other; 262 for (int i = 0; i < this.ValueConfigurations.Count; i++) { 263 this.ValueConfigurations.ElementAt(i).Cross(otherPc.ValueConfigurations.ElementAt(i)); 264 } 265 this.ActualValue = this.ValueConfigurations.CheckedItems.ElementAt(actualValueConfigurationIndex).ActualValue; 266 } 267 } 241 268 } 242 269 } -
branches/HeuristicLab.MetaOptimization/HeuristicLab.Problems.MetaOptimization/3.3/Encodings/RangeConstraints/ConstrainedValue.cs
r4981 r4997 46 46 protected ConstrainedValue(ConstrainedValue original, Cloner cloner) : base(original, cloner) { 47 47 this.valueDataType = original.valueDataType; 48 this. value = cloner.Clone(value);48 this.Value = cloner.Clone(original.value); 49 49 } 50 50 public override IDeepCloneable Clone(Cloner cloner) { -
branches/HeuristicLab.MetaOptimization/HeuristicLab.Problems.MetaOptimization/3.3/Encodings/RangeConstraints/Range.cs
r4981 r4997 7 7 namespace HeuristicLab.Problems.MetaOptimization { 8 8 [StorableClass] 9 public class Range<T> : Item, IRange<T> where T : class, IStringConvertibleValue, IDeepCloneable {9 public abstract class Range<T> : Item, IRange<T> where T : class, IItem, IStringConvertibleValue, IDeepCloneable { 10 10 [Storable] 11 11 private T lowerBound; … … 84 84 } 85 85 86 public Range() { } 86 87 [StorableConstructor] 87 88 protected Range(bool deserializing) : base(deserializing) { } 88 protected Range(Range<T> original, Cloner cloner) 89 : base(original, cloner) { 89 protected Range(Range<T> original, Cloner cloner) : base(original, cloner) { 90 90 this.LowerBound = cloner.Clone(original.LowerBound); 91 91 this.UpperBound = cloner.Clone(original.UpperBound); 92 92 this.StepSize = cloner.Clone(original.StepSize); 93 }94 public override IDeepCloneable Clone(Cloner cloner) {95 return new Range<T>(this, cloner);96 93 } 97 94 #endregion … … 193 190 194 191 #endregion 192 193 194 195 public abstract T GetRandomValue(); 196 197 #region IRange Members 198 199 200 IItem IRange.GetRandomValue() { 201 return GetRandomValue(); 202 } 203 204 #endregion 195 205 } 196 206 } -
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.