Free cookie consent management tool by TermsFeed Policy Generator

Ignore:
Timestamp:
04/01/11 17:15:41 (14 years ago)
Author:
cneumuel
Message:

#1215

  • worked on configurability of SymbolicExpressionGrammar
Location:
branches/HeuristicLab.MetaOptimization/HeuristicLab.Problems.MetaOptimization/3.3/Encoding/ParameterConfigurations
Files:
2 edited

Legend:

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

    r5665 r5927  
    99using HeuristicLab.Core;
    1010using HeuristicLab.Data;
     11using HeuristicLab.Encodings.SymbolicExpressionTreeEncoding;
    1112using HeuristicLab.Parameters;
    1213using HeuristicLab.Persistence.Default.CompositeSerializers.Storable;
     
    2526    [Storable]
    2627    protected bool optimize;
    27     public bool Optimize {
     28    public virtual bool Optimize {
    2829      get { return optimize; }
    2930      set {
     
    3334            PopulateValueConfigurations();
    3435          } else {
    35             this.ValueConfigurations.Clear();
     36            ClearValueConfigurations();
    3637          }
    3738          OnOptimizeChanged();
     
    4243
    4344    [Storable]
    44     private Image itemImage;
    45     public virtual Image ItemImage {
     45    protected Image itemImage;
     46    public override Image ItemImage {
    4647      get { return itemImage ?? base.ItemImage; }
    4748    }
     
    160161      }
    161162    }
    162 
     163    public ParameterConfiguration(string parameterName, Type type, IItem actualValue, IEnumerable<IValueConfiguration> valueConfigurations) {
     164      this.ParameterName = parameterName;
     165      this.parameterDataType = type;
     166      this.valueDataType = type;
     167      this.discoverValidValues = false;
     168      this.validValues = null; // maybe use values from valueConfigurations
     169      this.validTypes = new Type[] { type };
     170      this.IsNullable = false;
     171      this.itemImage = valueConfigurations.Count() > 0 ? valueConfigurations.FirstOrDefault().ItemImage : null;
     172      this.ValueConfigurations = new CheckedValueConfigurationList(valueConfigurations);
     173      this.ActualValue = new ConstrainedValue(actualValue, type, CreateValidValues(), this.IsNullable);
     174    }
     175    public ParameterConfiguration(string parameterName, Type type, IItem actualValue) {
     176      this.ParameterName = parameterName;
     177      this.parameterDataType = type;
     178      this.valueDataType = type;
     179      this.discoverValidValues = false;
     180      this.validValues = null;
     181      this.validTypes = new Type[] { type };
     182      this.IsNullable = false;
     183      this.itemImage = actualValue.ItemImage;
     184      this.ValueConfigurations = new CheckedValueConfigurationList();
     185      this.ActualValue = new ConstrainedValue(actualValue, type, CreateValidValues(), this.IsNullable);
     186      if (Optimize) {
     187        PopulateValueConfigurations();
     188      }
     189    }
    163190    public ParameterConfiguration() { }
    164191    [StorableConstructor]
     
    180207      if (this.valueConfigurations != null) RegisterValueConfigurationEvents();
    181208    }
     209
     210
    182211    public override IDeepCloneable Clone(Cloner cloner) {
    183212      return new ParameterConfiguration(this, cloner);
     
    208237    }
    209238
    210     private void PopulateValueConfigurations() {
     239    protected virtual void PopulateValueConfigurations() {
    211240      foreach (Type t in this.validTypes) {
    212241        if (t == typeof(NullValue)) {
     
    220249          }
    221250          if (val != null) { // val can be null when ValidValues does not contain the type (this can happen when discoverValidValues=false)
     251            IValueConfiguration valueConfiguration;
    222252            if (val is IParameterizedItem) {
    223               this.ValueConfigurations.Add(new ParameterizedValueConfiguration(val, val.GetType(), true), true);
     253              valueConfiguration = new ParameterizedValueConfiguration(val, val.GetType(), true);
    224254            } else {
    225               this.ValueConfigurations.Add(new RangeValueConfiguration(val, val.GetType()), true);
     255              if (val is ISymbolicExpressionGrammar) {
     256                valueConfiguration = new SymbolicExpressionGrammarValueConfiguration((ISymbolicExpressionGrammar)val);
     257              } else {
     258                valueConfiguration = new RangeValueConfiguration(val, val.GetType());
     259              }
    226260            }
    227           }
    228         }
    229       }
     261            this.ValueConfigurations.Add(valueConfiguration, true);
     262          }
     263        }
     264      }
     265    }
     266
     267    protected virtual void ClearValueConfigurations() {
     268      this.ValueConfigurations.Clear();
    230269    }
    231270
     
    260299    public IItem CreateItem(Type type) {
    261300      // no valid values; just instantiate
    262       if (validValues == null)
    263         return (IItem)Activator.CreateInstance(type);
     301      try {
     302        if (validValues == null)
     303          return (IItem)Activator.CreateInstance(type);
     304      }
     305      catch (MissingMemberException) {
     306        return null; // can happen, when ApplicationManager.Manager.GetTypes(type, OnlyInstantiable=true) returns objects which have no default constructor
     307      }
    264308
    265309      if (type == typeof(NullValue))
     
    279323        try {
    280324          var val = CreateItem(t);
    281           validValues.Add(val);
     325          if (val != null) validValues.Add(val);
    282326        }
    283327        catch (MissingMethodException) { /* Constructor is missing, don't use those types */ }
     
    415459
    416460    public void Parameterize(IValueParameter parameter) {
     461      if (parameter is IFixedValueParameter)
     462        return;
     463
    417464      if (Optimize) {
    418465        if (this.ActualValue.Value is IParameterizedItem) {
    419466          ((ParameterizedValueConfiguration)this.ValueConfigurations[actualValueConfigurationIndex]).Parameterize((IParameterizedItem)this.ActualValue.Value);
     467        }
     468        if (this.ActualValue.Value is ISymbolicExpressionGrammar) {
     469          ((SymbolicExpressionGrammarValueConfiguration)this.ValueConfigurations[actualValueConfigurationIndex]).Parameterize((ISymbolicExpressionGrammar)this.ActualValue.Value);
    420470        }
    421471      }
  • branches/HeuristicLab.MetaOptimization/HeuristicLab.Problems.MetaOptimization/3.3/Encoding/ParameterConfigurations/SingleValuedParameterConfiguration.cs

    r5665 r5927  
    1 using System.Linq;
     1using System;
     2using System.Linq;
    23using HeuristicLab.Common;
    34using HeuristicLab.Core;
     
    1415      : base(parameterName, valueParameter, false) {
    1516      this.Optimize = true;
     17      base.PopulateValueConfigurations();
    1618      this.ValueConfigurations.Single().Optimize = true;
     19    }
     20    public SingleValuedParameterConfiguration(string parameterName, IValueConfiguration valueConfiguration) {
     21      this.ParameterName = parameterName;
     22      this.parameterDataType = valueConfiguration.ActualValue.ValueDataType;
     23      this.valueDataType = valueConfiguration.ActualValue.ValueDataType;
     24      this.discoverValidValues = false;
     25      this.validValues = new ItemSet<IItem> { valueConfiguration.ActualValue.Value };
     26      this.validTypes = new Type[] {valueConfiguration.ActualValue.ValueDataType};
     27      this.IsNullable = false;
     28      this.itemImage = valueConfiguration.ItemImage;
     29      this.ValueConfigurations = new CheckedValueConfigurationList { valueConfiguration };
     30      this.ValueConfigurations.Single().Optimize = true;
     31      valueConfiguration.ToStringChanged += new EventHandler(valueConfiguration_ToStringChanged);
     32      this.ActualValue = new ConstrainedValue(
     33        valueConfiguration.ActualValue.Value,
     34        valueConfiguration.ActualValue.ValueDataType,
     35        this.validValues,
     36        this.IsNullable);
    1737    }
    1838    public SingleValuedParameterConfiguration() { }
     
    2444    }
    2545    #endregion
     46
     47    protected override void PopulateValueConfigurations() {
     48      // don't change valueconfigurations, since it only contains the one element specified in constructor
     49    }
     50
     51    protected override void ClearValueConfigurations() {
     52      // do nothing
     53    }
     54
     55    public override string ToString() {
     56      if (this.valueConfigurations.First() is SymbolValueConfiguration) {
     57        var syVc = (SymbolValueConfiguration)this.valueConfigurations.First();
     58        if (this.Optimize) {
     59          return syVc.ToString() + " (Optimize)";
     60        } else {
     61          return syVc.ToString();
     62        }
     63      } else {
     64        return base.ToString();
     65      }
     66    }
     67
     68    private void valueConfiguration_ToStringChanged(object sender, EventArgs e) {
     69      OnToStringChanged();
     70    }
    2671  }
    2772}
Note: See TracChangeset for help on using the changeset viewer.