The number of bits to search b, the depth to extend existing SMARTS d, and the number of new nodes to add at once n are the there primary hyperparameters during the search. The graph depth d is defined as the number of nodes to search beyond the primary nodes of the SMARTS pattern. Increasing this number will cause the search algorithm to consider more SMARTS information, and therefore extends the overall search space. The number of nodes n controls how many branch points are included at once. The bit depth b is defined as the number of simultaneous bits to search at one time (b j ; Eqn. 11). The bit depth, graph depth, and node number are iterated in sequence until the user-defined maximum depths are reached. We prefer to split using general parameters which corresponds to small bit depth and graph depths. The search is performed incrementally using the smallest bit and graph depth as possible, and increasing the depths if no new SMARTS patterns are found. The search begins with b = 1, d = 0, and n = 0, meaning splits are only considered on the primary nodes. After all existing SMARTS are scanned for splits, the objectives are computed for each and sorted, keeping all SMARTS that are less than zero. For the SMARTS patterns where splits were found, the search is subsequently restarted from the initial values. Once no new SMARTS patterns are found, the SMART hierarchy is then scanned for merges. Like before, any modified SMARTS from merging causes the search to restart. Once no new SMARTS are found after the merge, the graph depth is incremented, and the process repeats and subsequently increasing the node number. If no SMARTS are found by extending the graph space, then the bit depth is incremented. The optimization scheme is complete when no new SMARTS are found after iterating to the maximum values of d, b, and n.