Free cookie consent management tool by TermsFeed Policy Generator

Ignore:
Timestamp:
05/25/11 10:50:21 (13 years ago)
Author:
mkommend
Message:

#1479: Created branch for grammar editing.

Location:
branches/GP.Grammar.Editor
Files:
9 edited
1 copied

Legend:

Unmodified
Added
Removed
  • branches/GP.Grammar.Editor/HeuristicLab.Encodings.SymbolicExpressionTreeEncoding/3.4/Creators/ProbabilisticTreeCreator.cs

    r6233 r6284  
    179179          ReplaceWithMinimalTree(random, root, parent, argumentIndex);
    180180        } else {
    181           var allowedSymbols = (from s in parent.Grammar.Symbols
     181          var allowedSymbols = (from s in parent.Grammar.GetAllowedChildSymbols(parent.Symbol, argumentIndex)
    182182                                where s.InitialFrequency > 0.0
    183                                 where parent.Grammar.IsAllowedChildSymbol(parent.Symbol, s, argumentIndex)
    184                                 where parent.Grammar.GetMinimumExpressionDepth(s) < maxDepth - extensionDepth + 1
    185                                 where parent.Grammar.GetMaximumExpressionLength(s) > targetLength - totalListMinLength - currentLength
     183                                where s.Fixed || parent.Grammar.GetMinimumExpressionDepth(s) < maxDepth - extensionDepth + 1
     184                                where s.Fixed || parent.Grammar.GetMaximumExpressionLength(s) > targetLength - totalListMinLength - currentLength
    186185                                select s)
    187186                               .ToList();
  • branches/GP.Grammar.Editor/HeuristicLab.Encodings.SymbolicExpressionTreeEncoding/3.4/Crossovers/SubtreeCrossover.cs

    r5916 r6284  
    9696      int maxInsertedBranchDepth = maxTreeDepth - GetBranchLevel(parent0.Root, crossoverPoint0.Parent);
    9797
    98 
    9998      List<ISymbolicExpressionTreeNode> allowedBranches = new List<ISymbolicExpressionTreeNode>();
    10099      parent1.Root.ForEachNodePostfix((n) => {
    101         if (n.GetLength() <= maxInsertedBranchLength &&
    102           n.GetDepth() <= maxInsertedBranchDepth &&
    103           IsMatchingPointType(crossoverPoint0, n))
     100        if (!n.Symbol.Fixed &&
     101            n.GetLength() <= maxInsertedBranchLength &&
     102            n.GetDepth() <= maxInsertedBranchDepth &&
     103            IsMatchingPointType(crossoverPoint0, n))
    104104          allowedBranches.Add(n);
    105105      });
     
    158158      List<CutPoint> leafCrossoverPoints = new List<CutPoint>();
    159159      parent0.Root.ForEachNodePostfix((n) => {
    160         if (n.Subtrees.Any() && n != parent0.Root) {
     160        if (!n.Symbol.Fixed && n.Subtrees.Any() && n != parent0.Root) {
    161161          foreach (var child in n.Subtrees) {
    162162            if (child.GetLength() <= maxBranchLength &&
  • branches/GP.Grammar.Editor/HeuristicLab.Encodings.SymbolicExpressionTreeEncoding/3.4/HeuristicLab.Encodings.SymbolicExpressionTreeEncoding-3.4.csproj

    r5809 r6284  
    167167    <Compile Include="Symbols\Argument.cs" />
    168168    <Compile Include="Symbols\ArgumentTreeNode.cs" />
     169    <Compile Include="Symbols\GroupSymbol.cs" />
    169170    <Compile Include="Symbols\StartSymbol.cs" />
    170171    <Compile Include="Symbols\InvokeFunction.cs" />
  • branches/GP.Grammar.Editor/HeuristicLab.Encodings.SymbolicExpressionTreeEncoding/3.4/Interfaces/ISymbol.cs

    r5809 r6284  
    2727    ISymbolicExpressionTreeNode CreateTreeNode();
    2828    double InitialFrequency { get; set; }
     29    bool Fixed { get; set; }
    2930
    3031    event EventHandler Changed;
  • branches/GP.Grammar.Editor/HeuristicLab.Encodings.SymbolicExpressionTreeEncoding/3.4/Interfaces/ISymbolicExpressionGrammar.cs

    r6233 r6284  
    3535    bool ReadOnly { get; set; }
    3636    event EventHandler ReadOnlyChanged;
     37
     38    void AddSymbol(ISymbol symbol);
     39    void RemoveSymbol(ISymbol symbol);
     40
     41    void AddAllowedChildSymbol(ISymbol parent, ISymbol child);
     42    void AddAllowedChildSymbol(ISymbol parent, ISymbol child, int argumentIndex);
     43    void RemoveAllowedChildSymbol(ISymbol parent, ISymbol child);
     44    void RemoveAllowedChildSymbol(ISymbol parent, ISymbol child, int argumentIndex);
     45
     46    void SetSubtreeCount(ISymbol symbol, int minimumSubtreeCount, int maximumSubtreeCount);
    3747  }
    3848}
  • branches/GP.Grammar.Editor/HeuristicLab.Encodings.SymbolicExpressionTreeEncoding/3.4/Interfaces/ISymbolicExpressionGrammarBase.cs

    r5809 r6284  
    2020#endregion
    2121
     22using System;
    2223using System.Collections.Generic;
    2324using HeuristicLab.Core;
     
    4142    int GetMaximumExpressionLength(ISymbol start);
    4243    int GetMinimumExpressionDepth(ISymbol start);
     44
     45    event EventHandler Changed;
    4346  }
    4447}
  • branches/GP.Grammar.Editor/HeuristicLab.Encodings.SymbolicExpressionTreeEncoding/3.4/SymbolicExpressionGrammar.cs

    r6233 r6284  
    160160    }
    161161
    162     #region IStatefulItem
     162    #region IStatefulItem methods
    163163    void IStatefulItem.InitializeState() { }
    164164    void IStatefulItem.ClearState() {
     
    166166    }
    167167    #endregion
     168
     169    #region ISymbolicExpressionGrammar methods
     170    void ISymbolicExpressionGrammar.AddSymbol(ISymbol symbol) {
     171      if (ReadOnly) throw new InvalidOperationException();
     172      base.AddSymbol(symbol);
     173    }
     174    void ISymbolicExpressionGrammar.RemoveSymbol(ISymbol symbol) {
     175      if (ReadOnly) throw new InvalidOperationException();
     176      base.RemoveSymbol(symbol);
     177    }
     178
     179    void ISymbolicExpressionGrammar.AddAllowedChildSymbol(ISymbol parent, ISymbol child) {
     180      if (ReadOnly) throw new InvalidOperationException();
     181      base.AddAllowedChildSymbol(parent, child);
     182    }
     183    void ISymbolicExpressionGrammar.AddAllowedChildSymbol(ISymbol parent, ISymbol child, int argumentIndex) {
     184      if (ReadOnly) throw new InvalidOperationException();
     185      base.AddAllowedChildSymbol(parent, child, argumentIndex);
     186    }
     187    void ISymbolicExpressionGrammar.RemoveAllowedChildSymbol(ISymbol parent, ISymbol child) {
     188      if (ReadOnly) throw new InvalidOperationException();
     189      base.RemoveAllowedChildSymbol(parent, child);
     190    }
     191    void ISymbolicExpressionGrammar.RemoveAllowedChildSymbol(ISymbol parent, ISymbol child, int argumentIndex) {
     192      if (ReadOnly) throw new InvalidOperationException();
     193      base.RemoveAllowedChildSymbol(parent, child, argumentIndex);
     194    }
     195
     196    void ISymbolicExpressionGrammar.SetSubtreeCount(ISymbol symbol, int minimumSubtreeCount, int maximumSubtreeCount) {
     197      if (ReadOnly) throw new InvalidOperationException();
     198      base.SetSubtreeCount(symbol, minimumSubtreeCount, maximumSubtreeCount);
     199    }
     200    #endregion
    168201  }
    169202}
  • branches/GP.Grammar.Editor/HeuristicLab.Encodings.SymbolicExpressionTreeEncoding/3.4/SymbolicExpressionGrammarBase.cs

    r6233 r6284  
    9393      cachedMinExpressionDepth = new Dictionary<string, int>();
    9494
    95 
    9695      symbols = original.symbols.ToDictionary(x => x.Key, y => (ISymbol)cloner.Clone(y.Value));
    9796      symbolSubtreeCount = new Dictionary<string, Tuple<int, int>>(original.symbolSubtreeCount);
     
    128127      symbolSubtreeCount.Add(symbol.Name, Tuple.Create(0, 0));
    129128      ClearCaches();
     129      OnChanged();
    130130    }
    131131
     
    133133      symbol.NameChanging += new EventHandler<CancelEventArgs<string>>(Symbol_NameChanging);
    134134      symbol.NameChanged += new EventHandler(Symbol_NameChanged);
     135      symbol.Changed += new EventHandler(Symbol_Changed);
    135136    }
    136137    private void DeregisterSymbolEvents(ISymbol symbol) {
    137138      symbol.NameChanging -= new EventHandler<CancelEventArgs<string>>(Symbol_NameChanging);
    138139      symbol.NameChanged -= new EventHandler(Symbol_NameChanged);
     140      symbol.Changed -= new EventHandler(Symbol_Changed);
    139141    }
    140142
     
    179181
    180182      ClearCaches();
     183      OnChanged();
     184    }
     185
     186    private void Symbol_Changed(object sende, EventArgs e) {
     187      ClearCaches();
     188      OnChanged();
    181189    }
    182190
     
    200208      DeregisterSymbolEvents(symbol);
    201209      ClearCaches();
     210      OnChanged();
    202211    }
    203212
     
    217226      childSymbols.Add(child.Name);
    218227      ClearCaches();
     228      OnChanged();
    219229    }
    220230
     
    231241      childSymbols.Add(child.Name);
    232242      ClearCaches();
     243      OnChanged();
    233244    }
    234245
     
    236247      List<string> childSymbols;
    237248      if (allowedChildSymbols.TryGetValue(child.Name, out childSymbols)) {
    238         if (allowedChildSymbols[parent.Name].Remove(child.Name))
     249        if (allowedChildSymbols[parent.Name].Remove(child.Name)) {
    239250          ClearCaches();
     251          OnChanged();
     252        }
    240253      }
    241254    }
     
    245258      List<string> childSymbols;
    246259      if (allowedChildSymbolsPerIndex.TryGetValue(key, out childSymbols)) {
    247         if (allowedChildSymbolsPerIndex[key].Remove(child.Name))
     260        if (allowedChildSymbolsPerIndex[key].Remove(child.Name)) {
    248261          ClearCaches();
     262          OnChanged();
     263        }
    249264      }
    250265    }
     
    258273      symbolSubtreeCount[symbol.Name] = Tuple.Create(minimumSubtreeCount, maximumSubtreeCount);
    259274      ClearCaches();
     275      OnChanged();
    260276    }
    261277    #endregion
     
    304320        result = result.Union(temp);
    305321
    306       return result.Select(x => GetSymbol(x));
     322      return result.Select(x => GetSymbol(x)).Where(s => !s.InitialFrequency.IsAlmost(0.0));
    307323    }
    308324
     
    313329      return symbolSubtreeCount[symbol.Name].Item2;
    314330    }
    315 
    316331
    317332    private void ClearCaches() {
     
    369384      return temp;
    370385    }
     386
     387    public event EventHandler Changed;
     388    protected virtual void OnChanged() {
     389      var handler = Changed;
     390      if (handler != null) Changed(this, EventArgs.Empty);
     391    }
    371392    #endregion
    372393  }
  • branches/GP.Grammar.Editor/HeuristicLab.Encodings.SymbolicExpressionTreeEncoding/3.4/Symbols/Symbol.cs

    r6233 r6284  
    4242      }
    4343    }
     44
     45    [Storable(DefaultValue = false)]
     46    private bool @fixed;
     47    public bool Fixed {
     48      get { return @fixed; }
     49      set {
     50        if (value != @fixed) {
     51          @fixed = value;
     52          OnChanged(EventArgs.Empty);
     53        }
     54      }
     55    }
     56
    4457    public override bool CanChangeName {
    4558      get { return !(this is IReadOnlySymbol); }
     
    5568      : base(original, cloner) {
    5669      initialFrequency = original.initialFrequency;
     70      @fixed = original.@fixed;
    5771    }
    5872
     
    6074      : base(name, description) {
    6175      initialFrequency = 1.0;
     76      @fixed = false;
    6277    }
    6378
     
    6883    #region events
    6984    public event EventHandler Changed;
    70     protected void OnChanged(EventArgs e) {
     85    protected virtual void OnChanged(EventArgs e) {
    7186      EventHandler handlers = Changed;
    7287      if (handlers != null)
Note: See TracChangeset for help on using the changeset viewer.