Free cookie consent management tool by TermsFeed Policy Generator

Ignore:
Timestamp:
03/15/11 17:03:08 (13 years ago)
Author:
mkommend
Message:

#1418: Implemented persistence of grammars. Currently it does not work, because the Tuple type is not serializable (see #1442).

File:
1 edited

Legend:

Unmodified
Added
Removed
  • branches/DataAnalysis Refactoring/HeuristicLab.Encodings.SymbolicExpressionTreeEncoding/3.4/SymbolicExpressionGrammarBase.cs

    r5688 r5695  
    3737  public abstract class SymbolicExpressionGrammarBase : NamedItem, ISymbolicExpressionGrammarBase {
    3838    #region properties for separation between implementation and persistence
    39 
    40     //TODO implement storable properties;
    41 
     39    [Storable(Name = "Symbols")]
     40    private IEnumerable<ISymbol> StorableSymbols {
     41      get { return symbols.Values.ToArray(); }
     42      set { symbols = value.ToDictionary(sym => sym.Name); }
     43    }
     44
     45    [Storable(Name = "SymbolSubtreeCount")]
     46    private IEnumerable<KeyValuePair<ISymbol, Tuple<int, int>>> StorableSymbolSubtreeCount {
     47      get { return symbolSubtreeCount.Select(x => new KeyValuePair<ISymbol, Tuple<int, int>>(GetSymbol(x.Key), x.Value)).ToArray(); }
     48      set { symbolSubtreeCount = value.ToDictionary(x => x.Key.Name, x => x.Value); }
     49    }
     50
     51    [Storable(Name = "AllowedChildSymbols")]
     52    private IEnumerable<KeyValuePair<ISymbol, IEnumerable<ISymbol>>> StorableAllowedChildSymbols {
     53      get { return allowedChildSymbols.Select(x => new KeyValuePair<ISymbol, IEnumerable<ISymbol>>(GetSymbol(x.Key), x.Value.Select(y => GetSymbol(y)))).ToArray(); ; }
     54      set { allowedChildSymbols = value.ToDictionary(x => x.Key.Name, x => x.Value.Select(y => y.Name).ToList()); }
     55    }
     56
     57    [Storable(Name = "AllowedChildSymbolsPerIndex")]
     58    private IEnumerable<KeyValuePair<Tuple<ISymbol, int>, IEnumerable<ISymbol>>> StorableAllowedChildSymbolsPerIndex {
     59      get { return allowedChildSymbolsPerIndex.Select(x => new KeyValuePair<Tuple<ISymbol, int>, IEnumerable<ISymbol>>(Tuple.Create(GetSymbol(x.Key.Item1), x.Key.Item2), x.Value.Select(y => GetSymbol(y)))).ToArray(); }
     60      set { allowedChildSymbolsPerIndex = value.ToDictionary(x => Tuple.Create(x.Key.Item1.Name, x.Key.Item2), x => x.Value.Select(y => y.Name).ToList()); }
     61    }
    4262    #endregion
    4363
    4464    protected Dictionary<string, ISymbol> symbols;
    45     protected Dictionary<string, Tuple<int, int>> symbolSubTreeCount;
     65    protected Dictionary<string, Tuple<int, int>> symbolSubtreeCount;
    4666    protected Dictionary<string, List<string>> allowedChildSymbols;
    4767    protected Dictionary<Tuple<string, int>, List<string>> allowedChildSymbolsPerIndex;
     
    6787      cachedMinExpressionDepth = new Dictionary<string, int>();
    6888
    69       symbolSubTreeCount = new Dictionary<string, Tuple<int, int>>(original.symbolSubTreeCount);
     89      symbolSubtreeCount = new Dictionary<string, Tuple<int, int>>(original.symbolSubtreeCount);
    7090      symbols = new Dictionary<string, ISymbol>(original.symbols);
    7191
     
    86106
    87107      symbols = new Dictionary<string, ISymbol>();
    88       symbolSubTreeCount = new Dictionary<string, Tuple<int, int>>();
     108      symbolSubtreeCount = new Dictionary<string, Tuple<int, int>>();
    89109      allowedChildSymbols = new Dictionary<string, List<string>>();
    90110      allowedChildSymbolsPerIndex = new Dictionary<Tuple<string, int>, List<string>>();
     
    95115      if (ContainsSymbol(symbol)) throw new ArgumentException("Symbol " + symbol + " is already defined.");
    96116      symbols.Add(symbol.Name, symbol);
    97       symbolSubTreeCount.Add(symbol.Name, Tuple.Create(0, 0));
     117      symbolSubtreeCount.Add(symbol.Name, Tuple.Create(0, 0));
    98118      ClearCaches();
    99119    }
     
    104124      for (int i = 0; i < GetMaximumSubtreeCount(symbol); i++)
    105125        allowedChildSymbolsPerIndex.Remove(Tuple.Create(symbol.Name, i));
    106       symbolSubTreeCount.Remove(symbol.Name);
     126      symbolSubtreeCount.Remove(symbol.Name);
    107127
    108128
     
    165185      }
    166186
    167       symbolSubTreeCount[symbol.Name] = Tuple.Create(minimumSubtreeCount, maximumSubtreeCount);
     187      symbolSubtreeCount[symbol.Name] = Tuple.Create(minimumSubtreeCount, maximumSubtreeCount);
    168188      ClearCaches();
    169189    }
     
    217237
    218238    public virtual int GetMinimumSubtreeCount(ISymbol symbol) {
    219       return symbolSubTreeCount[symbol.Name].Item1;
     239      return symbolSubtreeCount[symbol.Name].Item1;
    220240    }
    221241    public virtual int GetMaximumSubtreeCount(ISymbol symbol) {
    222       return symbolSubTreeCount[symbol.Name].Item2;
     242      return symbolSubtreeCount[symbol.Name].Item2;
    223243    }
    224244
Note: See TracChangeset for help on using the changeset viewer.