- Timestamp:
- 05/25/11 10:50:21 (13 years ago)
- 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 179 179 ReplaceWithMinimalTree(random, root, parent, argumentIndex); 180 180 } else { 181 var allowedSymbols = (from s in parent.Grammar. Symbols181 var allowedSymbols = (from s in parent.Grammar.GetAllowedChildSymbols(parent.Symbol, argumentIndex) 182 182 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 186 185 select s) 187 186 .ToList(); -
branches/GP.Grammar.Editor/HeuristicLab.Encodings.SymbolicExpressionTreeEncoding/3.4/Crossovers/SubtreeCrossover.cs
r5916 r6284 96 96 int maxInsertedBranchDepth = maxTreeDepth - GetBranchLevel(parent0.Root, crossoverPoint0.Parent); 97 97 98 99 98 List<ISymbolicExpressionTreeNode> allowedBranches = new List<ISymbolicExpressionTreeNode>(); 100 99 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)) 104 104 allowedBranches.Add(n); 105 105 }); … … 158 158 List<CutPoint> leafCrossoverPoints = new List<CutPoint>(); 159 159 parent0.Root.ForEachNodePostfix((n) => { 160 if ( n.Subtrees.Any() && n != parent0.Root) {160 if (!n.Symbol.Fixed && n.Subtrees.Any() && n != parent0.Root) { 161 161 foreach (var child in n.Subtrees) { 162 162 if (child.GetLength() <= maxBranchLength && -
branches/GP.Grammar.Editor/HeuristicLab.Encodings.SymbolicExpressionTreeEncoding/3.4/HeuristicLab.Encodings.SymbolicExpressionTreeEncoding-3.4.csproj
r5809 r6284 167 167 <Compile Include="Symbols\Argument.cs" /> 168 168 <Compile Include="Symbols\ArgumentTreeNode.cs" /> 169 <Compile Include="Symbols\GroupSymbol.cs" /> 169 170 <Compile Include="Symbols\StartSymbol.cs" /> 170 171 <Compile Include="Symbols\InvokeFunction.cs" /> -
branches/GP.Grammar.Editor/HeuristicLab.Encodings.SymbolicExpressionTreeEncoding/3.4/Interfaces/ISymbol.cs
r5809 r6284 27 27 ISymbolicExpressionTreeNode CreateTreeNode(); 28 28 double InitialFrequency { get; set; } 29 bool Fixed { get; set; } 29 30 30 31 event EventHandler Changed; -
branches/GP.Grammar.Editor/HeuristicLab.Encodings.SymbolicExpressionTreeEncoding/3.4/Interfaces/ISymbolicExpressionGrammar.cs
r6233 r6284 35 35 bool ReadOnly { get; set; } 36 36 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); 37 47 } 38 48 } -
branches/GP.Grammar.Editor/HeuristicLab.Encodings.SymbolicExpressionTreeEncoding/3.4/Interfaces/ISymbolicExpressionGrammarBase.cs
r5809 r6284 20 20 #endregion 21 21 22 using System; 22 23 using System.Collections.Generic; 23 24 using HeuristicLab.Core; … … 41 42 int GetMaximumExpressionLength(ISymbol start); 42 43 int GetMinimumExpressionDepth(ISymbol start); 44 45 event EventHandler Changed; 43 46 } 44 47 } -
branches/GP.Grammar.Editor/HeuristicLab.Encodings.SymbolicExpressionTreeEncoding/3.4/SymbolicExpressionGrammar.cs
r6233 r6284 160 160 } 161 161 162 #region IStatefulItem 162 #region IStatefulItem methods 163 163 void IStatefulItem.InitializeState() { } 164 164 void IStatefulItem.ClearState() { … … 166 166 } 167 167 #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 168 201 } 169 202 } -
branches/GP.Grammar.Editor/HeuristicLab.Encodings.SymbolicExpressionTreeEncoding/3.4/SymbolicExpressionGrammarBase.cs
r6233 r6284 93 93 cachedMinExpressionDepth = new Dictionary<string, int>(); 94 94 95 96 95 symbols = original.symbols.ToDictionary(x => x.Key, y => (ISymbol)cloner.Clone(y.Value)); 97 96 symbolSubtreeCount = new Dictionary<string, Tuple<int, int>>(original.symbolSubtreeCount); … … 128 127 symbolSubtreeCount.Add(symbol.Name, Tuple.Create(0, 0)); 129 128 ClearCaches(); 129 OnChanged(); 130 130 } 131 131 … … 133 133 symbol.NameChanging += new EventHandler<CancelEventArgs<string>>(Symbol_NameChanging); 134 134 symbol.NameChanged += new EventHandler(Symbol_NameChanged); 135 symbol.Changed += new EventHandler(Symbol_Changed); 135 136 } 136 137 private void DeregisterSymbolEvents(ISymbol symbol) { 137 138 symbol.NameChanging -= new EventHandler<CancelEventArgs<string>>(Symbol_NameChanging); 138 139 symbol.NameChanged -= new EventHandler(Symbol_NameChanged); 140 symbol.Changed -= new EventHandler(Symbol_Changed); 139 141 } 140 142 … … 179 181 180 182 ClearCaches(); 183 OnChanged(); 184 } 185 186 private void Symbol_Changed(object sende, EventArgs e) { 187 ClearCaches(); 188 OnChanged(); 181 189 } 182 190 … … 200 208 DeregisterSymbolEvents(symbol); 201 209 ClearCaches(); 210 OnChanged(); 202 211 } 203 212 … … 217 226 childSymbols.Add(child.Name); 218 227 ClearCaches(); 228 OnChanged(); 219 229 } 220 230 … … 231 241 childSymbols.Add(child.Name); 232 242 ClearCaches(); 243 OnChanged(); 233 244 } 234 245 … … 236 247 List<string> childSymbols; 237 248 if (allowedChildSymbols.TryGetValue(child.Name, out childSymbols)) { 238 if (allowedChildSymbols[parent.Name].Remove(child.Name)) 249 if (allowedChildSymbols[parent.Name].Remove(child.Name)) { 239 250 ClearCaches(); 251 OnChanged(); 252 } 240 253 } 241 254 } … … 245 258 List<string> childSymbols; 246 259 if (allowedChildSymbolsPerIndex.TryGetValue(key, out childSymbols)) { 247 if (allowedChildSymbolsPerIndex[key].Remove(child.Name)) 260 if (allowedChildSymbolsPerIndex[key].Remove(child.Name)) { 248 261 ClearCaches(); 262 OnChanged(); 263 } 249 264 } 250 265 } … … 258 273 symbolSubtreeCount[symbol.Name] = Tuple.Create(minimumSubtreeCount, maximumSubtreeCount); 259 274 ClearCaches(); 275 OnChanged(); 260 276 } 261 277 #endregion … … 304 320 result = result.Union(temp); 305 321 306 return result.Select(x => GetSymbol(x)) ;322 return result.Select(x => GetSymbol(x)).Where(s => !s.InitialFrequency.IsAlmost(0.0)); 307 323 } 308 324 … … 313 329 return symbolSubtreeCount[symbol.Name].Item2; 314 330 } 315 316 331 317 332 private void ClearCaches() { … … 369 384 return temp; 370 385 } 386 387 public event EventHandler Changed; 388 protected virtual void OnChanged() { 389 var handler = Changed; 390 if (handler != null) Changed(this, EventArgs.Empty); 391 } 371 392 #endregion 372 393 } -
branches/GP.Grammar.Editor/HeuristicLab.Encodings.SymbolicExpressionTreeEncoding/3.4/Symbols/Symbol.cs
r6233 r6284 42 42 } 43 43 } 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 44 57 public override bool CanChangeName { 45 58 get { return !(this is IReadOnlySymbol); } … … 55 68 : base(original, cloner) { 56 69 initialFrequency = original.initialFrequency; 70 @fixed = original.@fixed; 57 71 } 58 72 … … 60 74 : base(name, description) { 61 75 initialFrequency = 1.0; 76 @fixed = false; 62 77 } 63 78 … … 68 83 #region events 69 84 public event EventHandler Changed; 70 protected v oid OnChanged(EventArgs e) {85 protected virtual void OnChanged(EventArgs e) { 71 86 EventHandler handlers = Changed; 72 87 if (handlers != null)
Note: See TracChangeset
for help on using the changeset viewer.