Free cookie consent management tool by TermsFeed Policy Generator

Changeset 15960


Ignore:
Timestamp:
06/15/18 14:53:46 (6 years ago)
Author:
bburlacu
Message:

#2886: Fix serialization and cloning and plugin properties.

Location:
branches/2886_SymRegGrammarEnumeration/HeuristicLab.Algorithms.DataAnalysis.SymRegGrammarEnumeration
Files:
1 added
9 edited

Legend:

Unmodified
Added
Removed
  • branches/2886_SymRegGrammarEnumeration/HeuristicLab.Algorithms.DataAnalysis.SymRegGrammarEnumeration/GrammarEnumeration/Grammar.cs

    r15930 r15960  
    44using System.Linq;
    55using HeuristicLab.Algorithms.DataAnalysis.SymRegGrammarEnumeration.GrammarEnumeration;
     6using HeuristicLab.Common;
    67using HeuristicLab.Encodings.SymbolicExpressionTreeEncoding;
     8using HeuristicLab.Persistence.Default.CompositeSerializers.Storable;
    79using HeuristicLab.Problems.DataAnalysis;
    810using HeuristicLab.Problems.DataAnalysis.Symbolic;
     
    1820  }
    1921
    20   public class Grammar {
     22  [StorableClass(StorableClassType.AllFieldsAndAllProperties)]
     23  public class Grammar : DeepCloneable {
    2124
    2225    public Symbol StartSymbol { get; }
     
    7477
    7578    public Grammar(string[] variables) : this(variables, Enum.GetValues(typeof(GrammarRule)).Cast<GrammarRule>()) { }
     79
     80    protected Grammar(Grammar original, Cloner cloner) : base(original, cloner) {
     81      VarTerminals = original.VarTerminals.Select(cloner.Clone).ToArray();
     82      StartSymbol = cloner.Clone(original.StartSymbol);
     83      Hasher = cloner.Clone(original.Hasher); // how to handle circular reference grammar <-> hasher? (the cloner *should* handle it)
     84      Productions = original.Productions.ToDictionary(x => cloner.Clone(x.Key), x => (IReadOnlyList<Production>)x.Value.Select(cloner.Clone).ToList());
     85      Var = cloner.Clone(original.Var);
     86      VarTerminals = original.VarTerminals.Select(cloner.Clone).ToList();
     87      Expr = cloner.Clone(original.Expr);
     88      Term = cloner.Clone(original.Term);
     89      Factor = cloner.Clone(original.Factor);
     90      LogFactor = cloner.Clone(original.LogFactor);
     91      ExpFactor = cloner.Clone(original.ExpFactor);
     92      SinFactor = cloner.Clone(original.SinFactor);
     93      SimpleExpr = cloner.Clone(original.SimpleExpr);
     94      SimpleTerm = cloner.Clone(original.SimpleTerm);
     95      InvExpr = cloner.Clone(original.InvExpr);
     96      InvTerm = cloner.Clone(original.InvTerm);
     97      Addition = cloner.Clone(original.Addition);
     98      Multiplication = cloner.Clone(original.Multiplication);
     99      Log = cloner.Clone(original.Log);
     100      Exp = cloner.Clone(original.Exp);
     101      Sin = cloner.Clone(original.Sin);
     102      Sin = cloner.Clone(original.Sin);
     103      Inv = cloner.Clone(original.Inv);
     104      Const = cloner.Clone(original.Const);
     105
     106
     107      constSy = cloner.Clone(original.constSy);
     108      varSy = cloner.Clone(original.varSy);
     109      addSy = cloner.Clone(original.addSy);
     110      mulSy = cloner.Clone(original.mulSy);
     111      logSy = cloner.Clone(original.logSy);
     112      expSy = cloner.Clone(original.expSy);
     113      divSy = cloner.Clone(original.divSy);
     114      sinSy = cloner.Clone(original.sinSy);
     115
     116      rootSy = cloner.Clone(original.rootSy);
     117      startSy = cloner.Clone(original.startSy);
     118
     119      infixExpressionFormatter = cloner.Clone(original.infixExpressionFormatter);
     120    }
    76121
    77122    public Grammar(string[] variables, IEnumerable<GrammarRule> includedRules) {
     
    291336    }
    292337    #endregion
     338
     339    #region abstract DeepCloneable methods
     340    public override IDeepCloneable Clone(Cloner cloner) {
     341      return new Grammar(this, cloner);
     342    }
     343    #endregion
    293344  }
    294345}
  • branches/2886_SymRegGrammarEnumeration/HeuristicLab.Algorithms.DataAnalysis.SymRegGrammarEnumeration/GrammarEnumeration/GrammarEnumerationAlgorithm.cs

    r15957 r15960  
    3737    private readonly string GrammarSymbolsParameterName = "Grammar Symbols";
    3838
    39     public override bool SupportsPause { get { return false; } }
     39    public override bool SupportsPause { get { return true; } }
    4040
    4141    protected IValueParameter<DoubleValue> VariableImportanceWeightParameter {
     
    107107    #endregion
    108108
     109    [Storable]
    109110    public Dictionary<int, int> DistinctSentencesComplexity { get; private set; }  // Semantically distinct sentences and their length in a run.
     111
     112    [Storable]
    110113    public HashSet<int> ArchivedPhrases { get; private set; }
     114
     115    [Storable]
    111116    internal SearchDataStore OpenPhrases { get; private set; }           // Stack/Queue/etc. for fetching the next node in the search tree. 
    112117
     
    121126
    122127    public Grammar Grammar { get; private set; }
    123 
    124128
    125129    #region ctors
     
    174178        analyzer.Register(this);
    175179      Analyzers.CheckedItemsChanged += Analyzers_CheckedItemsChanged;
     180
     181      DistinctSentencesComplexity = new Dictionary<int, int>(original.DistinctSentencesComplexity);
     182      ArchivedPhrases = new HashSet<int>(original.ArchivedPhrases);
     183      OpenPhrases = cloner.Clone(original.OpenPhrases);
     184
     185      AllGeneratedSentencesCount = original.AllGeneratedSentencesCount;
     186      OverwrittenSentencesCount = original.OverwrittenSentencesCount;
     187      PhraseExpansionCount = original.PhraseExpansionCount;
     188      Grammar = cloner.Clone(original.Grammar);
     189
     190      if (original.variableImportance != null)
     191        variableImportance = new Dictionary<VariableTerminalSymbol, double>(original.variableImportance);
    176192    }
    177193    #endregion
     
    193209    }
    194210
    195     protected override void Run(CancellationToken cancellationToken) {
    196       InitResults();
    197       var phrase0 = new SymbolString(new[] { Grammar.StartSymbol });
    198       var phrase0Hash = Grammar.Hasher.CalcHashCode(phrase0);
    199 
    200       #region Variable Importance
     211    private Dictionary<VariableTerminalSymbol, double> CalculateVariableImportances() {
    201212      variableImportance = new Dictionary<VariableTerminalSymbol, double>();
    202213
     
    216227        variableImportance[varSym] = rfImpact.Item2 / sum;
    217228      }
    218       #endregion
     229      return variableImportance;
     230    }
     231
     232    protected override void Run(CancellationToken cancellationToken) {
     233      // do not reinitialize the algorithm if we're resuming from pause
     234      if (previousExecutionState != ExecutionState.Paused) {
     235        CalculateVariableImportances();
     236        InitResults();
     237        var phrase0 = new SymbolString(new[] { Grammar.StartSymbol });
     238        var phrase0Hash = Grammar.Hasher.CalcHashCode(phrase0);
     239        OpenPhrases.Store(new SearchNode(phrase0Hash, 0.0, 0.0, phrase0));
     240      }
    219241
    220242      int maxSentenceLength = GetMaxSentenceLength();
    221 
    222       OpenPhrases.Store(new SearchNode(phrase0Hash, 0.0, 0.0, phrase0));
    223 
    224243      var errorWeight = ErrorWeight;
    225244      var variableImportanceWeight = VariableImportanceWeight;
    226 
     245      // main search loop
    227246      while (OpenPhrases.Count > 0) {
    228         if (cancellationToken.IsCancellationRequested) break;
     247        if (cancellationToken.IsCancellationRequested)
     248          break;
    229249
    230250        SearchNode fetchedSearchNode = OpenPhrases.GetNext();
     
    343363      return p.Count(s => s is NonterminalSymbol);
    344364    }
     365
     366    #region pause support
     367    private ExecutionState previousExecutionState;
     368    protected override void OnPaused() {
     369      previousExecutionState = this.ExecutionState;
     370      base.OnPaused();
     371    }
     372    protected override void OnPrepared() {
     373      previousExecutionState = this.ExecutionState;
     374      base.OnPrepared();
     375    }
     376    protected override void OnStarted() {
     377      previousExecutionState = this.ExecutionState;
     378      base.OnStarted();
     379    }
     380    protected override void OnStopped() {
     381      previousExecutionState = this.ExecutionState;
     382      base.OnStopped();
     383    }
     384    #endregion
    345385
    346386    #region Visualization in HL
  • branches/2886_SymRegGrammarEnumeration/HeuristicLab.Algorithms.DataAnalysis.SymRegGrammarEnumeration/GrammarEnumeration/SearchDataStructure.cs

    r15915 r15960  
    22using System.Collections;
    33using System.Collections.Generic;
     4using System.Linq;
     5using HeuristicLab.Common;
     6using HeuristicLab.Persistence.Default.CompositeSerializers.Storable;
    47
    58namespace HeuristicLab.Algorithms.DataAnalysis.SymRegGrammarEnumeration.GrammarEnumeration {
    6 
    7   public class SearchNode {
     9  [StorableClass]
     10  public class SearchNode : DeepCloneable {
     11    [Storable]
    812    public readonly int Hash;
     13    [Storable]
    914    public readonly SymbolString SymbolString;
     15    [Storable]
    1016    public readonly double Priority;
     17    [Storable]
    1118    public readonly double R2;
     19
     20    private SearchNode() { }
    1221
    1322    public SearchNode(int hash, double priority, double r2, SymbolString symbolString) {
     
    1726      R2 = r2;
    1827    }
     28
     29    protected SearchNode(SearchNode original, Cloner cloner) : base(original, cloner) {
     30      Hash = original.Hash;
     31      Priority = original.Priority;
     32      SymbolString = original.SymbolString;
     33      R2 = original.R2;
     34    }
     35
     36    [StorableConstructor]
     37    protected SearchNode(bool deserializing) { }
     38
     39    public override IDeepCloneable Clone(Cloner cloner) {
     40      return new SearchNode(this, cloner);
     41    }
    1942  }
    2043
     
    2346  }
    2447
    25   class SearchDataStore : IEnumerable<SearchNode> {
    26 
     48  [StorableClass]
     49  class SearchDataStore : DeepCloneable, IEnumerable<SearchNode> {
     50    [Storable]
    2751    private Dictionary<int, SearchNode> storedValues; // Store hash-references and associated, actual values
     52    [Storable]
     53    private StorageType storageType;
     54
     55    // private storage
     56    [Storable]
     57    private Queue<int> queue;
     58
     59    [Storable]
     60    private Stack<int> stack;
     61
     62    [Storable]
     63    private List<int> list;
     64
     65    [ExcludeFromObjectGraphTraversal]
     66    PriorityQueue<double, int> priorityQueue; // does not support [Storable], we rebuild it from the storedValues
     67
    2868    private Action<int, double> storeInternal; // Store hash-references
    2969    private Func<int> fetchInternal; // Fetch hash-reference
    3070
     71    public SearchDataStore() : this(StorageType.PriorityQueue) { }
     72
     73    [StorableConstructor]
     74    protected SearchDataStore(bool deserializing) : this() { }
     75
    3176    public SearchDataStore(StorageType storageType) {
     77      this.storageType = storageType;
    3278      storedValues = new Dictionary<int, SearchNode>();
    33 
     79      InitStorage();
     80    }
     81
     82    private void InitStorage() {
    3483      switch (storageType) {
    3584        case StorageType.PriorityQueue:
     
    4695          break;
    4796      }
    48 
    49     }
    50 
     97    }
     98
     99    public override IDeepCloneable Clone(Cloner cloner) {
     100      return new SearchDataStore(this, cloner);
     101    }
     102
     103    protected SearchDataStore(SearchDataStore original, Cloner cloner) : base(original, cloner) {
     104      storedValues = original.storedValues.ToDictionary(x => x.Key, x => cloner.Clone(x.Value));
     105      storageType = original.storageType;
     106      InitStorage();
     107      switch (storageType) {
     108        case StorageType.PriorityQueue:
     109          foreach (var t in storedValues)
     110            storeInternal(t.Key, t.Value.Priority);
     111          break;
     112        case StorageType.Stack:
     113          foreach (var v in original.stack.Reverse()) {
     114            stack.Push(v);
     115          }
     116          break;
     117        case StorageType.Queue:
     118          foreach (var v in original.queue) {
     119            queue.Enqueue(v);
     120          }
     121          break;
     122        case StorageType.RandomList:
     123          list.AddRange(original.list);
     124          break;
     125      }
     126    }
     127
     128    [StorableHook(HookType.AfterDeserialization)]
     129    private void AfterDeserialization() {
     130      // access lambdas need to be reinitialized
     131      switch (storageType) {
     132        case StorageType.PriorityQueue:
     133          InitPriorityQueue();
     134          foreach (var t in storedValues)
     135            storeInternal(t.Key, t.Value.Priority);
     136          break;
     137        case StorageType.Stack:
     138          storeInternal = (hash, prio) => stack.Push(hash);
     139          fetchInternal = () => stack.Pop();
     140          break;
     141        case StorageType.Queue:
     142          storeInternal = (hash, prio) => queue.Enqueue(hash);
     143          fetchInternal = () => queue.Dequeue();
     144          break;
     145        case StorageType.RandomList:
     146          System.Random rand = new System.Random(999);
     147          storeInternal = (hash, prio) => list.Add(hash);
     148          fetchInternal = () => {
     149            int indexOfHash = rand.Next(list.Count);
     150            int result = list[indexOfHash];
     151            list.RemoveAt(indexOfHash);  // TODO: beware this is O(n), at some point in time we should fix this. Maybe change to priority queue with random key.
     152            return result;
     153          };
     154          break;
     155      }
     156    }
    51157    #region SearchStrategies
    52158
    53159    private void InitPriorityQueue() {
    54160      int capacity = 10000000;
    55       PriorityQueue<double, int> queue = new PriorityQueue<double, int>(double.MaxValue, double.MinValue, capacity);
    56       storeInternal = (hash, prio) => queue.Insert(prio, hash);
     161      priorityQueue = new PriorityQueue<double, int>(double.MaxValue, double.MinValue, capacity);
     162      storeInternal = (hash, prio) => priorityQueue.Insert(prio, hash);
    57163      fetchInternal = () => {
    58         int ret = queue.PeekMinValue();
    59         queue.RemoveMin();
     164        int ret = priorityQueue.PeekMinValue();
     165        priorityQueue.RemoveMin();
    60166        return ret;
    61167      };
     
    63169
    64170    private void InitStack() {
    65       Stack<int> stack = new Stack<int>();
     171      stack = new Stack<int>();
    66172
    67173      storeInternal = (hash, prio) => stack.Push(hash);
     
    70176
    71177    private void InitQueue() {
    72       Queue<int> queue = new Queue<int>();
     178      queue = new Queue<int>();
    73179
    74180      storeInternal = (hash, prio) => queue.Enqueue(hash);
     
    77183
    78184    private void InitRandomList() {
    79       List<int> list = new List<int>();
     185      list = new List<int>();
    80186      System.Random rand = new System.Random(999);
    81187
  • branches/2886_SymRegGrammarEnumeration/HeuristicLab.Algorithms.DataAnalysis.SymRegGrammarEnumeration/GrammarEnumeration/Sentence.cs

    r15827 r15960  
    44using System.Diagnostics;
    55using System.Linq;
     6using HeuristicLab.Common;
     7using HeuristicLab.Persistence.Default.CompositeSerializers.Storable;
    68
    79namespace HeuristicLab.Algorithms.DataAnalysis.SymRegGrammarEnumeration.GrammarEnumeration {
    8   public class SymbolString : IEnumerable<Symbol> {
     10  [StorableClass]
     11  public class SymbolString : DeepCloneable, IEnumerable<Symbol> {
     12    [Storable]
    913    private readonly Symbol[] symbols;
    1014
     
    1923    public SymbolString(params Symbol[] s) {
    2024      symbols = s;
     25    }
     26
     27    protected SymbolString(SymbolString original, Cloner cloner) : base(original, cloner) {
     28      symbols = original.symbols.ToArray();
     29    }
     30
     31    public override IDeepCloneable Clone(Cloner cloner) {
     32      return new SymbolString(this, cloner);
    2133    }
    2234
  • branches/2886_SymRegGrammarEnumeration/HeuristicLab.Algorithms.DataAnalysis.SymRegGrammarEnumeration/GrammarEnumeration/Symbol.cs

    r15834 r15960  
    11using System;
    22using System.Collections.Generic;
     3using HeuristicLab.Common;
     4using HeuristicLab.Persistence.Default.CompositeSerializers.Storable;
    35
    46namespace HeuristicLab.Algorithms.DataAnalysis.SymRegGrammarEnumeration {
    5 
    6   public abstract class Symbol : IEquatable<Symbol> {
     7  [StorableClass]
     8  public abstract class Symbol : DeepCloneable, IEquatable<Symbol> {
     9    [Storable]
    710    private readonly int stringRepresentationHash;
    811
     12    [Storable]
    913    public string StringRepresentation { get; }
    1014
     
    1216      StringRepresentation = representation;
    1317      stringRepresentationHash = representation.GetHashCode();
     18    }
     19
     20    protected Symbol(Symbol original, Cloner cloner) : base(original, cloner) {
     21      StringRepresentation = original.StringRepresentation;
     22      stringRepresentationHash = original.stringRepresentationHash;
    1423    }
    1524
     
    4958  }
    5059
     60  [StorableClass]
    5161  public class TerminalSymbol : Symbol {
     62    public TerminalSymbol(string representation) : base(representation) { }
     63    public TerminalSymbol(TerminalSymbol original, Cloner cloner) : base(original, cloner) { }
    5264
    53     public TerminalSymbol(string representation) : base(representation) { }
     65    public override IDeepCloneable Clone(Cloner cloner) {
     66      return new TerminalSymbol(this, cloner);
     67    }
    5468  }
    5569
     70  [StorableClass]
    5671  public class VariableTerminalSymbol : TerminalSymbol {
    5772    public VariableTerminalSymbol(string representation) : base(representation) { }
     73    public VariableTerminalSymbol(VariableTerminalSymbol original, Cloner cloner) : base(original, cloner) { }
     74
     75    public override IDeepCloneable Clone(Cloner cloner) {
     76      return new VariableTerminalSymbol(this, cloner);
     77    }
    5878  }
    5979
    60 
     80  [StorableClass]
    6181  public class NonterminalSymbol : Symbol {
    6282    public NonterminalSymbol(string representation) : base(representation) { }
     83    public NonterminalSymbol(NonterminalSymbol original, Cloner cloner) : base(original, cloner) { }
     84
     85    public override IDeepCloneable Clone(Cloner cloner) {
     86      return new NonterminalSymbol(this, cloner);
     87    }
    6388  }
    6489
    65   public class Production : List<Symbol> {
     90  [StorableClass]
     91  public class Production : List<Symbol>, IDeepCloneable {
    6692
    6793    public Production(params Symbol[] symbols) : base(symbols) { }
    6894
    6995    public Production(IEnumerable<Symbol> symbols) : base(symbols) { }
     96
     97    protected Production(Production original, Cloner cloner) : this(original) {
     98      cloner.RegisterClonedObject(original, this);
     99    }
     100
     101    public IDeepCloneable Clone(Cloner cloner) {
     102      return new Production(this, cloner);
     103    }
     104
     105    public object Clone() {
     106      return Clone(new Cloner());
     107    }
    70108
    71109    public override string ToString() {
  • branches/2886_SymRegGrammarEnumeration/HeuristicLab.Algorithms.DataAnalysis.SymRegGrammarEnumeration/Hashing/Hasher.cs

    r15851 r15960  
    33using System.Diagnostics;
    44using System.Linq;
     5using HeuristicLab.Common;
     6using HeuristicLab.Persistence.Default.CompositeSerializers.Storable;
    57
    68namespace HeuristicLab.Algorithms.DataAnalysis.SymRegGrammarEnumeration.GrammarEnumeration {
    7   public abstract class Hasher<THashType> {
     9  [StorableClass]
     10  public abstract class Hasher<THashType> : DeepCloneable {
    811    protected Hasher(Grammar grammar) {
    912      Grammar = grammar;
     13    }
     14
     15    protected Hasher(Hasher<THashType> original, Cloner cloner) : base(original, cloner) {
     16      Grammar = cloner.Clone(original.Grammar);
    1017    }
    1118
     
    2229      return AggregateHashes(peek, GetSubtreeHashes(parseStack)).GetHashCode();
    2330    }
     31
     32    [StorableConstructor]
     33    protected Hasher(bool deserializing) { }
    2434
    2535    private THashType[] GetSubtreeHashes(Stack<Symbol> parseStack) {
     
    109119        .ToArray();
    110120    }
    111 
    112 
    113121  }
    114122
     123  [StorableClass]
    115124  public class IntHasher : Hasher<int> {
    116125    public IntHasher(Grammar grammar) : base(grammar) { }
     126
     127    public IntHasher(IntHasher original, Cloner cloner) : base(original, cloner) { }
     128
     129    public override IDeepCloneable Clone(Cloner cloner) {
     130      return new IntHasher(this, cloner);
     131    }
     132
     133    [StorableConstructor]
     134    protected IntHasher(bool deserializing) : base(deserializing) { }
    117135
    118136    protected override int AggregateHashes(Symbol operatorSym, int[] hashes) {
     
    135153  }
    136154
     155  [StorableClass]
    137156  public class StringHasher : Hasher<string> {
    138157    public StringHasher(Grammar grammar) : base(grammar) { }
     158
     159    public StringHasher(StringHasher original, Cloner cloner) : base(original, cloner) { }
     160
     161    public override IDeepCloneable Clone(Cloner cloner) {
     162      return new StringHasher(this, cloner);
     163    }
     164
     165    [StorableConstructor]
     166    protected StringHasher(bool deserializing) : base(deserializing) { }
    139167
    140168    protected override string AggregateHashes(Symbol operatorSym, string[] hashes) {
  • branches/2886_SymRegGrammarEnumeration/HeuristicLab.Algorithms.DataAnalysis.SymRegGrammarEnumeration/HeuristicLab.Algorithms.DataAnalysis.SymRegGrammarEnumeration.csproj

    r15928 r15960  
    99    <AppDesignerFolder>Properties</AppDesignerFolder>
    1010    <RootNamespace>HeuristicLab.Algorithms.DataAnalysis.SymRegGrammarEnumeration</RootNamespace>
    11     <AssemblyName>HeuristicLab.Algorithms.DataAnalysis.SymRegGrammarEnumeration</AssemblyName>
     11    <AssemblyName>HeuristicLab.Algorithms.DataAnalysis.SymRegGrammarEnumeration-3.4</AssemblyName>
    1212    <TargetFrameworkVersion>v4.5.2</TargetFrameworkVersion>
    1313    <FileAlignment>512</FileAlignment>
     
    2929    <ErrorReport>prompt</ErrorReport>
    3030    <WarningLevel>4</WarningLevel>
     31  </PropertyGroup>
     32  <PropertyGroup>
     33    <SignAssembly>true</SignAssembly>
     34  </PropertyGroup>
     35  <PropertyGroup>
     36    <AssemblyOriginatorKeyFile>HeuristicLab.snk</AssemblyOriginatorKeyFile>
    3137  </PropertyGroup>
    3238  <ItemGroup>
     
    130136  </ItemGroup>
    131137  <ItemGroup>
     138    <None Include="HeuristicLab.snk" />
    132139    <None Include="Plugin.cs.frame" />
    133140  </ItemGroup>
  • branches/2886_SymRegGrammarEnumeration/HeuristicLab.Algorithms.DataAnalysis.SymRegGrammarEnumeration/Plugin.cs.frame

    r15823 r15960  
    2323
    2424namespace HeuristicLab.Algorithms.DataAnalysis.SymRegGrammarEnumeration {
    25   [Plugin("HeuristicLab.Algorithms.DataAnalysis.SymRegGrammarEnumeration", "", "3.4.0.$WCREV$")]
    26   [PluginFile("HeuristicLab.Algorithms.DataAnalysis.SymRegGrammarEnumeration.dll", PluginFileType.Assembly)]
    27   [PluginDependency("HeuristicLab.ALGLIB", "3.7")]
     25  /// <summary>
     26  /// Plugin class for the Grammar Enumeration Symbolc Regression algorithm.
     27  /// </summary>
     28  [Plugin("HeuristicLab.Algorithms.DataAnalysis.SymRegGrammarEnumeration", "3.4.0.$WCREV$")]
     29  [PluginFile("HeuristicLab.Algorithms.DataAnalysis.SymRegGrammarEnumeration-3.4.dll", PluginFileType.Assembly)]
    2830  [PluginDependency("HeuristicLab.Algorithms.DataAnalysis", "3.4")]
    29   [PluginDependency("HeuristicLab.Analysis", "3.3")]
    3031  [PluginDependency("HeuristicLab.Collections", "3.3")]
    3132  [PluginDependency("HeuristicLab.Common", "3.3")]
     
    3334  [PluginDependency("HeuristicLab.Data", "3.3")]
    3435  [PluginDependency("HeuristicLab.Encodings.SymbolicExpressionTreeEncoding", "3.4")]
    35   [PluginDependency("HeuristicLab.Operators", "3.3")]
    3636  [PluginDependency("HeuristicLab.Optimization", "3.3")]
    3737  [PluginDependency("HeuristicLab.Parameters", "3.3")]
     
    4141  [PluginDependency("HeuristicLab.Problems.DataAnalysis.Symbolic.Regression", "3.4")]
    4242  [PluginDependency("HeuristicLab.Problems.Instances", "3.3")]
     43  [PluginDependency("HeuristicLab.Problems.Instances.DataAnalysis", "3.3")]
    4344  [PluginDependency("HeuristicLab.Random", "3.3")]
    4445
  • branches/2886_SymRegGrammarEnumeration/HeuristicLab.Algorithms.DataAnalysis.SymRegGrammarEnumeration/Properties/AssemblyInfo.cs

    r15712 r15960  
    3333// by using the '*' as shown below:
    3434// [assembly: AssemblyVersion("1.0.*")]
    35 [assembly: AssemblyVersion("1.0.0.0")]
     35[assembly: AssemblyVersion("3.4.0.0")]
    3636[assembly: AssemblyFileVersion("1.0.0.0")]
Note: See TracChangeset for help on using the changeset viewer.