Changeset 12891 for branches/HeuristicLab.EvolutionTracking/HeuristicLab.Encodings.SymbolicExpressionTreeEncoding/3.4/Grammars
- Timestamp:
- 08/22/15 14:27:37 (9 years ago)
- Location:
- branches/HeuristicLab.EvolutionTracking/HeuristicLab.Encodings.SymbolicExpressionTreeEncoding
- Files:
-
- 5 edited
- 1 copied
Legend:
- Unmodified
- Added
- Removed
-
branches/HeuristicLab.EvolutionTracking/HeuristicLab.Encodings.SymbolicExpressionTreeEncoding
- Property svn:mergeinfo changed
-
branches/HeuristicLab.EvolutionTracking/HeuristicLab.Encodings.SymbolicExpressionTreeEncoding/3.4/Grammars/EmptySymbolicExpressionTreeGrammar.cs
r12155 r12891 37 37 38 38 [StorableConstructor] 39 private EmptySymbolicExpressionTreeGrammar(bool deserializing) : base(deserializing) { }39 private EmptySymbolicExpressionTreeGrammar(bool deserializing) : base(deserializing) { } 40 40 internal EmptySymbolicExpressionTreeGrammar(ISymbolicExpressionGrammar grammar) 41 41 : base() { … … 70 70 } 71 71 72 IEnumerable<ISymbol> ISymbolicExpressionGrammarBase.GetAllowedChildSymbols(ISymbol parent) {72 public IEnumerable<ISymbol> GetAllowedChildSymbols(ISymbol parent) { 73 73 return grammar.GetAllowedChildSymbols(parent); 74 74 } 75 75 76 IEnumerable<ISymbol> ISymbolicExpressionGrammarBase.GetAllowedChildSymbols(ISymbol parent, int argumentIndex) {76 public IEnumerable<ISymbol> GetAllowedChildSymbols(ISymbol parent, int argumentIndex) { 77 77 return grammar.GetAllowedChildSymbols(parent, argumentIndex); 78 78 } … … 85 85 } 86 86 87 int ISymbolicExpressionGrammarBase.GetMinimumExpressionDepth(ISymbol symbol) {87 public int GetMinimumExpressionDepth(ISymbol symbol) { 88 88 return grammar.GetMinimumExpressionDepth(symbol); 89 89 } 90 int ISymbolicExpressionGrammarBase.GetMaximumExpressionDepth(ISymbol symbol) {90 public int GetMaximumExpressionDepth(ISymbol symbol) { 91 91 return grammar.GetMaximumExpressionDepth(symbol); 92 92 } 93 int ISymbolicExpressionGrammarBase.GetMinimumExpressionLength(ISymbol symbol) {93 public int GetMinimumExpressionLength(ISymbol symbol) { 94 94 return grammar.GetMinimumExpressionLength(symbol); 95 95 } 96 int ISymbolicExpressionGrammarBase.GetMaximumExpressionLength(ISymbol symbol, int maxDepth) {96 public int GetMaximumExpressionLength(ISymbol symbol, int maxDepth) { 97 97 return grammar.GetMaximumExpressionLength(symbol, maxDepth); 98 98 } 99 99 100 public void AddSymbol(ISymbol symbol) { throw new NotSupportedException(); } 101 public void RemoveSymbol(ISymbol symbol) { throw new NotSupportedException(); } 102 public void AddAllowedChildSymbol(ISymbol parent, ISymbol child) { throw new NotSupportedException(); } 103 public void AddAllowedChildSymbol(ISymbol parent, ISymbol child, int argumentIndex) { throw new NotSupportedException(); } 104 public void RemoveAllowedChildSymbol(ISymbol parent, ISymbol child) { throw new NotSupportedException(); } 105 public void RemoveAllowedChildSymbol(ISymbol parent, ISymbol child, int argumentIndex) { throw new NotSupportedException(); } 106 public void SetSubtreeCount(ISymbol symbol, int minimumSubtreeCount, int maximumSubtreeCount) { throw new NotSupportedException(); } 107 100 108 101 109 #region ISymbolicExpressionTreeGrammar Members 102 IEnumerable<ISymbol> ISymbolicExpressionTreeGrammar.ModifyableSymbols {110 public IEnumerable<ISymbol> ModifyableSymbols { 103 111 get { return Enumerable.Empty<ISymbol>(); } 104 112 } 105 113 106 bool ISymbolicExpressionTreeGrammar.IsModifyableSymbol(ISymbol symbol) {114 public bool IsModifyableSymbol(ISymbol symbol) { 107 115 return false; 108 116 } 109 117 110 void ISymbolicExpressionTreeGrammar.AddSymbol(ISymbol symbol) { 111 throw new NotSupportedException(); 112 } 113 114 void ISymbolicExpressionTreeGrammar.RemoveSymbol(ISymbol symbol) { 115 throw new NotSupportedException(); 116 } 117 118 void ISymbolicExpressionTreeGrammar.AddAllowedChildSymbol(ISymbol parent, ISymbol child) { 119 throw new NotSupportedException(); 120 } 121 122 void ISymbolicExpressionTreeGrammar.AddAllowedChildSymbol(ISymbol parent, ISymbol child, int argumentIndex) { 123 throw new NotSupportedException(); 124 } 125 126 void ISymbolicExpressionTreeGrammar.RemoveAllowedChildSymbol(ISymbol parent, ISymbol child) { 127 throw new NotSupportedException(); 128 } 129 130 void ISymbolicExpressionTreeGrammar.RemoveAllowedChildSymbol(ISymbol parent, ISymbol child, int argumentIndex) { 131 throw new NotSupportedException(); 132 } 133 134 void ISymbolicExpressionTreeGrammar.SetSubtreeCount(ISymbol symbol, int minimumSubtreeCount, int maximumSubtreeCount) { 135 throw new NotSupportedException(); 136 } 137 138 #pragma warning disable 0067 //disable usage warning 118 #pragma warning disable 0067 //disable usage warning 139 119 public event EventHandler Changed; 140 120 #pragma warning restore 0067 141 121 #endregion 142 122 } -
branches/HeuristicLab.EvolutionTracking/HeuristicLab.Encodings.SymbolicExpressionTreeEncoding/3.4/Grammars/SymbolicExpressionGrammar.cs
r12155 r12891 177 177 } 178 178 179 protected override sealed void AddSymbol(ISymbol symbol) { 179 public override sealed void AddSymbol(ISymbol symbol) { 180 if (ReadOnly) throw new InvalidOperationException(); 180 181 base.AddSymbol(symbol); 181 182 RegisterSymbolEvents(symbol); 182 183 OnChanged(); 183 184 } 184 protected override sealed void RemoveSymbol(ISymbol symbol) { 185 public override sealed void RemoveSymbol(ISymbol symbol) { 186 if (ReadOnly) throw new InvalidOperationException(); 185 187 DeregisterSymbolEvents(symbol); 186 188 base.RemoveSymbol(symbol); … … 204 206 #endregion 205 207 206 #region ISymbolicExpressionGrammar methods 207 void ISymbolicExpressionGrammar.AddSymbol(ISymbol symbol) { 208 if (ReadOnly) throw new InvalidOperationException(); 209 AddSymbol(symbol); 210 } 211 void ISymbolicExpressionGrammar.RemoveSymbol(ISymbol symbol) { 212 if (ReadOnly) throw new InvalidOperationException(); 213 RemoveSymbol(symbol); 214 } 215 216 void ISymbolicExpressionGrammar.AddAllowedChildSymbol(ISymbol parent, ISymbol child) { 208 public sealed override void AddAllowedChildSymbol(ISymbol parent, ISymbol child) { 217 209 if (ReadOnly) throw new InvalidOperationException(); 218 210 base.AddAllowedChildSymbol(parent, child); 219 211 } 220 void ISymbolicExpressionGrammar.AddAllowedChildSymbol(ISymbol parent, ISymbol child, int argumentIndex) {212 public sealed override void AddAllowedChildSymbol(ISymbol parent, ISymbol child, int argumentIndex) { 221 213 if (ReadOnly) throw new InvalidOperationException(); 222 214 base.AddAllowedChildSymbol(parent, child, argumentIndex); 223 215 } 224 void ISymbolicExpressionGrammar.RemoveAllowedChildSymbol(ISymbol parent, ISymbol child) {216 public sealed override void RemoveAllowedChildSymbol(ISymbol parent, ISymbol child) { 225 217 if (ReadOnly) throw new InvalidOperationException(); 226 218 base.RemoveAllowedChildSymbol(parent, child); 227 219 } 228 void ISymbolicExpressionGrammar.RemoveAllowedChildSymbol(ISymbol parent, ISymbol child, int argumentIndex) {220 public sealed override void RemoveAllowedChildSymbol(ISymbol parent, ISymbol child, int argumentIndex) { 229 221 if (ReadOnly) throw new InvalidOperationException(); 230 222 base.RemoveAllowedChildSymbol(parent, child, argumentIndex); 231 223 } 232 224 233 void ISymbolicExpressionGrammar.SetSubtreeCount(ISymbol symbol, int minimumSubtreeCount, int maximumSubtreeCount) {225 public sealed override void SetSubtreeCount(ISymbol symbol, int minimumSubtreeCount, int maximumSubtreeCount) { 234 226 if (ReadOnly) throw new InvalidOperationException(); 235 227 base.SetSubtreeCount(symbol, minimumSubtreeCount, maximumSubtreeCount); … … 237 229 238 230 private bool suppressEvents = false; 239 void ISymbolicExpressionGrammar.StartGrammarManipulation() {231 public void StartGrammarManipulation() { 240 232 suppressEvents = true; 241 233 } 242 void ISymbolicExpressionGrammar.FinishedGrammarManipulation() {234 public void FinishedGrammarManipulation() { 243 235 suppressEvents = false; 244 236 OnChanged(); 245 237 } 246 238 247 protected override void OnChanged() {239 protected sealed override void OnChanged() { 248 240 if (suppressEvents) return; 249 241 base.OnChanged(); 250 242 } 251 #endregion252 243 253 244 #region symbol events … … 305 296 private void Symbol_NameChanged(object sender, EventArgs e) { 306 297 ISymbol symbol = (ISymbol)sender; 307 string oldName = symbols. Where(x => x.Value == symbol).First().Key;298 string oldName = symbols.First(x => x.Value == symbol).Key; 308 299 string newName = symbol.Name; 309 300 -
branches/HeuristicLab.EvolutionTracking/HeuristicLab.Encodings.SymbolicExpressionTreeEncoding/3.4/Grammars/SymbolicExpressionGrammarBase.cs
r12155 r12891 41 41 private IEnumerable<ISymbol> StorableSymbols { 42 42 get { return symbols.Values.ToArray(); } 43 set { symbols = value.ToDictionary(sym => sym.Name); }43 set { foreach (var s in value) symbols.Add(s.Name, s); } 44 44 } 45 45 … … 47 47 private IEnumerable<KeyValuePair<ISymbol, Tuple<int, int>>> StorableSymbolSubtreeCount { 48 48 get { return symbolSubtreeCount.Select(x => new KeyValuePair<ISymbol, Tuple<int, int>>(GetSymbol(x.Key), x.Value)).ToArray(); } 49 set { symbolSubtreeCount = value.ToDictionary(x => x.Key.Name, x => x.Value); }49 set { foreach (var pair in value) symbolSubtreeCount.Add(pair.Key.Name, pair.Value); } 50 50 } 51 51 … … 53 53 private IEnumerable<KeyValuePair<ISymbol, IEnumerable<ISymbol>>> StorableAllowedChildSymbols { 54 54 get { return allowedChildSymbols.Select(x => new KeyValuePair<ISymbol, IEnumerable<ISymbol>>(GetSymbol(x.Key), x.Value.Select(GetSymbol).ToArray())).ToArray(); } 55 set { allowedChildSymbols = value.ToDictionary(x => x.Key.Name, x => x.Value.Select(y => y.Name).ToList()); }55 set { foreach (var pair in value) allowedChildSymbols.Add(pair.Key.Name, pair.Value.Select(y => y.Name).ToList()); } 56 56 } 57 57 58 58 [Storable(Name = "AllowedChildSymbolsPerIndex")] 59 59 private IEnumerable<KeyValuePair<Tuple<ISymbol, int>, IEnumerable<ISymbol>>> StorableAllowedChildSymbolsPerIndex { 60 get { return allowedChildSymbolsPerIndex.Select(x => new KeyValuePair<Tuple<ISymbol, int>, IEnumerable<ISymbol>>(Tuple.Create<ISymbol, int>(GetSymbol(x.Key.Item1), x.Key.Item2), x.Value.Select(y => GetSymbol(y)).ToArray())).ToArray(); } 61 set { allowedChildSymbolsPerIndex = value.ToDictionary(x => Tuple.Create(x.Key.Item1.Name, x.Key.Item2), x => x.Value.Select(y => y.Name).ToList()); } 60 get { return allowedChildSymbolsPerIndex.Select(x => new KeyValuePair<Tuple<ISymbol, int>, IEnumerable<ISymbol>>(Tuple.Create(GetSymbol(x.Key.Item1), x.Key.Item2), x.Value.Select(GetSymbol).ToArray())).ToArray(); } 61 set { 62 foreach (var pair in value) 63 allowedChildSymbolsPerIndex.Add(Tuple.Create(pair.Key.Item1.Name, pair.Key.Item2), pair.Value.Select(y => y.Name).ToList()); 64 } 62 65 } 63 66 #endregion 64 67 65 68 private bool suppressEvents; 66 protected Dictionary<string, ISymbol> symbols;67 protected Dictionary<string, Tuple<int, int>> symbolSubtreeCount;68 protected Dictionary<string, List<string>> allowedChildSymbols;69 protected Dictionary<Tuple<string, int>, List<string>> allowedChildSymbolsPerIndex;69 protected readonly Dictionary<string, ISymbol> symbols; 70 protected readonly Dictionary<string, Tuple<int, int>> symbolSubtreeCount; 71 protected readonly Dictionary<string, List<string>> allowedChildSymbols; 72 protected readonly Dictionary<Tuple<string, int>, List<string>> allowedChildSymbolsPerIndex; 70 73 71 74 public override bool CanChangeName { … … 87 90 cachedIsAllowedChildSymbolIndex = new Dictionary<Tuple<string, string, int>, bool>(); 88 91 92 symbols = new Dictionary<string, ISymbol>(); 93 symbolSubtreeCount = new Dictionary<string, Tuple<int, int>>(); 94 allowedChildSymbols = new Dictionary<string, List<string>>(); 95 allowedChildSymbolsPerIndex = new Dictionary<Tuple<string, int>, List<string>>(); 96 89 97 suppressEvents = false; 90 98 } … … 133 141 134 142 #region protected grammar manipulation methods 135 p rotectedvirtual void AddSymbol(ISymbol symbol) {143 public virtual void AddSymbol(ISymbol symbol) { 136 144 if (ContainsSymbol(symbol)) throw new ArgumentException("Symbol " + symbol + " is already defined."); 137 145 foreach (var s in symbol.Flatten()) { … … 143 151 } 144 152 145 p rotectedvirtual void RemoveSymbol(ISymbol symbol) {153 public virtual void RemoveSymbol(ISymbol symbol) { 146 154 foreach (var s in symbol.Flatten()) { 147 155 symbols.Remove(s.Name); … … 175 183 } 176 184 177 p rotectedvoid AddAllowedChildSymbol(ISymbol parent, ISymbol child) {185 public virtual void AddAllowedChildSymbol(ISymbol parent, ISymbol child) { 178 186 bool changed = false; 179 187 … … 204 212 } 205 213 206 p rotectedvoid AddAllowedChildSymbol(ISymbol parent, ISymbol child, int argumentIndex) {214 public virtual void AddAllowedChildSymbol(ISymbol parent, ISymbol child, int argumentIndex) { 207 215 bool changed = false; 208 216 … … 238 246 } 239 247 240 p rotectedvoid RemoveAllowedChildSymbol(ISymbol parent, ISymbol child) {248 public virtual void RemoveAllowedChildSymbol(ISymbol parent, ISymbol child) { 241 249 bool changed = false; 242 250 List<string> childSymbols; … … 257 265 } 258 266 259 p rotectedvoid RemoveAllowedChildSymbol(ISymbol parent, ISymbol child, int argumentIndex) {267 public virtual void RemoveAllowedChildSymbol(ISymbol parent, ISymbol child, int argumentIndex) { 260 268 bool changed = false; 261 269 … … 282 290 } 283 291 284 p rotectedvoid SetSubtreeCount(ISymbol symbol, int minimumSubtreeCount, int maximumSubtreeCount) {292 public virtual void SetSubtreeCount(ISymbol symbol, int minimumSubtreeCount, int maximumSubtreeCount) { 285 293 var symbols = symbol.Flatten().Where(s => !(s is GroupSymbol)); 286 294 if (symbols.Any(s => s.MinimumArity > minimumSubtreeCount)) throw new ArgumentException("Invalid minimum subtree count " + minimumSubtreeCount + " for " + symbol); … … 308 316 } 309 317 public virtual IEnumerable<ISymbol> AllowedSymbols { 310 get { foreach (var s in Symbols) if (s.Enabled) yield return s; }318 get { return Symbols.Where(s => s.Enabled); } 311 319 } 312 320 public virtual bool ContainsSymbol(ISymbol symbol) { … … 330 338 List<string> temp; 331 339 if (allowedChildSymbols.TryGetValue(parent.Name, out temp)) { 332 if (temp.SelectMany(s => GetSymbol(s).Flatten()).Any(s => s.Name == child.Name)) { 333 cachedIsAllowedChildSymbol.Add(key, true); 334 return true; 340 for (int i = 0; i < temp.Count; i++) { 341 var symbol = GetSymbol(temp[i]); 342 foreach (var s in symbol.Flatten()) 343 if (s.Name == child.Name) { 344 cachedIsAllowedChildSymbol.Add(key, true); 345 return true; 346 } 335 347 } 336 348 } … … 357 369 List<string> temp; 358 370 if (allowedChildSymbolsPerIndex.TryGetValue(Tuple.Create(parent.Name, argumentIndex), out temp)) { 359 if (temp.SelectMany(s => GetSymbol(s).Flatten()).Any(s => s.Name == child.Name)) { 360 cachedIsAllowedChildSymbolIndex.Add(key, true); 361 return true; 371 for (int i = 0; i < temp.Count; i++) { 372 var symbol = GetSymbol(temp[i]); 373 foreach (var s in symbol.Flatten()) 374 if (s.Name == child.Name) { 375 cachedIsAllowedChildSymbolIndex.Add(key, true); 376 return true; 377 } 362 378 } 363 379 } … … 510 526 if (suppressEvents) return; 511 527 var handler = Changed; 512 if (handler != null) Changed(this, EventArgs.Empty);528 if (handler != null) handler(this, EventArgs.Empty); 513 529 } 514 530 } -
branches/HeuristicLab.EvolutionTracking/HeuristicLab.Encodings.SymbolicExpressionTreeEncoding/3.4/Grammars/SymbolicExpressionTreeGrammar.cs
r12155 r12891 55 55 } 56 56 } 57 public override IEnumerable<ISymbol> AllowedSymbols {58 get { return base.AllowedSymbols; }59 }60 57 public IEnumerable<ISymbol> ModifyableSymbols { 61 58 get { return base.symbols.Values; } … … 76 73 } 77 74 78 public override bool IsAllowedChildSymbol(ISymbol parent, ISymbol child) { 79 return grammar.IsAllowedChildSymbol(parent, child) || base.IsAllowedChildSymbol(parent, child); 80 } 81 public override bool IsAllowedChildSymbol(ISymbol parent, ISymbol child, int argumentIndex) { 82 return grammar.IsAllowedChildSymbol(parent, child, argumentIndex) || base.IsAllowedChildSymbol(parent, child, argumentIndex); 75 public override void RemoveSymbol(ISymbol symbol) { 76 if (!IsModifyableSymbol(symbol)) throw new InvalidOperationException(); 77 base.RemoveSymbol(symbol); 83 78 } 84 79 … … 91 86 return base.GetMaximumSubtreeCount(symbol); 92 87 } 93 94 void ISymbolicExpressionTreeGrammar.AddSymbol(ISymbol symbol) { 95 base.AddSymbol(symbol); 96 } 97 void ISymbolicExpressionTreeGrammar.RemoveSymbol(ISymbol symbol) { 98 if (!IsModifyableSymbol(symbol)) throw new InvalidOperationException(); 99 base.RemoveSymbol(symbol); 100 } 101 void ISymbolicExpressionTreeGrammar.AddAllowedChildSymbol(ISymbol parent, ISymbol child) { 102 base.AddAllowedChildSymbol(parent, child); 103 } 104 void ISymbolicExpressionTreeGrammar.AddAllowedChildSymbol(ISymbol parent, ISymbol child, int argumentIndex) { 105 base.AddAllowedChildSymbol(parent, child, argumentIndex); 106 } 107 void ISymbolicExpressionTreeGrammar.RemoveAllowedChildSymbol(ISymbol parent, ISymbol child) { 108 base.RemoveAllowedChildSymbol(parent, child); 109 } 110 void ISymbolicExpressionTreeGrammar.RemoveAllowedChildSymbol(ISymbol parent, ISymbol child, int argumentIndex) { 111 base.RemoveAllowedChildSymbol(parent, child, argumentIndex); 112 } 113 114 void ISymbolicExpressionTreeGrammar.SetSubtreeCount(ISymbol symbol, int minimumSubtreeCount, int maximumSubtreeCount) { 88 public override void SetSubtreeCount(ISymbol symbol, int minimumSubtreeCount, int maximumSubtreeCount) { 115 89 if (!IsModifyableSymbol(symbol)) throw new InvalidOperationException(); 116 90 base.SetSubtreeCount(symbol, minimumSubtreeCount, maximumSubtreeCount); 117 91 } 118 92 119 int ISymbolicExpressionGrammarBase.GetMinimumExpressionDepth(ISymbol symbol) { 120 if (symbols.Count == 0) return grammar.GetMinimumExpressionDepth(symbol); 121 else return base.GetMinimumExpressionDepth(symbol); 93 public override bool IsAllowedChildSymbol(ISymbol parent, ISymbol child) { 94 return grammar.IsAllowedChildSymbol(parent, child) || base.IsAllowedChildSymbol(parent, child); 122 95 } 123 int ISymbolicExpressionGrammarBase.GetMaximumExpressionDepth(ISymbol symbol) { 124 if (symbols.Count == 0) return grammar.GetMaximumExpressionDepth(symbol); 125 else return base.GetMaximumExpressionDepth(symbol); 96 public override bool IsAllowedChildSymbol(ISymbol parent, ISymbol child, int argumentIndex) { 97 return grammar.IsAllowedChildSymbol(parent, child, argumentIndex) || base.IsAllowedChildSymbol(parent, child, argumentIndex); 126 98 } 127 int ISymbolicExpressionGrammarBase.GetMinimumExpressionLength(ISymbol symbol) {128 if (symbols.Count == 0) return grammar.GetMinimumExpressionLength(symbol);129 else return base.GetMinimumExpressionLength(symbol);130 }131 int ISymbolicExpressionGrammarBase.GetMaximumExpressionLength(ISymbol symbol, int maxDepth) {132 if (symbols.Count == 0) return grammar.GetMaximumExpressionLength(symbol, maxDepth);133 else return base.GetMaximumExpressionLength(symbol, maxDepth);134 }135 136 99 } 137 100 }
Note: See TracChangeset
for help on using the changeset viewer.