Free cookie consent management tool by TermsFeed Policy Generator

Ignore:
Timestamp:
01/11/11 16:00:17 (13 years ago)
Author:
cneumuel
Message:

#1215

  • implemented crossover and manipulator operators for int and double values
File:
1 edited

Legend:

Unmodified
Added
Removed
  • branches/HeuristicLab.MetaOptimization/HeuristicLab.Problems.MetaOptimization/3.3/Encoding/ParameterConfigurations/ParameterConfiguration.cs

    r5267 r5277  
    1212using System.Reflection;
    1313using HeuristicLab.Optimization;
     14using HeuristicLab.Collections;
    1415
    1516namespace HeuristicLab.Problems.MetaOptimization {
     
    7879
    7980    [Storable]
    80     protected ICheckedValueConfigurationCollection valueConfigurations;
    81     public ICheckedValueConfigurationCollection ValueConfigurations {
     81    protected ICheckedValueConfigurationList valueConfigurations;
     82    public ICheckedValueConfigurationList ValueConfigurations {
    8283      get { return this.valueConfigurations; }
    8384      protected set {
     
    135136        validTypes = new List<Type>(validTypes) { typeof(NullValue) }.ToArray();
    136137      }
    137       this.ValueConfigurations = new CheckedValueConfigurationCollection();
     138      this.ValueConfigurations = new CheckedValueConfigurationList();
    138139      this.ActualValue = new ConstrainedValue(
    139140        valueParameter.Value != null ? (IItem)valueParameter.Value.Clone() : null,
     
    173174
    174175    private void RegisterValueConfigurationEvents() {
    175       this.ValueConfigurations.CheckedItemsChanged += new Collections.CollectionItemsChangedEventHandler<IValueConfiguration>(ValueConfigurations_CheckedItemsChanged);
    176       this.ValueConfigurations.ItemsAdded += new Collections.CollectionItemsChangedEventHandler<IValueConfiguration>(ValueConfigurations_ItemsAdded);
    177       this.ValueConfigurations.ItemsRemoved += new Collections.CollectionItemsChangedEventHandler<IValueConfiguration>(ValueConfigurations_ItemsRemoved);
     176      this.ValueConfigurations.CheckedItemsChanged += new CollectionItemsChangedEventHandler<IndexedItem<IValueConfiguration>>(ValueConfigurations_CheckedItemsChanged);
     177      this.ValueConfigurations.ItemsAdded += new CollectionItemsChangedEventHandler<IndexedItem<IValueConfiguration>>(ValueConfigurations_ItemsAdded);
     178      this.ValueConfigurations.ItemsRemoved += new CollectionItemsChangedEventHandler<IndexedItem<IValueConfiguration>>(ValueConfigurations_ItemsRemoved);
    178179    }
    179180
    180181    private void DeregisterValueConfigurationEvents() {
    181       this.ValueConfigurations.CheckedItemsChanged -= new Collections.CollectionItemsChangedEventHandler<IValueConfiguration>(ValueConfigurations_CheckedItemsChanged);
    182       this.ValueConfigurations.ItemsAdded -= new Collections.CollectionItemsChangedEventHandler<IValueConfiguration>(ValueConfigurations_ItemsAdded);
    183       this.ValueConfigurations.ItemsRemoved -= new Collections.CollectionItemsChangedEventHandler<IValueConfiguration>(ValueConfigurations_ItemsRemoved);
     182      this.ValueConfigurations.CheckedItemsChanged -= new CollectionItemsChangedEventHandler<IndexedItem<IValueConfiguration>>(ValueConfigurations_CheckedItemsChanged);
     183      this.ValueConfigurations.ItemsAdded -= new CollectionItemsChangedEventHandler<IndexedItem<IValueConfiguration>>(ValueConfigurations_ItemsAdded);
     184      this.ValueConfigurations.ItemsRemoved -= new CollectionItemsChangedEventHandler<IndexedItem<IValueConfiguration>>(ValueConfigurations_ItemsRemoved);
    184185    }
    185186
     
    268269    }
    269270
    270     void ValueConfigurations_CheckedItemsChanged(object sender, Collections.CollectionItemsChangedEventArgs<IValueConfiguration> e) {
     271    void ValueConfigurations_CheckedItemsChanged(object sender, Collections.CollectionItemsChangedEventArgs<IndexedItem<IValueConfiguration>> e) {
    271272      OnToStringChanged();
    272273    }
    273     void ValueConfigurations_ItemsRemoved(object sender, Collections.CollectionItemsChangedEventArgs<IValueConfiguration> e) {
     274    void ValueConfigurations_ItemsRemoved(object sender, Collections.CollectionItemsChangedEventArgs<IndexedItem<IValueConfiguration>> e) {
    274275      OnToStringChanged();
    275276    }
    276     void ValueConfigurations_ItemsAdded(object sender, Collections.CollectionItemsChangedEventArgs<IValueConfiguration> e) {
     277    void ValueConfigurations_ItemsAdded(object sender, Collections.CollectionItemsChangedEventArgs<IndexedItem<IValueConfiguration>> e) {
    277278      OnToStringChanged();
    278279    }
     
    360361
    361362          if (this.ActualValue.Value is IParameterizedItem) {
    362             string subParams = this.ValueConfigurations.CheckedItems.ElementAt(actualValueConfigurationIndex).ParameterInfoString;
     363            string subParams = this.ValueConfigurations[actualValueConfigurationIndex].ParameterInfoString;
    363364            if (!string.IsNullOrEmpty(subParams)) {
    364365              sb.Append(" (");
     
    383384      if (Optimize) {
    384385        if (this.ActualValue.Value is IParameterizedItem) {
    385           this.ValueConfigurations.CheckedItems.ElementAt(actualValueConfigurationIndex).Parameterize((IParameterizedItem)this.ActualValue.Value);
     386          this.ValueConfigurations[actualValueConfigurationIndex].Parameterize((IParameterizedItem)this.ActualValue.Value);
    386387        }
    387388      }
     
    410411    public void Randomize(IRandom random) {
    411412      if (Optimize) {
    412         foreach (var vc in this.ValueConfigurations.CheckedItems) {
    413           vc.Randomize(random);
    414         }
    415         actualValueConfigurationIndex = random.Next(ValueConfigurations.CheckedItems.Count());
    416         this.ActualValue = this.ValueConfigurations.CheckedItems.ElementAt(actualValueConfigurationIndex).ActualValue;
    417       }
    418     }
    419 
    420     public void Mutate(IRandom random, MutateDelegate mutate, ParameterConfigurationManipulator pcmanip) {
    421       if (Optimize) {
    422         foreach (IValueConfiguration vc in this.ValueConfigurations.CheckedItems) {
    423           vc.Mutate(random, mutate, pcmanip);
    424         }
    425         mutate(random, this, pcmanip);
    426       }
    427     }
    428 
    429     public void Cross(IRandom random, IOptimizable other, CrossDelegate cross, ParameterConfigurationCrossover pccross) {
     413        foreach (var vc in this.ValueConfigurations) {
     414          if (this.ValueConfigurations.ItemChecked(vc)) {
     415            vc.Randomize(random);
     416          }
     417        }
     418        do {
     419          actualValueConfigurationIndex = random.Next(ValueConfigurations.Count());
     420        } while (!this.ValueConfigurations.ItemChecked(this.ValueConfigurations[actualValueConfigurationIndex]));
     421        this.ActualValue = this.ValueConfigurations[actualValueConfigurationIndex].ActualValue;
     422      }
     423    }
     424
     425    public void Mutate(IRandom random, MutateDelegate mutate, IIntValueManipulator intValueManipulator, IDoubleValueManipulator doubleValueManipulator) {
     426      if (Optimize) {
     427        foreach (var vc in this.ValueConfigurations) {
     428          if (this.ValueConfigurations.ItemChecked(vc)) {
     429            vc.Mutate(random, mutate, intValueManipulator, doubleValueManipulator);
     430          }
     431        }
     432        mutate(random, this, intValueManipulator, doubleValueManipulator);
     433      }
     434    }
     435
     436    public void Cross(IRandom random, IOptimizable other, CrossDelegate cross, IIntValueCrossover intValueCrossover, IDoubleValueCrossover doubleValueCrossover) {
    430437      if (Optimize) {
    431438        IParameterConfiguration otherPc = (IParameterConfiguration)other;
    432439        for (int i = 0; i < this.ValueConfigurations.Count; i++) {
    433           cross(random, other, pccross);
    434           //this.ValueConfigurations.ElementAt(i).Cross(otherPc.ValueConfigurations.ElementAt(i), random);
    435         }
    436         //if (random.NextDouble() > 0.5) {
    437         //  actualValueConfigurationIndex = ((ParameterConfiguration)other).actualValueConfigurationIndex;
    438         //}
    439         //this.ActualValue = this.ValueConfigurations.CheckedItems.ElementAt(actualValueConfigurationIndex).ActualValue;
     440          if (this.ValueConfigurations.ItemChecked(this.ValueConfigurations[i])) {
     441            this.ValueConfigurations[i].Cross(random, otherPc.ValueConfigurations[i], cross, intValueCrossover, doubleValueCrossover);
     442          }
     443        }
     444        cross(random, this, other, intValueCrossover, doubleValueCrossover);
    440445      }
    441446    }
    442447
    443448    public void UpdateActualValueIndexToItem(IValueConfiguration vc) {
    444       for (int i = 0; i < this.ValueConfigurations.CheckedItems.Count(); i++) {
    445         if (this.ValueConfigurations.CheckedItems.ElementAt(i) == vc) {
     449      for (int i = 0; i < this.ValueConfigurations.Count(); i++) {
     450        if (this.ValueConfigurations.ElementAt(i) == vc) {
    446451          this.actualValueConfigurationIndex = i;
    447452          return;
Note: See TracChangeset for help on using the changeset viewer.