GrammaticalExhaustiveSearch {gramEvol} | R Documentation |
Exhaustive Search
Description
Exhaustive Search within context-free grammar.
Usage
GrammaticalExhaustiveSearch(grammar, evalFunc,
max.depth = GrammarGetDepth(grammar),
startSymb = GrammarStartSymbol(grammar),
max.len = GrammarMaxSequenceLen(grammar, max.depth, startSymb),
wrappings = 3,
terminationCost = NA,
monitorFunc = NULL)
Arguments
grammar |
A |
evalFunc |
The evaluation function, taking an expression as its input and returning the cost (i.e., the score) of the expression. |
max.depth |
Maximum depth of recursion, in case of a cyclic grammar. By default it is limited to the number of production rules in the grammar. |
startSymb |
The symbol where the generation of a new expression should start. |
max.len |
Maximum length of the sequences to search.
By default it is determined by |
wrappings |
The number of times the function is allowed to wrap around |
terminationCost |
Target cost. If an expression with this cost or less is found, the algorithm terminates. |
monitorFunc |
A function that is called at each iteration. It can be used to monitor the search. |
Details
GrammaticalExhaustiveSearch
performs an exhaustive search,
iterating through all possible expressions that can be generated by the grammar
,
to find the expression that minimises evalFunc
.
The search terminates when all possible expressions are exhausted,
or when an expression with a cost less than terminationCost
is discovered.
If a monitorFunc
is given, it is called for each expression, and it receives a
list similar to the GrammaticalExhaustiveSearch
's return value with the information
availabe for that expression.
Value
bestExpression |
The Best expresssion. |
bestSequence |
Best expresssion's generating sequence. |
bestCost |
Best expresssion's cost. |
numExpr |
Number of evaluated expressions. |
In addition, the monitorFunc
receives the following additional slots:
currentExpression |
The current expresssion. |
currentSequence |
Current expresssion's generating sequence. |
currentCost |
Current expresssion's cost. |
See Also
GrammarGetNextSequence
,
GrammaticalEvolution
Examples
library("gramEvol")
ruleDef <- list(expr = gsrule("<var><op><var>"),
op = gsrule("+", "-", "*"),
var = gsrule("A", "B"))
# Create a grammar object
grammarDef <- CreateGrammar(ruleDef)
# use exhaustive search to find the sequence for creating "B - A"
evalFunc <- function(expr) {
if (as.character(expr) == "B - A") {
return(0) # Minimum error
} else {
return(1) # maximum error
}
}
res <- GrammaticalExhaustiveSearch(grammarDef, evalFunc, terminationCost = 0)
print(res)