/// <summary> /// Generate chromosome's subtree of specified level. /// </summary> /// /// <param name="node">Sub tree's node to generate.</param> /// <param name="level">Sub tree's level to generate.</param> /// protected void Generate(GPCustomTreeNode node, int level) { if(generator != null) { if (level == 0) { node.Gene = root.Gene.CreateNew(GPGeneType.Argument); } else { var notes = generator.Generate(); List<Note> notes_cut = new List<Note>(); int j = 0; int max = (int)Math.Pow(2,level-1); foreach(Note n in notes.Notes) { if(j>max) { if (n.Velocity <= 0 || n.Pitch < 0) break; } notes_cut.Add(n); } node.Generate(notes_cut); } return; } /// OLD !!! // create gene for the node if (level == 0) { // the gene should be an argument node.Gene = root.Gene.CreateNew(GPGeneType.Argument); } else { // the gene can be function or argument node.Gene = root.Gene.CreateNew(); } // add children if (node.Gene.ArgumentsCount != 0) { node.Children = new List<GPCustomTreeNode>(); for (int i = 0; i < node.Gene.ArgumentsCount; i++) { // create new child GPCustomTreeNode child = new GPCustomTreeNode(); Generate(child, level - 1); // add the new child node.Children.Add(child); } } }