Free cookie consent management tool by TermsFeed Policy Generator

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

#1215

  • worked on configurability of SymbolicExpressionGrammar
Location:
branches/HeuristicLab.MetaOptimization/HeuristicLab.Problems.MetaOptimization/3.3
Files:
3 added
10 edited

Legend:

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

    r5665 r5927  
    208208      ProblemConfiguration.Parameterize(problem);
    209209
    210       //((IAlgorithm)AlgorithmConfiguration.ActualValue.Value).CollectParameterValues(this.Parameters);
     210      algorithm.CollectParameterValues(this.Parameters);
    211211      //((IProblem)ProblemConfiguration.ActualValue.Value).CollectParameterValues(this.Parameters);
    212     }
     212      //CollectAlgorithmParameterValues((IAlgorithm)AlgorithmConfiguration.ActualValue.Value, parameters);
     213    }
     214
     215    //protected virtual void CollectAlgorithmParameterValues(IAlgorithm algorithm, IDictionary<string, IItem> values) {
     216    //  var algorithmValues = new Dictionary<string, IItem>();
     217    //  algorithm.CollectParameterValues(algorithmValues);
     218    //  foreach (var value in algorithmValues) {
     219    //    values.Add("Algorithm." + value.Key, value.Value);
     220    //  }
     221    //}
    213222
    214223    public Experiment GenerateExperiment(IAlgorithm algorithm, bool createBatchRuns, int repetitions) {
     
    297306      }
    298307    }
     308
     309    public override void CollectOptimizedParameterNames(List<string> parameterNames, string prefix) {
     310      AlgorithmConfiguration.CollectOptimizedParameterNames(parameterNames, string.Empty);
     311      ProblemConfiguration.CollectOptimizedParameterNames(parameterNames, string.Empty);
     312    }
     313
     314   
    299315  }
    300316}
  • 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}
  • branches/HeuristicLab.MetaOptimization/HeuristicLab.Problems.MetaOptimization/3.3/Encoding/ValueConfigurations/CheckedValueConfigurationCollection.cs

    r5361 r5927  
    1 using System;
    2 using System.Collections.Generic;
     1using System.Collections.Generic;
    32using System.Linq;
    4 using System.Text;
     3using HeuristicLab.Collections;
     4using HeuristicLab.Common;
    55using HeuristicLab.Core;
    6 using HeuristicLab.Common;
    76using HeuristicLab.Persistence.Default.CompositeSerializers.Storable;
    8 using HeuristicLab.Collections;
    97
    108namespace HeuristicLab.Problems.MetaOptimization {
     
    2927      RegisterEvents();
    3028    }
     29    public CheckedValueConfigurationList(IEnumerable<IValueConfiguration> collection)
     30      : base(collection) {
     31      validValues = null;
     32      // event wiring not needed
     33    }
    3134    public CheckedValueConfigurationList() {
    3235      RegisterEvents();
     
    4346      RegisterEvents();
    4447    }
     48
    4549    public override IDeepCloneable Clone(Cloner cloner) {
    4650      return new CheckedValueConfigurationList(this, cloner);
     
    6165    }
    6266
    63     void CheckedValueConfigurationList_ItemsAdded(object sender, CollectionItemsChangedEventArgs<IndexedItem<IValueConfiguration>> e) {
     67    private void CheckedValueConfigurationList_ItemsAdded(object sender, CollectionItemsChangedEventArgs<IndexedItem<IValueConfiguration>> e) {
    6468      foreach (var item in e.Items) {
    6569        var matchingItems = this.Where(x => x != item.Value && x.ActualValue.ValueDataType == item.Value.ActualValue.ValueDataType);
  • branches/HeuristicLab.MetaOptimization/HeuristicLab.Problems.MetaOptimization/3.3/Encoding/ValueConfigurations/ParameterizedValueConfiguration.cs

    r5665 r5927  
    2020      get { return base.Optimize; }
    2121      set {
    22         base.Optimize = value;
    23         if (optimize) {
    24           ClearParameterConfigurations();
    25           if (this.actualValue.Value is IParameterizedNamedItem) PopulateParameterConfigurations(this.actualValue.Value as IParameterizedNamedItem, this.discoverValidValues);
    26         } else {
    27           ClearParameterConfigurations();
     22        if (this.optimize != value) {
     23          base.Optimize = value;
     24          if (optimize) {
     25            ClearParameterConfigurations();
     26            PopulateParameterConfigurations(this.actualValue.Value, this.discoverValidValues);
     27          } else {
     28            ClearParameterConfigurations();
     29          }
    2830        }
    2931      }
     
    3537        ClearParameterConfigurations();
    3638        base.ActualValue = value;
    37         if(this.actualValue.Value != null) PopulateParameterConfigurations(this.actualValue.Value as IParameterizedNamedItem, this.discoverValidValues);
     39        if (this.Optimize && this.actualValue.Value != null) PopulateParameterConfigurations(this.actualValue.Value, this.discoverValidValues);
    3840      }
    3941    }
     
    6668    #endregion
    6769
    68     protected virtual void PopulateParameterConfigurations(IParameterizedNamedItem parameterizedItem, bool discoverValidValues) {
    69       foreach (var childParameter in parameterizedItem.Parameters) {
    70         IValueParameter valueParameter = childParameter as IValueParameter;
    71         if (valueParameter != null) {
    72           var pc = new ParameterConfiguration(valueParameter.Name, valueParameter, discoverValidValues);
    73           this.parameterConfigurations.Add(pc);
     70    protected virtual void PopulateParameterConfigurations(IItem item, bool discoverValidValues) {
     71      var parameterizedItem = item as IParameterizedItem;
     72      if (parameterizedItem != null) {
     73        foreach (var childParameter in parameterizedItem.Parameters) {
     74          IValueParameter valueParameter = childParameter as IValueParameter;
     75          if (valueParameter != null) {
     76            var pc = new ParameterConfiguration(valueParameter.Name, valueParameter, discoverValidValues);
     77            this.parameterConfigurations.Add(pc);
     78          }
    7479        }
    7580      }
     
    126131    }
    127132
    128     public IEnumerable<string> GetOptimizedParameterNames() {
     133    public virtual IEnumerable<string> GetOptimizedParameterNames() {
    129134      var list = new List<string>();
    130       this.CollectOptimizedParameterNames(list, "");
     135      this.CollectOptimizedParameterNames(list, string.Empty);
    131136      return list;
    132137    }
  • branches/HeuristicLab.MetaOptimization/HeuristicLab.Problems.MetaOptimization/3.3/Encoding/ValueConfigurations/ValueConfiguration.cs

    r5665 r5927  
    2020    [Storable]
    2121    protected bool isOptimizable;
    22     public bool IsOptimizable {
     22    public virtual bool IsOptimizable {
    2323      get { return isOptimizable; }
    2424      set {
     
    3636      set {
    3737        if (optimize != value) {
     38          if (value == true && !this.IsOptimizable)
     39            throw new NotSupportedException("This value is not optimizable.");
     40
    3841          optimize = value;
    3942          OnOptimizeChanged();
  • branches/HeuristicLab.MetaOptimization/HeuristicLab.Problems.MetaOptimization/3.3/Evaluators/AlgorithmSubScopesCreator.cs

    r5665 r5927  
    5959        for (int j = 0; j < problems.Count; j++) {
    6060          IScope child = new Scope(string.Format("Problem {0}, Repetition {1}", j, i));
    61           var algorithm = (IAlgorithm)Activator.CreateInstance(algorithmType);
    62           algorithm.Problem = (IProblem)problems[j].Clone();
    63           ((EngineAlgorithm)algorithm).Engine = new SequentialEngine.SequentialEngine();
    64 
    65           //((GeneticAlgorithm)algorithm).PopulationSize.Value = 10;
    66           //((GeneticAlgorithm)algorithm).MaximumGenerations.Value = 10;
    67 
    68           parameterConfiguration.Parameterize(algorithm);
     61          var algorithm = MetaOptimizationUtil.CreateParameterizedAlgorithmInstance(parameterConfiguration, algorithmType, (IProblem)problems[j].Clone());
    6962          child.Variables.Add(new Variable("Algorithm", algorithm));
    7063          child.Variables.Add(new Variable("ProblemIndex", new IntValue(j)));
  • branches/HeuristicLab.MetaOptimization/HeuristicLab.Problems.MetaOptimization/3.3/HeuristicLab.Problems.MetaOptimization-3.3.csproj

    r5665 r5927  
    102102      <HintPath>C:\Program Files\HeuristicLab 3.3\HeuristicLab.Encodings.RealVectorEncoding-3.3.dll</HintPath>
    103103    </Reference>
     104    <Reference Include="HeuristicLab.Encodings.SymbolicExpressionTreeEncoding-3.4">
     105      <HintPath>..\..\..\..\..\..\..\Program Files\HeuristicLab 3.3\HeuristicLab.Encodings.SymbolicExpressionTreeEncoding-3.4.dll</HintPath>
     106    </Reference>
    104107    <Reference Include="HeuristicLab.Operators-3.3">
    105108      <HintPath>C:\Program Files\HeuristicLab 3.3\HeuristicLab.Operators-3.3.dll</HintPath>
     
    117120      <HintPath>C:\Program Files\HeuristicLab 3.3\HeuristicLab.PluginInfrastructure-3.3.dll</HintPath>
    118121    </Reference>
    119     <Reference Include="HeuristicLab.Problems.DataAnalysis-3.3">
    120       <HintPath>C:\Program Files\HeuristicLab 3.3\HeuristicLab.Problems.DataAnalysis-3.3.dll</HintPath>
     122    <Reference Include="HeuristicLab.Problems.DataAnalysis-3.4">
     123      <HintPath>..\..\..\..\..\..\..\Program Files\HeuristicLab 3.3\HeuristicLab.Problems.DataAnalysis-3.4.dll</HintPath>
     124    </Reference>
     125    <Reference Include="HeuristicLab.Problems.DataAnalysis.Symbolic-3.4">
     126      <HintPath>..\..\..\..\..\..\..\Program Files\HeuristicLab 3.3\HeuristicLab.Problems.DataAnalysis.Symbolic-3.4.dll</HintPath>
    121127    </Reference>
    122128    <Reference Include="HeuristicLab.Problems.TestFunctions-3.3">
     
    148154    <Compile Include="Encoding\AlgorithmProblemItem.cs" />
    149155    <Compile Include="Encoding\ParameterConfigurations\SingleValuedParameterConfiguration.cs" />
     156    <Compile Include="Encoding\SymbolicRegression\SymbolValueConfiguration.cs" />
     157    <Compile Include="Encoding\SymbolicRegression\SymbolicExpressionGrammarValueConfiguration.cs" />
    150158    <Compile Include="Encoding\ValueConfigurations\RangeValueConfiguration.cs" />
    151159    <Compile Include="Encoding\ValueConfigurations\ParameterizedValueConfiguration.cs" />
  • branches/HeuristicLab.MetaOptimization/HeuristicLab.Problems.MetaOptimization/3.3/MetaOptimizationProblem.cs

    r5665 r5927  
    3838  [Creatable("Problems")]
    3939  [StorableClass]
    40   public sealed class MetaOptimizationProblem : SingleObjectiveProblem<IParameterConfigurationEvaluator, IParameterConfigurationCreator>, IStorableContent {
     40  public sealed class MetaOptimizationProblem : SingleObjectiveHeuristicOptimizationProblem<IParameterConfigurationEvaluator, IParameterConfigurationCreator>, IStorableContent {
    4141    public string Filename { get; set; }
    42 
     42   
    4343    public const string AlgorithmTypeParameterName = "AlgorithmType";
    4444    public const string ProblemTypeParameterName = "ProblemType";
     
    272272
    273273        // special for DataAnalysisProblem: Because of wiring between algorithm and problem, ParameterConfigurationTree needs to be recreated on Reset event
    274         var dap = e.Items.Single().Value as DataAnalysisProblem;
     274        var dap = e.Items.Single().Value as IDataAnalysisProblem;
    275275        if (dap != null) {
    276276          dap.Reset += new EventHandler(DataAnalysisProblem_Reset);
     
    283283        ParameterConfigurationTreeParameter.ActualValue = null;
    284284
    285         var dap = e.Items.Single().Value as DataAnalysisProblem;
     285        var dap = e.Items.Single().Value as IDataAnalysisProblem;
    286286        if (dap != null) {
    287287          dap.Reset -= new EventHandler(DataAnalysisProblem_Reset);
  • branches/HeuristicLab.MetaOptimization/HeuristicLab.Problems.MetaOptimization/3.3/MetaOptimizationUtil.cs

    r5359 r5927  
    11using System;
     2using System.Collections.Generic;
    23using System.Linq;
    3 using System.Threading;
    4 using HeuristicLab.Common;
    54using HeuristicLab.Core;
    65using HeuristicLab.Data;
    7 using HeuristicLab.Operators;
    86using HeuristicLab.Optimization;
    9 using HeuristicLab.Parameters;
    10 using HeuristicLab.Persistence.Default.CompositeSerializers.Storable;
    11 using System.Collections.Generic;
    12 using HeuristicLab.Algorithms.GeneticAlgorithm;
    13 using System.Threading.Tasks;
    14 using System.Diagnostics;
    15 using System.Reflection;
    167
    178namespace HeuristicLab.Problems.MetaOptimization {
     
    5243      return parameterConfigurationTree.AverageQualityNormalized.Value;
    5344    }
     45
     46    /// <summary>
     47    /// Creates a new instance of algorithmType, sets the given problem and parameterizes it with the given configuration
     48    /// </summary>
     49    public static IAlgorithm CreateParameterizedAlgorithmInstance(ParameterConfigurationTree parameterConfigurationTree, Type algorithmType, IProblem problem, bool randomize = false, IRandom random = null) {
     50      var algorithm = (IAlgorithm)Activator.CreateInstance(algorithmType);
     51      algorithm.Problem = problem;
     52      ((EngineAlgorithm)algorithm).Engine = new SequentialEngine.SequentialEngine();
     53      if(randomize) parameterConfigurationTree.Randomize(random);
     54      parameterConfigurationTree.Parameterize(algorithm);
     55      return algorithm;
     56    }
    5457  }
    5558}
Note: See TracChangeset for help on using the changeset viewer.