Free cookie consent management tool by TermsFeed Policy Generator

Ignore:
Timestamp:
11/30/10 01:08:19 (13 years ago)
Author:
cneumuel
Message:

#1215 worked on metaoptimization

Location:
branches/HeuristicLab.MetaOptimization
Files:
2 edited

Legend:

Unmodified
Added
Removed
  • branches/HeuristicLab.MetaOptimization

    • Property svn:ignore
      •  

        old new  
        11HeuristicLab.MetaOptimization.suo
        22HeuristicLab.MetaOptimization.Test
         3HeuristicLab.MetaOptimization.Tests
         4TestResults
         5HeuristicLab.MetaOptimization.vsmdi
         6Local.testsettings
         7TraceAndTestImpact.testsettings
  • branches/HeuristicLab.MetaOptimization/HeuristicLab.Problems.MetaOptimization/3.3/Encodings/ValueConfigurations/ValueConfiguration.cs

    r4984 r4997  
    4545    }
    4646
    47     protected ConstrainedValue constrainedValue;
    48     public ConstrainedValue ConstrainedValue {
    49       get { return constrainedValue; }
     47    protected ConstrainedValue actualValue;
     48    public ConstrainedValue ActualValue {
     49      get { return actualValue; }
    5050      set {
    51         if (this.constrainedValue != value) {
     51        if (this.actualValue != value) {
    5252          ClearParameterConfigurations();
    53           this.constrainedValue = value;
     53          this.actualValue = value;
    5454          PopulateParameterConfigurations();
    5555          OnValueChanged();
     
    6767    public ValueConfiguration(IItem value, Type valueDataType) {
    6868      this.ParameterConfigurations = new ItemList<IParameterConfiguration>();
    69       this.ConstrainedValue = new ConstrainedValue(value, valueDataType);
     69      this.ActualValue = new ConstrainedValue(value, valueDataType);
    7070      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)) {
    7878        this.IsOptimizable = false; // there is nothing to configure for bools
    7979      } else {
     
    8787    protected ValueConfiguration(bool deserializing) { }
    8888    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);
    9191      this.rangeConstraint = cloner.Clone(original.RangeConstraint);
    92       this.IsOptimizable = original.IsOptimizable;
     92      this.isOptimizable = original.isOptimizable;
     93      this.optimize = original.optimize;
    9394      RegisterEvents();
    9495    }
     
    99100
    100101    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;
    103104        foreach (var childParameter in parameterizedItem.Parameters) {
    104105          var pc = ParameterConfiguration.Create(parameterizedItem, childParameter);
     
    113114    private void RegisterEvents() {
    114115      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);
    116117    }
    117118    private void DeregisterEvents() {
    118119      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);
    120121    }
    121122
     
    129130    #region IItem Members
    130131    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; }
    132133    }
    133134
    134135    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; }
    136137    }
    137138
    138139    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; }
    140141    }
    141142    #endregion
     
    162163
    163164    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) {
    166167          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);
    170171          }
    171172        } else {
    172173          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);
    176177          }
    177178        }
     
    180181      }
    181182    }
     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    }
    182251  }
    183252}
Note: See TracChangeset for help on using the changeset viewer.