Spaces:
Running
Operators
Pre-defined
All Base julia operators that take 1 or 2 scalars as input, and output a scalar as output, are available. A selection of these and other valid operators are stated below.
Binary
+, -, *, /, ^, greater, mod, logical_or,
logical_and
Unary
neg,
square,
cube,
exp,
abs,
log,
log10,
log2,
log1p,
sqrt,
sin,
cos,
tan,
sinh,
cosh,
tanh,
atan,
asinh,
acosh,
atanh_clip (=atanh((x+1)%2 - 1)),
erf,
erfc,
gamma,
relu,
round,
floor,
ceil,
round,
sign.
Custom
Instead of passing a predefined operator as a string,
you can define with by passing it to the pysr function, with, e.g.,
PySRRegressor(
...,
unary_operators=["myfunction(x) = x^2"],
binary_operators=["myotherfunction(x, y) = x^2*y"]
)
Make sure that it works with
Float32 as a datatype (for default precision, or Float64 if you set precision=64). That means you need to write 1.5f3
instead of 1.5e3, if you write any constant numbers, or simply convert a result to Float64(...).
PySR expects that operators not throw an error for any input value over the entire real line from -3.4e38 to +3.4e38.
Thus, for "invalid" inputs, such as negative numbers to a sqrt function, you may simply return a NaN of the same type as the input. For example,
my_sqrt(x) = x >= 0 ? sqrt(x) : convert(typeof(x), NaN)
would be a valid operator. The genetic algorithm will preferentially selection expressions which avoid any invalid values over the training dataset.