|
1 | 1 | using DynamicExpressions, Optim, Zygote |
2 | 2 | using Random: Xoshiro |
3 | 3 |
|
4 | | -operators = OperatorEnum(; binary_operators=(+, -, *, /), unary_operators=(sin, cos)) |
| 4 | +operators = OperatorEnum(; binary_operators=(+, -, *, /), unary_operators=(exp,)) |
5 | 5 | x1, x2, x3 = (i -> Node(Float64; feature=i)).(1:3); |
6 | 6 |
|
7 | | -X = randn(Xoshiro(0), Float64, 3, 100); |
8 | | -y = @. cos(X[1, :] * 2.1 - 0.9) + X[3, :] * -0.9 |
| 7 | +X = rand(Xoshiro(0), Float64, 3, 100); |
| 8 | +y = @. exp(X[1, :] * 2.1 - 0.9) + X[3, :] * -0.9 |
9 | 9 |
|
10 | | -original_tree = cos(x1 * 0.8 - 0.0) + 5.2 * x3 |
| 10 | +original_tree = exp(x1 * 0.8 - 0.0) + 5.2 * x3 |
| 11 | +target_tree = exp(x1 * 2.1 - 0.9) + -0.9 * x3 |
11 | 12 | tree = copy(original_tree) |
12 | 13 |
|
13 | 14 | res = optimize(t -> sum(abs2, t(X, operators) .- y), tree) |
14 | 15 |
|
15 | 16 | # Should be unchanged by default |
| 17 | +if VERSION >= v"1.9" |
| 18 | + ext = Base.get_extension(DynamicExpressions, :DynamicExpressionsOptimExt) |
| 19 | + @test res isa ext.ExpressionOptimizationResults |
| 20 | +end |
16 | 21 | @test tree == original_tree |
| 22 | +@test get_constants(res.minimizer) ≈ get_constants(target_tree) |
0 commit comments