Spaces:
Running
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., | |
| ```python | |
| 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, | |
| ```julia | |
| 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. | |