Free cookie consent management tool by TermsFeed Policy Generator

Ignore:
Timestamp:
11/28/10 21:42:49 (13 years ago)
Author:
cneumuel
Message:

#1215 worked on metaoptimization

File:
1 edited

Legend:

Unmodified
Added
Removed
  • branches/HeuristicLab.MetaOptimization/HeuristicLab.Problems.MetaOptimization/3.3/Encodings/ValueConfigurations/ValueConfiguration.cs

    r4839 r4981  
    11using System;
     2using System.Linq;
    23using HeuristicLab.Common;
    34using HeuristicLab.Core;
    45using HeuristicLab.Persistence.Default.CompositeSerializers.Storable;
     6using HeuristicLab.Data;
     7using System.Drawing;
    58
    69namespace HeuristicLab.Problems.MetaOptimization {
    7   [StorableClass]
    8   public class ValueConfiguration : DeepCloneable, IValueConfiguration {
    9     [Storable]
    10     protected IItemList<IParameterConfiguration> parameterConfigurations = new ItemList<IParameterConfiguration>();
    11     public IItemList<IParameterConfiguration> ParameterConfigurations {
     10  // TODO: ItemName/Descr, storability
     11  public class ValueConfiguration : Item, IValueConfiguration {
     12    protected bool optimize;
     13    public bool Optimize {
     14      get { return optimize; }
     15      set {
     16        if (optimize != value) {
     17          optimize = value;
     18          if (optimize) {
     19            ClearParameterConfigurations();
     20            PopulateParameterConfigurations();
     21          } else {
     22            ClearParameterConfigurations();
     23          }
     24          OnOptimizeChanged();
     25          OnToStringChanged();
     26        }
     27      }
     28    }
     29
     30    protected IItemCollection<IParameterConfiguration> parameterConfigurations = new ItemCollection<IParameterConfiguration>();
     31    public IItemCollection<IParameterConfiguration> ParameterConfigurations {
    1232      get { return this.parameterConfigurations; }
    1333      protected set { this.parameterConfigurations = value; }
    1434    }
    1535
    16     protected IItem value;
    17     public IItem Value {
    18       get { return value; }
     36    protected ConstrainedValue constrainedValue;
     37    public ConstrainedValue ConstrainedValue {
     38      get { return constrainedValue; }
    1939      set {
    20         if (this.value != value) {
    21           ClearChildParameterConfigurations();
    22           this.value = value;
    23           if (this.value is IParameterizedNamedItem) AddChildParameterConfigurations(this.value as IParameterizedNamedItem);
     40        if (this.constrainedValue != value) {
     41          ClearParameterConfigurations();
     42          this.constrainedValue = value;
     43          PopulateParameterConfigurations();
    2444          OnValueChanged();
     45          OnToStringChanged();
    2546        }
    2647      }
    2748    }
    2849
    29     protected Type valueDataType;
    30     public Type ValueDataType {
    31       get { return this.valueDataType; }
    32       protected set { this.valueDataType = value; }
     50    protected IRange rangeConstraint;
     51    public IRange RangeConstraint {
     52      get { return rangeConstraint; }
    3353    }
    34 
     54   
     55    #region Constructors and Cloning
    3556    public ValueConfiguration(IItem value, Type valueDataType) {
    36       this.Value = value;
    37       this.ValueDataType = valueDataType;
     57      this.parameterConfigurations = new ItemList<IParameterConfiguration>();
     58      this.ConstrainedValue = new ConstrainedValue(value, valueDataType);
     59      if (constrainedValue.ValueDataType == typeof(IntValue)) {
     60        rangeConstraint = new Range<IntValue>(new IntValue(0), (IntValue)value, new IntValue(1));
     61      } else if (constrainedValue.ValueDataType == typeof(DoubleValue)) {
     62        rangeConstraint = new Range<DoubleValue>(new DoubleValue(0), (DoubleValue)value, new DoubleValue(0.1));
     63      } else {
     64        rangeConstraint = null;
     65      }
     66      RegisterEvents();
    3867    }
    3968
     
    4372    protected ValueConfiguration(ValueConfiguration original, Cloner cloner) : base(original, cloner) {
    4473      this.ParameterConfigurations = cloner.Clone(original.ParameterConfigurations);
    45       this.Value = cloner.Clone(original.Value);
    46       this.ValueDataType = original.ValueDataType;
    47 
     74      this.ConstrainedValue = cloner.Clone(original.ConstrainedValue);
     75      this.rangeConstraint = cloner.Clone(original.RangeConstraint);
     76      RegisterEvents();
    4877    }
    4978    public override IDeepCloneable Clone(Cloner cloner) {
    5079      return new ValueConfiguration(this, cloner);
    5180    }
     81    #endregion
    5282
    53     protected virtual void AddChildParameterConfigurations(IParameterizedNamedItem parameterizedItem) {
    54       foreach (var childParameter in parameterizedItem.Parameters) {
    55         var pc = ParameterConfiguration.Create(parameterizedItem, childParameter);
    56         if (pc != null) this.ParameterConfigurations.Add(pc);
     83    protected virtual void PopulateParameterConfigurations() {
     84      if (this.constrainedValue.Value is IParameterizedNamedItem) {
     85        var parameterizedItem = this.constrainedValue.Value as IParameterizedNamedItem;
     86        foreach (var childParameter in parameterizedItem.Parameters) {
     87          var pc = ParameterConfiguration.Create(parameterizedItem, childParameter);
     88          if (pc != null) this.ParameterConfigurations.Add(pc);
     89        }
    5790      }
    5891    }
    59     protected virtual void ClearChildParameterConfigurations() {
     92    protected virtual void ClearParameterConfigurations() {
    6093      ParameterConfigurations.Clear();
    6194    }
    62    
    63     #region IItem Members
    64     public string ItemDescription {
    65       get { return value.ItemDescription; }
     95
     96    private void RegisterEvents() {
     97      if (this.RangeConstraint != null) this.RangeConstraint.ToStringChanged += new EventHandler(RangeConstraint_ToStringChanged);
     98      if (this.ConstrainedValue != null) this.ConstrainedValue.ToStringChanged += new EventHandler(ConstrainedValue_ToStringChanged);
     99    }
     100    private void DeregisterEvents() {
     101      if (this.RangeConstraint != null) this.RangeConstraint.ToStringChanged += new EventHandler(RangeConstraint_ToStringChanged);
     102      if (this.ConstrainedValue != null) this.ConstrainedValue.ToStringChanged += new EventHandler(ConstrainedValue_ToStringChanged);
    66103    }
    67104
    68     public System.Drawing.Image ItemImage {
    69       get { return value.ItemImage; }
     105    void ConstrainedValue_ToStringChanged(object sender, EventArgs e) {
     106      OnToStringChanged();
     107    }
     108    void RangeConstraint_ToStringChanged(object sender, EventArgs e) {
     109      OnToStringChanged();
    70110    }
    71111
    72     public string ItemName {
    73       get { return value.ItemDescription; }
     112    #region IItem Members
     113    public override string ItemDescription {
     114      get { return (constrainedValue != null && constrainedValue.Value != null) ? constrainedValue.Value.ItemDescription : base.ItemDescription; }
    74115    }
    75116
    76     public Version ItemVersion {
    77       get { return value.ItemVersion; }
     117    public override Image ItemImage {
     118      get { return (constrainedValue != null && constrainedValue.Value != null) ? constrainedValue.Value.ItemImage : base.ItemImage; }
     119    }
     120
     121    public override string ItemName {
     122      get { return (constrainedValue != null && constrainedValue.Value != null) ? constrainedValue.Value.ItemDescription : base.ItemName; }
    78123    }
    79124    #endregion
    80125
    81     #region Events
    82     public virtual event EventHandler ItemImageChanged;
    83     protected virtual void OnItemImageChanged(object sender, EventArgs e) {
    84       var handler = ItemImageChanged;
    85       if (handler != null) handler(sender, e);
    86     }
    87 
    88     public virtual event EventHandler ToStringChanged;
    89     protected virtual void OnStringChanged(object sender, EventArgs e) {
    90       var handler = ToStringChanged;
    91       if (handler != null) handler(this, e); // important to set 'this' as sender
    92     }
    93 
     126    #region Event Handlers
    94127    public virtual event EventHandler ValueChanged;
    95128    protected virtual void OnValueChanged() {
     
    97130      if (handler != null) handler(this, EventArgs.Empty);
    98131    }
     132
     133    public virtual event EventHandler OptimizeChanged;
     134    protected virtual void OnOptimizeChanged() {
     135      var handler = OptimizeChanged;
     136      if (handler != null) handler(this, EventArgs.Empty);
     137    }
    99138    #endregion
    100139
    101140    public override string ToString() {
    102       return value.ItemName;
     141      if (ConstrainedValue != null && ConstrainedValue.Value != null) {
     142        if(Optimize) {
     143          return string.Format("{0}: {1}", ConstrainedValue.Value.ItemName, RangeConstraint);
     144        } else {
     145          return string.Format("{0}: {1}", ConstrainedValue.Value.ItemName, ConstrainedValue.Value);
     146        }       
     147      } else {
     148        return base.ToString();
     149      }
     150
    103151    }
    104152  }
Note: See TracChangeset for help on using the changeset viewer.