id summary reporter owner description type status priority milestone component version resolution keywords cc 1472 StackOverflowException when SymbolicExpressionGrammar is configured wrong cneumuel swagner "When a symbolic regression problem with a `TypeCoherentExpressionGrammar` is configured like this (the numbers in brackets indicate the `InitialFrequency`): {{{ ProgramRootSymbol (0) StartSymbol (0) Defun (1) Addition (1) Subtraction (1) Multiplication (0) Division (0) Average (1) Sine (1) Cosine (0) Tangent (0) Logarithm (1) Power (1) Root (1) Exponential (0) IfThenElse (1) GreaterThan (1) LessThan (1) And (1) Or (1) Not (0) TimeLag (1) Integral (1) Derivative (1) Constant (0) Variable (0) LaggedVariable (0) Variable Condition (0) }}} the execution of the algorithm (such as a `GeneticAlgorithm`) causes the process to crash due to a `StackOverflowException`. This is the the (shortened) stacktrace: {{{ ---> StackOverFlowException HeuristicLab.Encodings.SymbolicExpressionTreeEncoding-3.4.dll!HeuristicLab.Encodings.SymbolicExpressionTreeEncoding.SymbolicExpressionTreeNode.Grammar.get() Line 98 + 0x32 bytes C# HeuristicLab.Encodings.SymbolicExpressionTreeEncoding-3.4.dll!HeuristicLab.Encodings.SymbolicExpressionTreeEncoding.SymbolicExpressionTreeNode.Grammar.get() Line 98 + 0x34 bytes C# HeuristicLab.Encodings.SymbolicExpressionTreeEncoding-3.4.dll!HeuristicLab.Encodings.SymbolicExpressionTreeEncoding.SymbolicExpressionTreeNode.Grammar.get() Line 98 + 0x34 bytes C# ... ~1577 calls ... HeuristicLab.Encodings.SymbolicExpressionTreeEncoding-3.4.dll!HeuristicLab.Encodings.SymbolicExpressionTreeEncoding.SymbolicExpressionTreeNode.Grammar.get() Line 98 + 0x34 bytes C# HeuristicLab.Encodings.SymbolicExpressionTreeEncoding-3.4.dll!HeuristicLab.Encodings.SymbolicExpressionTreeEncoding.SymbolicExpressionTreeNode.Grammar.get() Line 98 + 0x34 bytes C# HeuristicLab.Encodings.SymbolicExpressionTreeEncoding-3.4.dll!HeuristicLab.Encodings.SymbolicExpressionTreeEncoding.SymbolicExpressionTreeNode.Grammar.get() Line 98 + 0x34 bytes C# HeuristicLab.Encodings.SymbolicExpressionTreeEncoding-3.4.dll!HeuristicLab.Encodings.SymbolicExpressionTreeEncoding.ProbabilisticTreeCreator.ReplaceWithMinimalTree.AnonymousMethod__11(HeuristicLab.Encodings.SymbolicExpressionTreeEncoding.ISymbol s) Line 204 + 0x33 bytes C# [External Code] HeuristicLab.Encodings.SymbolicExpressionTreeEncoding-3.4.dll!HeuristicLab.Encodings.SymbolicExpressionTreeEncoding.ProbabilisticTreeCreator.ReplaceWithMinimalTree(HeuristicLab.Core.IRandom random, HeuristicLab.Encodings.SymbolicExpressionTreeEncoding.ISymbolicExpressionTreeNode root, HeuristicLab.Encodings.SymbolicExpressionTreeEncoding.ISymbolicExpressionTreeNode parent, int childIndex) Line 202 + 0x291 bytes C# HeuristicLab.Encodings.SymbolicExpressionTreeEncoding-3.4.dll!HeuristicLab.Encodings.SymbolicExpressionTreeEncoding.ProbabilisticTreeCreator.ReplaceWithMinimalTree(HeuristicLab.Core.IRandom random, HeuristicLab.Encodings.SymbolicExpressionTreeEncoding.ISymbolicExpressionTreeNode root, HeuristicLab.Encodings.SymbolicExpressionTreeEncoding.ISymbolicExpressionTreeNode parent, int childIndex) Line 223 + 0x1f bytes C# HeuristicLab.Encodings.SymbolicExpressionTreeEncoding-3.4.dll!HeuristicLab.Encodings.SymbolicExpressionTreeEncoding.ProbabilisticTreeCreator.ReplaceWithMinimalTree(HeuristicLab.Core.IRandom random, HeuristicLab.Encodings.SymbolicExpressionTreeEncoding.ISymbolicExpressionTreeNode root, HeuristicLab.Encodings.SymbolicExpressionTreeEncoding.ISymbolicExpressionTreeNode parent, int childIndex) Line 223 + 0x1f bytes C# ... ~1576 calls ... HeuristicLab.Encodings.SymbolicExpressionTreeEncoding-3.4.dll!HeuristicLab.Encodings.SymbolicExpressionTreeEncoding.ProbabilisticTreeCreator.ReplaceWithMinimalTree(HeuristicLab.Core.IRandom random, HeuristicLab.Encodings.SymbolicExpressionTreeEncoding.ISymbolicExpressionTreeNode root, HeuristicLab.Encodings.SymbolicExpressionTreeEncoding.ISymbolicExpressionTreeNode parent, int childIndex) Line 223 + 0x1f bytes C# HeuristicLab.Encodings.SymbolicExpressionTreeEncoding-3.4.dll!HeuristicLab.Encodings.SymbolicExpressionTreeEncoding.ProbabilisticTreeCreator.ReplaceWithMinimalTree(HeuristicLab.Core.IRandom random, HeuristicLab.Encodings.SymbolicExpressionTreeEncoding.ISymbolicExpressionTreeNode root, HeuristicLab.Encodings.SymbolicExpressionTreeEncoding.ISymbolicExpressionTreeNode parent, int childIndex) Line 223 + 0x1f bytes C# HeuristicLab.Encodings.SymbolicExpressionTreeEncoding-3.4.dll!HeuristicLab.Encodings.SymbolicExpressionTreeEncoding.ProbabilisticTreeCreator.ReplaceWithMinimalTree(HeuristicLab.Core.IRandom random, HeuristicLab.Encodings.SymbolicExpressionTreeEncoding.ISymbolicExpressionTreeNode root, HeuristicLab.Encodings.SymbolicExpressionTreeEncoding.ISymbolicExpressionTreeNode parent, int childIndex) Line 223 + 0x1f bytes C# HeuristicLab.Encodings.SymbolicExpressionTreeEncoding-3.4.dll!HeuristicLab.Encodings.SymbolicExpressionTreeEncoding.ProbabilisticTreeCreator.TryCreateFullTreeFromSeed(HeuristicLab.Core.IRandom random, HeuristicLab.Encodings.SymbolicExpressionTreeEncoding.ISymbolicExpressionTreeNode root, HeuristicLab.Encodings.SymbolicExpressionTreeEncoding.ISymbolicExpressionTreeGrammar globalGrammar, int targetLength, int maxDepth) Line 194 + 0x25 bytes C# HeuristicLab.Encodings.SymbolicExpressionTreeEncoding-3.4.dll!HeuristicLab.Encodings.SymbolicExpressionTreeEncoding.ProbabilisticTreeCreator.PTC2(HeuristicLab.Core.IRandom random, HeuristicLab.Encodings.SymbolicExpressionTreeEncoding.ISymbolicExpressionTreeNode seedNode, int maxLength, int maxDepth) Line 115 + 0x89 bytes C# HeuristicLab.Encodings.SymbolicExpressionTreeEncoding-3.4.dll!HeuristicLab.Encodings.SymbolicExpressionTreeEncoding.ProbabilisticTreeCreator.Create(HeuristicLab.Core.IRandom random, HeuristicLab.Encodings.SymbolicExpressionTreeEncoding.ISymbolicExpressionGrammar grammar, int maxTreeLength, int maxTreeDepth) Line 92 + 0x22 bytes C# HeuristicLab.Encodings.SymbolicExpressionTreeEncoding-3.4.dll!HeuristicLab.Encodings.SymbolicExpressionTreeEncoding.ProbabilisticTreeCreator.Create(HeuristicLab.Core.IRandom random) Line 78 + 0x7e bytes C# HeuristicLab.Encodings.SymbolicExpressionTreeEncoding-3.4.dll!HeuristicLab.Encodings.SymbolicExpressionTreeEncoding.SymbolicExpressionTreeCreator.Apply() Line 58 + 0x3c bytes C# HeuristicLab.Operators-3.3.dll!HeuristicLab.Operators.Operator.Execute(HeuristicLab.Core.IExecutionContext context, System.Threading.CancellationToken cancellationToken) Line 115 + 0x18 bytes C# HeuristicLab.SequentialEngine-3.3.dll!HeuristicLab.SequentialEngine.SequentialEngine.Run(System.Threading.CancellationToken cancellationToken) Line 60 + 0x70 bytes C# HeuristicLab.Core-3.3.dll!HeuristicLab.Core.Engine.Run(object state) Line 153 + 0x1c bytes C# [External Code] }}} While it is clear that not selecting `Variable` and `Constant` will prevent the algorithm to work correctly, the process should not crash. The algorithm should instead just throw an exception. This is important especially in `MetaOptimization` where this kind of parameterization can be chosen randomly." defect closed medium HeuristicLab 3.3.4 Encodings.SymbolicExpressionTreeEncoding 3.3.4 done