Skip to content

Writing a Custom Plugin ​

This tutorial walks through building a simple plugin from scratch. We'll create a plugin that counts how many mutations are accepted vs rejected during the search, which is useful for diagnosing whether the search is exploring effectively.

Defining the plugin ​

A plugin has two parts: an immutable config struct (subtyping AbstractPlugin) and a mutable state object returned by init_plugin_state.

julia
using SymbolicRegression
using SymbolicRegression: AbstractPlugin, MutationEvent, AbstractMutation
using SymbolicRegression: machine, fit!, report
using Test

struct MutationCounterPlugin <: AbstractPlugin end

mutable struct MutationCounterState
    accepted::Int
    rejected::Int
end

Implementing the hooks ​

Create the state once per output at search start:

julia
function SymbolicRegression.init_plugin_state(::MutationCounterPlugin, options, dataset)
    return MutationCounterState(0, 0)
end

The on_mutation_end! hook fires on the worker after each mutation's accept/reject decision. We increment the appropriate counter:

julia
function SymbolicRegression.on_mutation_end!(
    state::MutationCounterState,
    ::MutationCounterPlugin,
    ::AbstractMutation,
    event::MutationEvent,
    dataset,
    options,
)
    if event.accepted
        state.accepted += 1
    else
        state.rejected += 1
    end
    return nothing
end

Pass the plugin to SRRegressor via the plugins keyword. All default plugins (like AdaptiveParsimonyPlugin) are still active alongside yours.

julia
X = 2randn(100, 5)
y = @. cos(X[:, 1]) + X[:, 2]^2

model = SRRegressor(;
    binary_operators=[+, -, *, /],
    unary_operators=[cos],
    plugins=(MutationCounterPlugin(),),
    niterations=5,
)
mach = machine(model, X, y)
fit!(mach)
SymbolicRegression.MLJInterfaceModule.Machine{SRRegressor{DynamicQuantities.SymbolicDimensions{DynamicQuantities.FRInt32}, Nothing}, Tuple{Matrix{Float64}, Vector{Float64}}}(SRRegressor{DynamicQuantities.SymbolicDimensions{DynamicQuantities.FRInt32}, Nothing}(nothing, nothing, nothing, nothing, nothing, nothing, nothing, nothing, nothing, nothing, nothing, nothing, nothing, nothing, nothing, nothing, nothing, nothing, nothing, nothing, nothing, nothing, nothing, nothing, nothing, nothing, nothing, nothing, nothing, nothing, nothing, nothing, false, :log, nothing, true, true, nothing, nothing, nothing, true, Optim.BFGS{LineSearches.InitialStatic{Float64}, LineSearches.BackTracking{Float64, Int64}, Nothing, Nothing, Optim.Flat}(LineSearches.InitialStatic{Float64}(1.0, false), LineSearches.BackTracking{Float64, Int64}(0.0001, 0.5, 0.1, 1000, 3, Inf, nothing), nothing, nothing, Optim.Flat()), 2, 0.14, nothing, nothing, nothing, true, true, true, nothing, nothing, nothing, nothing, nothing, nothing, Base.PipeEndpoint(RawFD(-1) closed, 0 bytes waiting), nothing, nothing, false, false, nothing, false, nothing, nothing, 5, nothing, nothing, true, nothing, nothing, nothing, false, "pysr_trace.jsonl", PopMember, (Main.MutationCounterPlugin(),), nothing, true, nothing, nothing, nothing, nothing, false, nothing, nothing, [cos], Function[+, -, *, /], 5, :multithreading, nothing, nothing, nothing, nothing, nothing, nothing, nothing, true, nothing, Nothing, nothing, SymbolicRegression.MLJInterfaceModule.choose_best, DynamicQuantities.SymbolicDimensions{DynamicQuantities.FRInt32}), ([-3.805090671128 -4.155947673516264 … -1.2627319182816803 2.8307833881063105; 4.824049732471691 -1.815558207760764 … -0.3611458387020252 1.8483761666527405; … ; 0.9240895061773927 1.9843759220921298 … -4.094729749711905 0.5629322578110816; -1.1162123019200456 3.7485348223984 … 2.7818458329232847 -1.4909628577742795], [16.48405835585286, 3.4076804691203226, -0.23810785476185664, 1.344507889252327, -0.04857211441310754, 1.9247902537958335, 13.113970575913367, 0.7788149902671263, 29.445169339479932, 0.3271554176742429  …  -0.024089143158822435, 0.2744706926039926, 0.6777921205619748, 6.10392590620459, 12.816701327086369, 1.3208139524864007, 2.488609262929482, 4.117422984776712, 4.540309282272014, 14.490601936285172]), SymbolicRegression.MLJInterfaceModule.SRFitResult{SRRegressor{DynamicQuantities.SymbolicDimensions{DynamicQuantities.FRInt32}, Nothing}, Tuple{Vector{Vector{Population{Float64, Float64, Expression{Float64, Node{Float64, 2}, @NamedTuple{operators::OperatorEnum{Tuple{Tuple{typeof(cos)}, Tuple{typeof(+), typeof(-), typeof(*), typeof(/)}}}, variable_names::Vector{String}}}, PopMember{Float64, Float64, Expression{Float64, Node{Float64, 2}, @NamedTuple{operators::OperatorEnum{Tuple{Tuple{typeof(cos)}, Tuple{typeof(+), typeof(-), typeof(*), typeof(/)}}}, variable_names::Vector{String}}}}}}}, HallOfFame{Float64, Float64, Expression{Float64, Node{Float64, 2}, @NamedTuple{operators::OperatorEnum{Tuple{Tuple{typeof(cos)}, Tuple{typeof(+), typeof(-), typeof(*), typeof(/)}}}, variable_names::Vector{String}}}, PopMember{Float64, Float64, Expression{Float64, Node{Float64, 2}, @NamedTuple{operators::OperatorEnum{Tuple{Tuple{typeof(cos)}, Tuple{typeof(+), typeof(-), typeof(*), typeof(/)}}}, variable_names::Vector{String}}}}}}, Options{SymbolicRegression.CoreModule.OptionsStructModule.ComplexityMapping{Int64, Int64, 2}, OperatorEnum, Tuple{Int64, Int64}, Tuple{Vector{Int64}, Vector{Tuple{Int64, Int64}}}, Node{T, 2} where T, Expression, @NamedTuple{}, Tuple{Main.MutationCounterPlugin, SimulatedAnnealingPlugin, AdaptiveParsimonyPlugin, AdaptiveMutationWeightsPlugin}, PopMember, false, false, nothing, Nothing, 5, false, Symbol, Nothing}, Nothing, Nothing, SymbolicRegression.MLJInterfaceModule.SRFitResultTypes{Float64, Matrix{Float64}, Vector{Float64}, Nothing, Tuple{Vector{Vector{Population{Float64, Float64, Expression{Float64, Node{Float64, 2}, @NamedTuple{operators::OperatorEnum{Tuple{Tuple{typeof(cos)}, Tuple{typeof(+), typeof(-), typeof(*), typeof(/)}}}, variable_names::Vector{String}}}, PopMember{Float64, Float64, Expression{Float64, Node{Float64, 2}, @NamedTuple{operators::OperatorEnum{Tuple{Tuple{typeof(cos)}, Tuple{typeof(+), typeof(-), typeof(*), typeof(/)}}}, variable_names::Vector{String}}}}}}}, HallOfFame{Float64, Float64, Expression{Float64, Node{Float64, 2}, @NamedTuple{operators::OperatorEnum{Tuple{Tuple{typeof(cos)}, Tuple{typeof(+), typeof(-), typeof(*), typeof(/)}}}, variable_names::Vector{String}}}, PopMember{Float64, Float64, Expression{Float64, Node{Float64, 2}, @NamedTuple{operators::OperatorEnum{Tuple{Tuple{typeof(cos)}, Tuple{typeof(+), typeof(-), typeof(*), typeof(/)}}}, variable_names::Vector{String}}}}}}, Vector{DynamicQuantities.SymbolicDimensions{DynamicQuantities.FRInt32}}, DynamicQuantities.SymbolicDimensions{DynamicQuantities.FRInt32}, Nothing, Nothing}}(SRRegressor{DynamicQuantities.SymbolicDimensions{DynamicQuantities.FRInt32}, Nothing}(nothing, nothing, nothing, nothing, nothing, nothing, nothing, nothing, nothing, nothing, nothing, nothing, nothing, nothing, nothing, nothing, nothing, nothing, nothing, nothing, nothing, nothing, nothing, nothing, nothing, nothing, nothing, nothing, nothing, nothing, nothing, nothing, false, :log, nothing, true, true, nothing, nothing, nothing, true, Optim.BFGS{LineSearches.InitialStatic{Float64}, LineSearches.BackTracking{Float64, Int64}, Nothing, Nothing, Optim.Flat}(LineSearches.InitialStatic{Float64}(1.0, false), LineSearches.BackTracking{Float64, Int64}(0.0001, 0.5, 0.1, 1000, 3, Inf, nothing), nothing, nothing, Optim.Flat()), 2, 0.14, nothing, nothing, nothing, true, true, true, nothing, nothing, nothing, nothing, nothing, nothing, Base.PipeEndpoint(RawFD(-1) closed, 0 bytes waiting), nothing, nothing, false, false, nothing, false, nothing, nothing, 5, nothing, nothing, true, nothing, nothing, nothing, false, "pysr_trace.jsonl", PopMember, (Main.MutationCounterPlugin(),), nothing, true, nothing, nothing, nothing, nothing, false, nothing, nothing, [cos], Function[+, -, *, /], 5, :multithreading, nothing, nothing, nothing, nothing, nothing, nothing, nothing, true, nothing, Nothing, nothing, SymbolicRegression.MLJInterfaceModule.choose_best, DynamicQuantities.SymbolicDimensions{DynamicQuantities.FRInt32}), (Vector{Population{Float64, Float64, Expression{Float64, Node{Float64, 2}, @NamedTuple{operators::OperatorEnum{Tuple{Tuple{typeof(cos)}, Tuple{typeof(+), typeof(-), typeof(*), typeof(/)}}}, variable_names::Vector{String}}}, PopMember{Float64, Float64, Expression{Float64, Node{Float64, 2}, @NamedTuple{operators::OperatorEnum{Tuple{Tuple{typeof(cos)}, Tuple{typeof(+), typeof(-), typeof(*), typeof(/)}}}, variable_names::Vector{String}}}}}}[[Population{Float64, Float64, Expression{Float64, Node{Float64, 2}, @NamedTuple{operators::OperatorEnum{Tuple{Tuple{typeof(cos)}, Tuple{typeof(+), typeof(-), typeof(*), typeof(/)}}}, variable_names::Vector{String}}}, PopMember{Float64, Float64, Expression{Float64, Node{Float64, 2}, @NamedTuple{operators::OperatorEnum{Tuple{Tuple{typeof(cos)}, Tuple{typeof(+), typeof(-), typeof(*), typeof(/)}}}, variable_names::Vector{String}}}}}(PopMember{Float64, Float64, Expression{Float64, Node{Float64, 2}, @NamedTuple{operators::OperatorEnum{Tuple{Tuple{typeof(cos)}, Tuple{typeof(+), typeof(-), typeof(*), typeof(/)}}}, variable_names::Vector{String}}}}[PopMember(tree = ((x4 + (1.0 - x4)) + 0.5503322467353148), loss = 48.24952970937411, cost = 0.7929154020117553), PopMember(tree = ((x4 + (1.3542042689648162 - x4)) + 0.5503322467353148), loss = 46.04511555330917, cost = 0.7566888533327316), PopMember(tree = ((x4 + ((((x4 + (4.193607852315167 - x4)) + 0.5503322467353148) / 0.5503322467353148) - x4)) + 0.5503322467353148), loss = 56.19250761324842, cost = 0.9234474415105229), PopMember(tree = (((3.773906060639992 - x4) + 0.5503322467353148) + x4), loss = 37.697963728719145, cost = 0.619514765118519), PopMember(tree = ((x4 + (4.613309643990343 - x4)) + 0.5503322467353148), loss = 37.538010334367115, cost = 0.6168861486169753), PopMember(tree = ((x4 + 0.5503322467353148) + (3.3769906514684953 - x4)), loss = 38.26431240263501, cost = 0.628821935347156), PopMember(tree = (2.307877631291464), loss = 43.84044411890618, cost = 0.7204580766341175), PopMember(tree = ((x4 + 1.2279350139353877) + (4.193607852315168 - x4)), loss = 37.771861670682796, cost = 0.6207291772944074), PopMember(tree = ((x4 + (7.387215704630334 - x4)) + 0.5503322467353148), loss = 47.03240739457962, cost = 0.772913652039356), PopMember(tree = ((x4 + 0.6404422326636489) + (4.1987758694522626 - x4)), loss = 37.432759539742264, cost = 0.6151564949470908)  …  PopMember(tree = (x4 + 4.193607852315167), loss = 42.98071649313235, cost = 0.7063296223234297), PopMember(tree = (x4 + ((4.193607852315167 - x4) + 0.5503322467353148)), loss = 37.441837437607774, cost = 0.615305677852682), PopMember(tree = (x4 + 2.436062467759018), loss = 48.86631089253897, cost = 0.8030513619423125), PopMember(tree = (x4 + ((2.821545062093538 - x4) + 2.017673039974901)), loss = 37.432759539742264, cost = 0.6151564949470908), PopMember(tree = ((((0.007841268561386311 / x4) - x4) + 4.836860859407979) + x4), loss = 37.43186422406742, cost = 0.615141781651593), PopMember(tree = ((x4 + (4.193607852315167 - x4)) + 0.5503322467353148), loss = 37.441837437607774, cost = 0.615305677852682), PopMember(tree = ((x4 + ((2.307877631291464 - x4) / 0.5503322467353148)) + 0.5503322467353148), loss = 39.24129802881995, cost = 0.6448773654251746), PopMember(tree = ((x4 + (4.193607852315167 - x4)) + 0.5503322467353148), loss = 37.441837437607774, cost = 0.615305677852682), PopMember(tree = (((4.188530642795556 - x4) + 0.5503322467353148) + x4), loss = 37.44283070843248, cost = 0.61532200090785), PopMember(tree = ((x4 + (4.193607852315168 - x4)) + 0.5503322467353148), loss = 37.441837437607774, cost = 0.615305677852682)], 27), Population{Float64, Float64, Expression{Float64, Node{Float64, 2}, @NamedTuple{operators::OperatorEnum{Tuple{Tuple{typeof(cos)}, Tuple{typeof(+), typeof(-), typeof(*), typeof(/)}}}, variable_names::Vector{String}}}, PopMember{Float64, Float64, Expression{Float64, Node{Float64, 2}, @NamedTuple{operators::OperatorEnum{Tuple{Tuple{typeof(cos)}, Tuple{typeof(+), typeof(-), typeof(*), typeof(/)}}}, variable_names::Vector{String}}}}}(PopMember{Float64, Float64, Expression{Float64, Node{Float64, 2}, @NamedTuple{operators::OperatorEnum{Tuple{Tuple{typeof(cos)}, Tuple{typeof(+), typeof(-), typeof(*), typeof(/)}}}, variable_names::Vector{String}}}}[PopMember(tree = (4.432734608444034), loss = 37.597988370358756, cost = 0.6178718060691131), PopMember(tree = (20.934905921110396), loss = 296.5039259067136, cost = 4.8726387806161116), PopMember(tree = (4.83921810212501), loss = 37.432759539742264, cost = 0.6151564949470908), PopMember(tree = (3.8014030626167132), loss = 38.50981959592436, cost = 0.6328565121821295), PopMember(tree = (4.839218102108496), loss = 37.43275953974226, cost = 0.6151564949470907), PopMember(tree = (4.432542329174094), loss = 37.59814472402888, cost = 0.6178743755290425), PopMember(tree = (4.432734608444034), loss = 37.597988370358756, cost = 0.6178718060691131), PopMember(tree = (4.432734608444034), loss = 37.597988370358756, cost = 0.6178718060691131), PopMember(tree = (4.400282081663899), loss = 37.62542436978042, cost = 0.6183226794069893), PopMember(tree = (4.432734608444034), loss = 37.597988370358756, cost = 0.6178718060691131)  …  PopMember(tree = (2.96901679298612), loss = 40.93041247636147, cost = 0.6726356641958264), PopMember(tree = (4.265427401145064), loss = 37.76199530824706, cost = 0.6205670370459065), PopMember(tree = (4.007552243648281), loss = 38.12442763986003, cost = 0.6265231195124912), PopMember(tree = (4.428769146419996), loss = 37.60122788496281, cost = 0.6179250430859311), PopMember(tree = (4.432734608444034), loss = 37.597988370358756, cost = 0.6178718060691131), PopMember(tree = (3.827817759453822), loss = 38.455690192851364, cost = 0.6319669690579414), PopMember(tree = (4.395684770514281), loss = 37.62948135597168, cost = 0.6183893504575917), PopMember(tree = (4.432542329174094), loss = 37.59814472402888, cost = 0.6178743755290425), PopMember(tree = (2.9327850038990575), loss = 41.0672466976664, cost = 0.6748843485301296), PopMember(tree = (4.839218102059333), loss = 37.43275953974226, cost = 0.6151564949470907)], 27), Population{Float64, Float64, Expression{Float64, Node{Float64, 2}, @NamedTuple{operators::OperatorEnum{Tuple{Tuple{typeof(cos)}, Tuple{typeof(+), typeof(-), typeof(*), typeof(/)}}}, variable_names::Vector{String}}}, PopMember{Float64, Float64, Expression{Float64, Node{Float64, 2}, @NamedTuple{operators::OperatorEnum{Tuple{Tuple{typeof(cos)}, Tuple{typeof(+), typeof(-), typeof(*), typeof(/)}}}, variable_names::Vector{String}}}}}(PopMember{Float64, Float64, Expression{Float64, Node{Float64, 2}, @NamedTuple{operators::OperatorEnum{Tuple{Tuple{typeof(cos)}, Tuple{typeof(+), typeof(-), typeof(*), typeof(/)}}}, variable_names::Vector{String}}}}[PopMember(tree = (4.290944208438076), loss = 37.7333638022158, cost = 0.6200965171827758), PopMember(tree = (5.001095270658156), loss = 37.458963757441985, cost = 0.6155871256275748), PopMember(tree = (5.001095270658156), loss = 37.458963757441985, cost = 0.6155871256275748), PopMember(tree = (5.001095270658156), loss = 37.458963757441985, cost = 0.6155871256275748), PopMember(tree = (5.0574405958208395), loss = 37.48038059650708, cost = 0.6159390822509742), PopMember(tree = (4.144185554959445), loss = 37.915829781329904, cost = 0.6230950973980482), PopMember(tree = (5.001095270658156), loss = 37.458963757441985, cost = 0.6155871256275748), PopMember(tree = (4.479360531746325 - cos((x1 - -2.4013559687445794) * -1.724711282495545)), loss = 38.303778469693164, cost = 0.6294705064858952), PopMember(tree = (5.001095270658156), loss = 37.458963757441985, cost = 0.6155871256275748), PopMember(tree = (5.001095270658156), loss = 37.458963757441985, cost = 0.6155871256275748)  …  PopMember(tree = (4.839218102072853), loss = 37.432759539742264, cost = 0.6151564949470908), PopMember(tree = (0.0), loss = 60.850791379455124, cost = 1.0), PopMember(tree = (0.0), loss = 60.850791379455124, cost = 1.0), PopMember(tree = (4.839218100589995), loss = 37.432759539742264, cost = 0.6151564949470908), PopMember(tree = (5.001095270658156), loss = 37.458963757441985, cost = 0.6155871256275748), PopMember(tree = (5.001095270658156), loss = 37.458963757441985, cost = 0.6155871256275748), PopMember(tree = (5.001095270658156), loss = 37.458963757441985, cost = 0.6155871256275748), PopMember(tree = (5.001095270658156), loss = 37.458963757441985, cost = 0.6155871256275748), PopMember(tree = (4.107530759180226), loss = 37.96812590753437, cost = 0.6239545131101358), PopMember(tree = (4.839218102285937), loss = 37.432759539742264, cost = 0.6151564949470908)], 27), Population{Float64, Float64, Expression{Float64, Node{Float64, 2}, @NamedTuple{operators::OperatorEnum{Tuple{Tuple{typeof(cos)}, Tuple{typeof(+), typeof(-), typeof(*), typeof(/)}}}, variable_names::Vector{String}}}, PopMember{Float64, Float64, Expression{Float64, Node{Float64, 2}, @NamedTuple{operators::OperatorEnum{Tuple{Tuple{typeof(cos)}, Tuple{typeof(+), typeof(-), typeof(*), typeof(/)}}}, variable_names::Vector{String}}}}}(PopMember{Float64, Float64, Expression{Float64, Node{Float64, 2}, @NamedTuple{operators::OperatorEnum{Tuple{Tuple{typeof(cos)}, Tuple{typeof(+), typeof(-), typeof(*), typeof(/)}}}, variable_names::Vector{String}}}}[PopMember(tree = (0.8720794416828653), loss = 53.17094869073536, cost = 0.8737922299016692), PopMember(tree = (4.7264716062132175), loss = 37.4454713120775, cost = 0.6153653956375678), PopMember(tree = (-2.624677401371878), loss = 93.14249562652165, cost = 1.5306702429833818), PopMember(tree = (4.726471606213218), loss = 37.445471312077494, cost = 0.6153653956375676), PopMember(tree = (-14.225152686909643), loss = 400.8829931206673, cost = 6.587966796040984), PopMember(tree = (4.839218102142166), loss = 37.43275953974227, cost = 0.6151564949470909), PopMember(tree = (-14.225152686909643), loss = 400.8829931206673, cost = 6.587966796040984), PopMember(tree = (0.4105125391689608), loss = 57.046192502897384, cost = 0.9374765916710448), PopMember(tree = (-1.8007819184722527), loss = 81.52235981296995, cost = 1.3397091141282036), PopMember(tree = (4.990123033334626), loss = 37.45553183801255, cost = 0.6155307266991198)  …  PopMember(tree = (0.4105125391689608), loss = 57.046192502897384, cost = 0.9374765916710448), PopMember(tree = (-2.624677401371878), loss = 93.14249562652165, cost = 1.5306702429833818), PopMember(tree = (4.726471606213217), loss = 37.445471312077494, cost = 0.6153653956375676), PopMember(tree = (0.07574350927903001), loss = 60.12344973621338, cost = 0.9880471292689331), PopMember(tree = (4.839218102079616), loss = 37.432759539742264, cost = 0.6151564949470908), PopMember(tree = (4.726471606213217), loss = 37.445471312077494, cost = 0.6153653956375676), PopMember(tree = (4.726471606213218), loss = 37.445471312077494, cost = 0.6153653956375676), PopMember(tree = (25.616397746093867), loss = 469.12395349844724, cost = 7.709414172990299), PopMember(tree = (4.7264716062132175), loss = 37.4454713120775, cost = 0.6153653956375678), PopMember(tree = (0.5983306326457661), loss = 55.4178860683342, cost = 0.9107175898955486)], 27), Population{Float64, Float64, Expression{Float64, Node{Float64, 2}, @NamedTuple{operators::OperatorEnum{Tuple{Tuple{typeof(cos)}, Tuple{typeof(+), typeof(-), typeof(*), typeof(/)}}}, variable_names::Vector{String}}}, PopMember{Float64, Float64, Expression{Float64, Node{Float64, 2}, @NamedTuple{operators::OperatorEnum{Tuple{Tuple{typeof(cos)}, Tuple{typeof(+), typeof(-), typeof(*), typeof(/)}}}, variable_names::Vector{String}}}}}(PopMember{Float64, Float64, Expression{Float64, Node{Float64, 2}, @NamedTuple{operators::OperatorEnum{Tuple{Tuple{typeof(cos)}, Tuple{typeof(+), typeof(-), typeof(*), typeof(/)}}}, variable_names::Vector{String}}}}[PopMember(tree = ((x4 * x2) / cos((cos(x2) * (cos(x2) * cos(x4))) * cos(x5))), loss = 90.64224621311334, cost = 1.4895820441821996), PopMember(tree = ((x2 * x2) * cos(cos(x2) * (cos(x5) * (cos(x2) * cos(x4))))), loss = 1.0948809013366807, cost = 0.01799287858902591), PopMember(tree = ((x2 / cos(cos(x2) * ((cos(x2) * cos(x4)) * cos(x5)))) * x2), loss = 1.0752545810391554, cost = 0.0176703467064882), PopMember(tree = ((x2 * x2) / cos(cos(x2) * ((cos(x2) * cos(x4)) * cos(x5)))), loss = 1.075254581039155, cost = 0.01767034670648819), PopMember(tree = ((x2 * cos((cos(x2) * (cos(x2) * cos(x4))) * cos(x5))) * x2), loss = 1.0948809013366805, cost = 0.017992878589025908), PopMember(tree = ((x2 * cos(cos(x5) * (cos(cos(x2)) * (cos(x2) * cos(x4))))) * x2), loss = 0.859635799646201, cost = 0.014126945273162664), PopMember(tree = ((x2 * x2) + cos((cos(x2) * (cos(x2) * cos(x4))) * cos(x5))), loss = 0.9162683277735311, cost = 0.01505762385339968), PopMember(tree = ((x2 * x2) / cos((cos(x2) * (cos(x2) * cos(x4))) * cos(x5))), loss = 1.0752545810391547, cost = 0.017670346706488187), PopMember(tree = ((x2 * cos(cos(x2) * ((cos(x2) * cos(x4)) * cos(x5)))) * x2), loss = 1.0948809013366805, cost = 0.017992878589025908), PopMember(tree = (x2 * (cos(cos(x5) * ((cos(x2) * cos(x4)) * cos(x2))) * x2)), loss = 1.0948809013366805, cost = 0.017992878589025908)  …  PopMember(tree = ((x2 * x2) / cos(cos(x2) * ((cos(x2) * cos(x2)) * cos(x5)))), loss = 1.6540113513388126, cost = 0.027181427124335668), PopMember(tree = ((x2 * x2) + cos(((cos(x2) * cos(x2)) * cos(x4)) * cos(x5))), loss = 0.9162683277735311, cost = 0.01505762385339968), PopMember(tree = ((x2 * cos(cos(x5) * (x2 * (cos(x2) * cos(x4))))) * x2), loss = 101.97834630697196, cost = 1.675875432269277), PopMember(tree = ((x2 * x2) + cos((cos(x2) * (cos(x2) * cos(x4))) * cos(x5))), loss = 0.9162683277735311, cost = 0.01505762385339968), PopMember(tree = ((x2 * x2) + cos(((cos(x2) * cos(x2)) * cos(x4)) * cos(x1 + 0.2943572702581))), loss = 0.916092431490286, cost = 0.01505473323720131), PopMember(tree = (((x2 * cos(cos(x5) * (cos(x2) * (cos(x2) * cos(x4))))) * x2) + -0.1346966241196741), loss = 1.2489803722013781, cost = 0.020525293819318637), PopMember(tree = ((x2 * x2) * cos(cos(x2) * (cos(x5) * (cos(x2) * cos(x4))))), loss = 1.0948809013366807, cost = 0.01799287858902591), PopMember(tree = ((x2 * cos(cos(x5) * (cos(x2) * (x2 * cos(x4))))) * x2), loss = 101.97834630697194, cost = 1.6758754322692768), PopMember(tree = (cos(x2) * (cos(x2) * cos(x4))), loss = 59.89325105528651, cost = 0.9842641270152502), PopMember(tree = ((x2 * x2) / cos((cos(x2) * (cos(x2) * cos(x4))) * cos(cos(cos(x2) * ((cos(x2) * cos(x4)) * cos(x5)))))), loss = 0.7047395386250495, cost = 0.011581435880273343)], 27), Population{Float64, Float64, Expression{Float64, Node{Float64, 2}, @NamedTuple{operators::OperatorEnum{Tuple{Tuple{typeof(cos)}, Tuple{typeof(+), typeof(-), typeof(*), typeof(/)}}}, variable_names::Vector{String}}}, PopMember{Float64, Float64, Expression{Float64, Node{Float64, 2}, @NamedTuple{operators::OperatorEnum{Tuple{Tuple{typeof(cos)}, Tuple{typeof(+), typeof(-), typeof(*), typeof(/)}}}, variable_names::Vector{String}}}}}(PopMember{Float64, Float64, Expression{Float64, Node{Float64, 2}, @NamedTuple{operators::OperatorEnum{Tuple{Tuple{typeof(cos)}, Tuple{typeof(+), typeof(-), typeof(*), typeof(/)}}}, variable_names::Vector{String}}}}[PopMember(tree = (cos((cos(x2) * 2.2840409595678844e-8) * (cos(x2) * 0.06570514554075096)) * (x2 * x2)), loss = 0.4615391783482523, cost = 0.007584768708596951), PopMember(tree = (cos(cos(x2) * cos(x2)) * (x2 * x2)), loss = 3.3639971207016726, cost = 0.055282717684382476), PopMember(tree = (cos(((cos(x2) * 0.07055776370989085) * (cos(x2) * 0.00497839801974079)) * 0.07055776370989085) * (x2 * x2)), loss = 0.46153917848219356, cost = 0.007584768710798093), PopMember(tree = (cos((cos(x2) * 0.07055776370989085) * (cos(x2 * 0.07055776370989085) * 0.07055776370989085)) * (x2 * x2)), loss = 0.4615479167493468, cost = 0.007584912312334822), PopMember(tree = (cos(((cos(x2) * 0.07055776370989085) * (cos(x2) * 0.07055776370989085)) * 0.07055776370989085) * (x2 * 0.07055776370989085)), loss = 60.99672094975005, cost = 1.002398154025392), PopMember(tree = (cos(cos(x2) * ((cos(x2) * x2) * 0.00497839801974079)) * (x2 * x2)), loss = 0.46159741902156526, cost = 0.007585725814856256), PopMember(tree = ((cos(((cos(x2) * 0.07055776370989085) * (cos(x2) * 0.07055776370989085)) * 0.07055776370989085) * x2) * x2), loss = 0.461539205252792, cost = 0.007584769150736471), PopMember(tree = (cos(cos(x2) * 0.0003503906262442709) * (x2 * x2)), loss = 0.46153922384800516, cost = 0.00758476945632351), PopMember(tree = (cos(((cos(x2) * 1.9913618107741054e-7) * cos(x2 * 0.09476144743326635)) * 0.04952926165207832) * (x2 * x2)), loss = 0.4615391783482523, cost = 0.007584768708596951), PopMember(tree = (cos(cos(x2) * (cos(x2) * 0.00497839801974079)) * (x2 * x2)), loss = 0.4615445844592068, cost = 0.007584857550678245)  …  PopMember(tree = (cos(((cos(x2) * 0.07055776370989085) * (cos(x2) * 0.07055776370989085)) * 0.07055776370989085) * (x2 * x2)), loss = 0.461539205252792, cost = 0.007584769150736471), PopMember(tree = (cos(((cos(x2) * 0.07055776370989085) * (cos(x2) * 2.478444684295902e-5)) * 0.07055776370989085) * (x2 * x2)), loss = 0.4615391783482556, cost = 0.007584768708597004), PopMember(tree = (cos(cos(x2) * (0.07055776370989085 - (cos(x2) * 0.00497839801974079))) * (x2 * x2)), loss = 0.46365018806681485, cost = 0.0076194602823744986), PopMember(tree = (cos(((cos(x2) * x2) * 0.07055776370989085) * (cos(x2) * 0.07055776370989085)) * (x2 * x2)), loss = 0.46159741902156526, cost = 0.007585725814856256), PopMember(tree = (cos(cos(x2) * (cos(x2 * 0.07055776370989085) * 0.00497839801974079)) * (x2 * x2)), loss = 0.4615479167493468, cost = 0.007584912312334822), PopMember(tree = (cos(((cos(x2) * 0.07055776370989085) * (cos(x2) * 0.07055776370989085)) * 0.07055776370989085) * (x2 * x2)), loss = 0.461539205252792, cost = 0.007584769150736471), PopMember(tree = (cos(cos(x2) * (cos(x2) * 0.0003512646311306592)) * (x2 * x2)), loss = 0.461539205252792, cost = 0.007584769150736471), PopMember(tree = (cos((cos(x2) * 0.00497839801974079) * (cos(x2) * 0.07055776370989085)) * (x2 * x2)), loss = 0.461539205252792, cost = 0.007584769150736471), PopMember(tree = (cos(cos(x2) * (cos(x2) * 0.0003512646311306592)) * (x2 * x2)), loss = 0.461539205252792, cost = 0.007584769150736471), PopMember(tree = (cos(cos(x2) * 2.431763134770875e-10) * (x2 * x2)), loss = 0.4615391783482523, cost = 0.007584768708596951)], 27), Population{Float64, Float64, Expression{Float64, Node{Float64, 2}, @NamedTuple{operators::OperatorEnum{Tuple{Tuple{typeof(cos)}, Tuple{typeof(+), typeof(-), typeof(*), typeof(/)}}}, variable_names::Vector{String}}}, PopMember{Float64, Float64, Expression{Float64, Node{Float64, 2}, @NamedTuple{operators::OperatorEnum{Tuple{Tuple{typeof(cos)}, Tuple{typeof(+), typeof(-), typeof(*), typeof(/)}}}, variable_names::Vector{String}}}}}(PopMember{Float64, Float64, Expression{Float64, Node{Float64, 2}, @NamedTuple{operators::OperatorEnum{Tuple{Tuple{typeof(cos)}, Tuple{typeof(+), typeof(-), typeof(*), typeof(/)}}}, variable_names::Vector{String}}}}[PopMember(tree = (cos(cos(x2) * (cos((cos(x2) + x2) / (cos(x2) * x2)) / x2))), loss = 52.185743792105086, cost = 0.85760172725912), PopMember(tree = (cos((cos(x2) * cos((cos(x2) + x2) / (cos(x2) * (cos(x2) * cos((cos(x2) + x2) / (cos(x2) * x2)))))) / x2)), loss = 52.42154663436321, cost = 0.8614768262826923), PopMember(tree = (cos((cos(x2) / x2) * cos((cos(x2) + ((cos(x2) * cos((cos(x2) + x2) / (cos(x2) * x2))) / x2)) / (cos(x2) * x2)))), loss = 52.39943621625879, cost = 0.8611134716310405), PopMember(tree = (cos((cos(x2) * (cos((cos(x2) + x2) / (cos(x2) * x2)) / x2)) / x2)), loss = 52.259872179581826, cost = 0.8588199264936129), PopMember(tree = (cos(cos((cos(x2) * cos((cos(x2) + x2) / (cos(x2) * x2))) / x2))), loss = 55.9143430332745, cost = 0.9188761849390293), PopMember(tree = (cos((cos(x2) * cos((cos(x2) + x2) / (cos(x2) * x2))) / x2)), loss = 52.185743792105086, cost = 0.85760172725912), PopMember(tree = (cos(cos(x2) * cos((cos(x2) + x2) / (cos(x2) * x2)))), loss = 52.58543322582441, cost = 0.8641700795296259), PopMember(tree = (cos((cos(x2) * cos((((cos(x2) * cos((cos(x2) + x2) / (cos(x2) * x2))) / x2) + x2) / (cos(x2) * x2))) / x2)), loss = 52.28381119815156, cost = 0.8592133317070383), PopMember(tree = (cos((cos(x2) * cos(cos(x2 + x2) / (cos(x2) * x2))) / x2)), loss = 52.4437870198487, cost = 0.8618423167714979), PopMember(tree = (cos(cos(x2) * (cos((cos(x2) + x2) / (cos(x2) * x2)) / x2)) + 1.6353140290626011), loss = 41.2682678831607, cost = 0.6781878583274101)  …  PopMember(tree = (cos(cos(x2) * x2)), loss = 65.47370472243959, cost = 1.0759712936871564), PopMember(tree = (cos((cos(x2) / x2) * cos(((cos(x2) + x2) / cos(x2)) * x2))), loss = 52.36465888822499, cost = 0.8605419535415395), PopMember(tree = (cos((cos(x2) / x2) * cos(cos(x2) * ((cos(x2) + x2) / x2)))), loss = 52.22618432030865, cost = 0.858266312341529), PopMember(tree = (cos((cos(x2) / x2) * cos((cos(x3) + x2) / (cos(x2) * x2)))), loss = 52.20907686512967, cost = 0.8579851745815892), PopMember(tree = (cos(cos(x2 * cos((cos(x2) + x2) / (cos(x2) * x2))) / x2)), loss = 52.503825246468544, cost = 0.8628289633747518), PopMember(tree = (cos(x2 / x2)), loss = 55.91343656285231, cost = 0.9188612883304292), PopMember(tree = (cos(x2)), loss = 64.95490389996957, cost = 1.0674455077325435), PopMember(tree = (cos((cos(x2) * cos((cos(x2) + x2) / (cos(x2) * x2))) / x2) * 1.7624017006263737), loss = 46.61195891847473, cost = 0.7660041531392834), PopMember(tree = (cos((cos(x2) * cos((cos(x2) + x2) / (cos(x2) * -0.646940690887757))) / x2)), loss = 52.25364326643771, cost = 0.858717562777334), PopMember(tree = (cos(cos(x2))), loss = 54.220286631894176, cost = 0.8910366718780327)], 27), Population{Float64, Float64, Expression{Float64, Node{Float64, 2}, @NamedTuple{operators::OperatorEnum{Tuple{Tuple{typeof(cos)}, Tuple{typeof(+), typeof(-), typeof(*), typeof(/)}}}, variable_names::Vector{String}}}, PopMember{Float64, Float64, Expression{Float64, Node{Float64, 2}, @NamedTuple{operators::OperatorEnum{Tuple{Tuple{typeof(cos)}, Tuple{typeof(+), typeof(-), typeof(*), typeof(/)}}}, variable_names::Vector{String}}}}}(PopMember{Float64, Float64, Expression{Float64, Node{Float64, 2}, @NamedTuple{operators::OperatorEnum{Tuple{Tuple{typeof(cos)}, Tuple{typeof(+), typeof(-), typeof(*), typeof(/)}}}, variable_names::Vector{String}}}}[PopMember(tree = (x5 - x5), loss = 60.850791379455124, cost = 1.0), PopMember(tree = (cos(x5 - x5) - (x5 - cos(cos(x5)))), loss = 46.526589640374496, cost = 0.7646012251548652), PopMember(tree = (cos(x5 - x5) - (x5 - cos(cos(x5)))), loss = 46.526589640374496, cost = 0.7646012251548652), PopMember(tree = ((cos(x5 - x5) - (x5 - cos(cos(x5)))) - x3), loss = 49.09177765636503, cost = 0.8067566015737923), PopMember(tree = ((x5 - x5) - (x5 - cos(cos(x5)))), loss = 53.288193284405104, cost = 0.8757189853474385), PopMember(tree = (cos(x5 - x5) - ((x5 - cos(cos(x5))) - cos(cos(x5)))), loss = 42.909945581170916, cost = 0.7051665986329058), PopMember(tree = (cos(x5 - x5) - (cos(x5 - x5) - cos(cos(x5)))), loss = 54.252304514494675, cost = 0.8915628422346488), PopMember(tree = (cos(x5 - x5) - (x5 - cos(cos(x5)))), loss = 46.526589640374496, cost = 0.7646012251548652), PopMember(tree = (x5 - (x5 - cos(cos(x5)))), loss = 54.252304514494675, cost = 0.8915628422346488), PopMember(tree = (cos(x5 - x5) - (x5 - cos(cos(x1 + -6.633599556681141)))), loss = 46.14926357698959, cost = 0.7584003844618993)  …  PopMember(tree = (cos(x5 - x5) - x5), loss = 51.36239187103989, cost = 0.8440710581848114), PopMember(tree = ((cos(x5 - x5) - (x5 - cos(cos(x5)))) - -2.880801821738655), loss = 38.22757050264778, cost = 0.628218132189394), PopMember(tree = (cos(x5 - x5) - cos(x5 - cos(x5))), loss = 52.01161040870759, cost = 0.8547400819222233), PopMember(tree = (cos(x5 - x5) - (x5 - cos(cos(x5)))), loss = 46.526589640374496, cost = 0.7646012251548652), PopMember(tree = (x5), loss = 69.80826245031678, cost = 1.1472038550000836), PopMember(tree = (cos(x5 - x5) - (x5 - cos(cos(x5)))), loss = 46.526589640374496, cost = 0.7646012251548652), PopMember(tree = (cos(x5 - x5) - (x5 - cos(cos(x5)))), loss = 46.526589640374496, cost = 0.7646012251548652), PopMember(tree = (cos(x5 - x5) - (x5 - cos(cos(x5)))), loss = 46.526589640374496, cost = 0.7646012251548652), PopMember(tree = (cos(x5 - x5) - (x5 - cos(cos(x5)))), loss = 46.526589640374496, cost = 0.7646012251548652), PopMember(tree = (cos(cos(x5 - x5) - (x5 - cos(cos(x5)))) - (x5 - cos(cos(x5)))), loss = 53.03626769284572, cost = 0.8715789308658392)], 27), Population{Float64, Float64, Expression{Float64, Node{Float64, 2}, @NamedTuple{operators::OperatorEnum{Tuple{Tuple{typeof(cos)}, Tuple{typeof(+), typeof(-), typeof(*), typeof(/)}}}, variable_names::Vector{String}}}, PopMember{Float64, Float64, Expression{Float64, Node{Float64, 2}, @NamedTuple{operators::OperatorEnum{Tuple{Tuple{typeof(cos)}, Tuple{typeof(+), typeof(-), typeof(*), typeof(/)}}}, variable_names::Vector{String}}}}}(PopMember{Float64, Float64, Expression{Float64, Node{Float64, 2}, @NamedTuple{operators::OperatorEnum{Tuple{Tuple{typeof(cos)}, Tuple{typeof(+), typeof(-), typeof(*), typeof(/)}}}, variable_names::Vector{String}}}}[PopMember(tree = ((cos(cos(x2)) - (cos(x2) - 3.207626774057074)) * 1.237220081397719), loss = 32.99578472498467, cost = 0.5422408480972515), PopMember(tree = ((cos(cos(x3)) - (cos(x2) - 3.207626774057074)) * 1.237220081397719), loss = 32.65489124388734, cost = 0.536638727346322), PopMember(tree = ((cos(cos(x3)) - -1.1101099337385592) * 2.5760730817925714), loss = 37.076722356730684, cost = 0.6093055080504474), PopMember(tree = (cos(cos(x3)) - ((cos(x2) - 3.207626774057074) * 1.237220081397719)), loss = 32.735692189783705, cost = 0.5379665810038448), PopMember(tree = ((cos(cos(x3)) - 1.237220081397719) * 1.237220081397719), loss = 66.79387180169496, cost = 1.0976664442238688), PopMember(tree = (cos(x2) * 1.237220081397719), loss = 66.08561819268384, cost = 1.0860272593758926), PopMember(tree = (cos(cos(x3)) - ((cos(x2) - 3.207626774057074) * 1.237220081397719)), loss = 32.735692189783705, cost = 0.5379665810038448), PopMember(tree = ((cos(cos(x3)) - (cos(x2) - ((cos(x2) - 3.207626774057074) + 1.970406692659355))) * 1.237220081397719), loss = 66.79387180169496, cost = 1.0976664442238688), PopMember(tree = ((cos(cos(x3)) - (cos(x2) - ((cos(x2) - 3.207626774057074) + 1.970406692659355))) * 1.237220081397719), loss = 66.79387180169496, cost = 1.0976664442238688), PopMember(tree = ((cos(cos(x3)) - (cos(x2) - ((cos(cos(x3)) - (cos(x2) - 3.207626774057074)) * 1.237220081397719))) * 1.237220081397719), loss = 32.80537653695729, cost = 0.539111748479795)  …  PopMember(tree = ((cos(cos(x3)) - (cos(x2) - 0.5152149858147195)) * 4.0772774338423785), loss = 28.038544995738324, cost = 0.4607753549316188), PopMember(tree = ((cos(cos(x3)) - (cos(x2) - 3.207626774057074)) * 1.237220081397719), loss = 32.65489124388734, cost = 0.536638727346322), PopMember(tree = ((cos(cos(x3)) - (cos(cos(x3)) - (cos(x2) - 3.207626774057074))) * 1.237220081397719), loss = 119.45495155638582, cost = 1.9630796715770742), PopMember(tree = ((cos(x2) - 3.207626774057074) * 1.237220081397719), loss = 119.45495155638582, cost = 1.9630796715770742), PopMember(tree = ((cos(cos(x3)) - (cos(cos(x3)) - (cos(x2) - 3.207626774057074))) * 1.237220081397719), loss = 119.45495155638582, cost = 1.9630796715770742), PopMember(tree = ((cos(cos(x3)) - (cos(x2) - (x2 + 12.874747599122767))) * 0.3514263037636686), loss = 37.07645108438138, cost = 0.6093010500583136), PopMember(tree = ((cos(cos(x3)) - (cos(x2) - 3.207626774057074)) * 1.237220081397719), loss = 32.65489124388734, cost = 0.536638727346322), PopMember(tree = ((cos(cos(x3)) - 1.237220081397719) * 1.237220081397719), loss = 66.79387180169496, cost = 1.0976664442238688), PopMember(tree = (3.207626774057074), loss = 40.09484980149406, cost = 0.6589043279892521), PopMember(tree = ((cos(cos(x3)) - (cos(x2) - 3.207626774057074)) * 1.237220081397719), loss = 32.65489124388734, cost = 0.536638727346322)], 27), Population{Float64, Float64, Expression{Float64, Node{Float64, 2}, @NamedTuple{operators::OperatorEnum{Tuple{Tuple{typeof(cos)}, Tuple{typeof(+), typeof(-), typeof(*), typeof(/)}}}, variable_names::Vector{String}}}, PopMember{Float64, Float64, Expression{Float64, Node{Float64, 2}, @NamedTuple{operators::OperatorEnum{Tuple{Tuple{typeof(cos)}, Tuple{typeof(+), typeof(-), typeof(*), typeof(/)}}}, variable_names::Vector{String}}}}}(PopMember{Float64, Float64, Expression{Float64, Node{Float64, 2}, @NamedTuple{operators::OperatorEnum{Tuple{Tuple{typeof(cos)}, Tuple{typeof(+), typeof(-), typeof(*), typeof(/)}}}, variable_names::Vector{String}}}}[PopMember(tree = (cos((cos(cos(cos(cos(x4 * x4) * x1))) / x2) / (x2 + x2))), loss = 52.2226447108767, cost = 0.8582081436743398), PopMember(tree = (cos((cos(cos(cos(x4 * x4)) * x1) / x2) / (x2 + x2))), loss = 52.390159976614434, cost = 0.8609610292480563), PopMember(tree = (cos(cos(cos(cos(cos(x4 * x4)) * x1) / x2) / (x2 + x2))), loss = 52.23542296981318, cost = 0.8584181369816872), PopMember(tree = (cos((cos(cos(cos(cos(x4 * x4)) * x1)) / x2) / (x2 * x2))), loss = 52.21318018010708, cost = 0.8580526069827855), PopMember(tree = (cos((cos(cos(cos(cos(x4 * x4)) * x2)) / x2) / (x2 + x2))), loss = 52.18383128364225, cost = 0.8575702977835211), PopMember(tree = (cos((cos(cos(cos(x4 * x4) * x1)) / x2) / (x2 + x2))), loss = 52.21523319957733, cost = 0.858086345565698), PopMember(tree = (cos((cos(cos(cos(cos(x4 * x4)) * x1)) / x2) / ((x5 * x5) * x2))), loss = 54.14673083546719, cost = 0.8898278823987258), PopMember(tree = (cos(cos(cos(cos(cos(x4 * x4)) * x1) / x2) / (x2 * x2))), loss = 52.23580418546869, cost = 0.8584244017425369), PopMember(tree = (cos((cos(cos(cos(cos(x4 * x4)) * x1)) / x2) / (x2 + x1))), loss = 52.36603685007354, cost = 0.8605645984705095), PopMember(tree = (cos((cos(x1) / x2) / (x2 + x2))), loss = 52.30948291335967, cost = 0.8596352114332694)  …  PopMember(tree = (cos((cos(cos(cos(cos(x4 * x4)) * x1)) / x2) / (x2 + x2))), loss = 52.11323273593578, cost = 0.8564101066651143), PopMember(tree = (cos((cos(cos(cos(cos(x4 * x4)) * cos(cos(cos(x4 * x4)) * x1))) / x2) / (x2 + x2))), loss = 52.28698567500402, cost = 0.8592654999168593), PopMember(tree = (cos(cos(cos(x4 * x4)) / (x2 + x2))), loss = 52.254933020270116, cost = 0.8587387581275203), PopMember(tree = (cos((cos(cos(cos(x4 * x4)) * cos(x1)) / x2) / (x2 + x2))), loss = 52.191547323175875, cost = 0.8576971003995382), PopMember(tree = (cos((cos(cos(cos(cos(x4 * -0.10054247534994382)) * x1)) / x2) / (x2 + x2))), loss = 52.12955993513105, cost = 0.8566784219791002), PopMember(tree = (cos(x4 / (x2 + x2))), loss = 52.76592138024782, cost = 0.8671361568859238), PopMember(tree = (cos((cos(cos(cos(cos(x4 * x4)) * x1)) / x2) / (x2 + x2))), loss = 52.11323273593578, cost = 0.8564101066651143), PopMember(tree = (cos((cos(cos(cos(cos(x4 * x4)) * x1)) / x2) / (x2 * x2))), loss = 52.21318018010708, cost = 0.8580526069827855), PopMember(tree = (cos((cos(cos(cos(cos(x4 * (cos(cos(cos(cos(x4 * x4)) * x1)) / x2))) * x1)) / x2) / (x2 + x2))), loss = 52.17992996734999, cost = 0.8575061849559996), PopMember(tree = (cos((cos(cos(cos(cos(x4 * x4)) * x2)) / x2) / (x2 + x2))), loss = 52.18383128364225, cost = 0.8575702977835211)], 27)  …  Population{Float64, Float64, Expression{Float64, Node{Float64, 2}, @NamedTuple{operators::OperatorEnum{Tuple{Tuple{typeof(cos)}, Tuple{typeof(+), typeof(-), typeof(*), typeof(/)}}}, variable_names::Vector{String}}}, PopMember{Float64, Float64, Expression{Float64, Node{Float64, 2}, @NamedTuple{operators::OperatorEnum{Tuple{Tuple{typeof(cos)}, Tuple{typeof(+), typeof(-), typeof(*), typeof(/)}}}, variable_names::Vector{String}}}}}(PopMember{Float64, Float64, Expression{Float64, Node{Float64, 2}, @NamedTuple{operators::OperatorEnum{Tuple{Tuple{typeof(cos)}, Tuple{typeof(+), typeof(-), typeof(*), typeof(/)}}}, variable_names::Vector{String}}}}[PopMember(tree = (cos(cos(cos(x3 / x3)) / x2) * (4.432963581981715 / cos(cos(x3 / x3)))), loss = 31.963431555148, cost = 0.5252755277384892), PopMember(tree = ((cos(cos(cos(x3) / x3) / x2) * 4.432963581981715) / cos(cos(x3 / x3))), loss = 32.83551125450112, cost = 0.5396069715797859), PopMember(tree = (cos(cos(cos(x3 / x3)) / x2) * (4.432963581981715 / cos(cos(x3 / x3)))), loss = 31.963431555148, cost = 0.5252755277384892), PopMember(tree = (cos(cos(cos(x3 / x3)) / x2) * (4.432963581981715 / cos(cos(x3 / x3)))), loss = 31.963431555148, cost = 0.5252755277384892), PopMember(tree = ((cos(cos(cos(x3 / x3)) / x2) * 4.432963581981715) / cos(cos(x3 / x3))), loss = 31.963431555148, cost = 0.5252755277384892), PopMember(tree = ((cos(cos(cos(x3 / x3)) / (x2 - 0.3053509763586243)) / cos(cos(x3 / x3))) * 5.985972065413886), loss = 29.738065056270443, cost = 0.48870465580026656), PopMember(tree = (cos((x3 / x3) / x2) * (4.432963581981715 / cos(cos(x3 / x3)))), loss = 32.17554980848112, cost = 0.5287614027538261), PopMember(tree = ((cos(cos(cos(x3 / x3)) / x2) * 4.432963581981715) / cos(cos(x3 / x3))), loss = 31.963431555148, cost = 0.5252755277384892), PopMember(tree = ((cos(cos(cos(x3 / x1)) / x2) * 4.432963581981715) / cos(cos(x3 / x3))), loss = 32.381754064755526, cost = 0.5321500892704657), PopMember(tree = (cos(cos(cos(cos(cos(x3 / x3)))) / x2) * (4.432963581981715 / cos(cos(x3 / x3)))), loss = 31.93521516449911, cost = 0.5248118297321159)  …  PopMember(tree = ((cos(cos(cos(x3 / x3)) / x2) * 4.432963581981715) / cos(cos(x3 / x3))), loss = 31.963431555148, cost = 0.5252755277384892), PopMember(tree = ((cos(cos(cos(x3 / (x3 + -0.6409131677522681))) / x2) * 4.432963581981715) / cos(cos(x3 / x3))), loss = 32.668376631394615, cost = 0.5368603413500443), PopMember(tree = ((cos(cos(cos(x3 / (x2 - 0.2326087275500253))) / x2) * 4.432963581981715) / cos(cos(x3 / x3))), loss = 32.38341175661812, cost = 0.5321773311817871), PopMember(tree = ((cos(cos(cos(x3 / x3)) / x2) * 4.432963581981715) / cos(cos(x3 / x3))), loss = 31.963431555148, cost = 0.5252755277384892), PopMember(tree = ((cos(cos(cos(x3 / x3)) / x2) * 4.432963581981715) / cos(cos(x3 / x3))), loss = 31.963431555148, cost = 0.5252755277384892), PopMember(tree = ((cos(cos(cos(x3 / x3)) / x2) * 4.432963581981715) / cos(cos(x3 / x3))), loss = 31.963431555148, cost = 0.5252755277384892), PopMember(tree = ((cos(cos(cos(x3 / x3)) / x2) * 4.432963581981715) / cos(cos(x3 / x3))), loss = 31.963431555148, cost = 0.5252755277384892), PopMember(tree = ((cos(cos(cos(x3 / x3) / x2)) * 4.432963581981715) / cos(cos(x3 / x3))), loss = 44.55326710193891, cost = 0.732172352929847), PopMember(tree = ((cos(cos(cos(x3 / x3)) / x2) * 4.432963581981715) / cos(cos(x3 / x3))), loss = 31.963431555148, cost = 0.5252755277384892), PopMember(tree = ((cos(cos(cos(x3 / x3)) / x2) / cos(cos(x3 / x3))) * 4.432963581981715), loss = 31.963431555148, cost = 0.5252755277384892)], 27), Population{Float64, Float64, Expression{Float64, Node{Float64, 2}, @NamedTuple{operators::OperatorEnum{Tuple{Tuple{typeof(cos)}, Tuple{typeof(+), typeof(-), typeof(*), typeof(/)}}}, variable_names::Vector{String}}}, PopMember{Float64, Float64, Expression{Float64, Node{Float64, 2}, @NamedTuple{operators::OperatorEnum{Tuple{Tuple{typeof(cos)}, Tuple{typeof(+), typeof(-), typeof(*), typeof(/)}}}, variable_names::Vector{String}}}}}(PopMember{Float64, Float64, Expression{Float64, Node{Float64, 2}, @NamedTuple{operators::OperatorEnum{Tuple{Tuple{typeof(cos)}, Tuple{typeof(+), typeof(-), typeof(*), typeof(/)}}}, variable_names::Vector{String}}}}[PopMember(tree = (cos((cos(x1) * 0.5414622933375587) * ((cos(x1) * 0.011573360981549714) * cos(x3)))), loss = 52.17237365841751, cost = 0.8573820072951807), PopMember(tree = (cos(cos((cos(x1) * 0.5414622933375587) * (cos(x3) * -0.05252526289447298)) * (cos(x3) * -0.05252526289447298))), loss = 52.177292093939215, cost = 0.8574628350939686), PopMember(tree = (cos((cos(x1) * cos(cos(cos(x1) * (cos(x3) * -0.05252526289447298)))) * (cos(x3) * -0.05252526289447298))), loss = 52.17295090546086, cost = 0.8573914935652893), PopMember(tree = (cos(cos(x3) * -1.5068727218087085e-10)), loss = 52.172355175250885, cost = 0.8573817035494741), PopMember(tree = (cos((cos(x1) * (cos(x3) * -0.05252526289447298)) * -0.2203389444199723)), loss = 52.172454090826875, cost = 0.8573833290924415), PopMember(tree = (cos((cos(x1) * (cos(x3) * 0.5414622933375587)) * 0.5414622933375587)), loss = 52.23584337970784, cost = 0.8584250458465537), PopMember(tree = (cos((cos(x1) * 0.5376237257215238) * (cos(x3) * -1.4903414639372183e-9))), loss = 52.172355175250885, cost = 0.8573817035494741), PopMember(tree = (cos((cos(x1) * cos(x3 * -0.05252526289447298)) * 0.5414622933375587)), loss = 52.644755723494114, cost = 0.8651449641009666), PopMember(tree = (cos((cos(x1) * (cos(x3) * -0.05252526289447298)) * ((cos(x1) * 0.5414622933375587) * (cos(x3) * -0.05252526289447298)))), loss = 52.17235578780111, cost = 0.857381713615904), PopMember(tree = (0.8569559469767187), loss = 53.29117141188628, cost = 0.8757679268223754)  …  PopMember(tree = (cos((cos(x1) * 0.5414622933375587) * (cos(x3) * 0.049188735155781774))), loss = 52.17287903373615, cost = 0.8573903124512384), PopMember(tree = (cos((cos(x1) * (cos(x3) * -0.05252526289447298)) * 0.23838392723874693)), loss = 52.17247095593664, cost = 0.8573836062475841), PopMember(tree = (cos((cos(x1) * -0.028692982903330992) * cos(x3))), loss = 52.17296316708121, cost = 0.857391695068344), PopMember(tree = (cos(x3)), loss = 60.75432943941716, cost = 0.9984147792025179), PopMember(tree = (cos((cos(x1) * (cos(x3) * -0.5855729282682799)) * 0.5414622933375587)), loss = 52.24661086511899, cost = 0.8586019948256394), PopMember(tree = (0.9995955976814772), loss = 52.17546051619572, cost = 0.8574327356046773), PopMember(tree = (cos((cos(x1) * -2.0713712340570293e-10) * cos(x3))), loss = 52.172355175250885, cost = 0.8573817035494741), PopMember(tree = (cos(cos(x1) * (cos(x3 * -0.05252526289447298) * 0.5414622933375587))), loss = 52.644755723494114, cost = 0.8651449641009666), PopMember(tree = (cos((cos(x1) * (cos(x3) * -0.05252526289447298)) * 0.5414622933375587)), loss = 52.17295251200405, cost = 0.8573915199666418), PopMember(tree = (cos((cos(x1) * -0.05252526289447298) * (cos(x3) * -0.05252526289447298))), loss = 52.17236079631454, cost = 0.8573817959240106)], 27), Population{Float64, Float64, Expression{Float64, Node{Float64, 2}, @NamedTuple{operators::OperatorEnum{Tuple{Tuple{typeof(cos)}, Tuple{typeof(+), typeof(-), typeof(*), typeof(/)}}}, variable_names::Vector{String}}}, PopMember{Float64, Float64, Expression{Float64, Node{Float64, 2}, @NamedTuple{operators::OperatorEnum{Tuple{Tuple{typeof(cos)}, Tuple{typeof(+), typeof(-), typeof(*), typeof(/)}}}, variable_names::Vector{String}}}}}(PopMember{Float64, Float64, Expression{Float64, Node{Float64, 2}, @NamedTuple{operators::OperatorEnum{Tuple{Tuple{typeof(cos)}, Tuple{typeof(+), typeof(-), typeof(*), typeof(/)}}}, variable_names::Vector{String}}}}[PopMember(tree = (cos(x4 * x4) + 5.016708048145385), loss = 36.83407325820458, cost = 0.6053179001159344), PopMember(tree = (cos(x4 * 0.09843134034173405) + 5.016708048145385), loss = 38.75170989364014, cost = 0.6368316502572844), PopMember(tree = (cos((x4 * x4) + 5.016708048145385)), loss = 58.04909639217315, cost = 0.9539579531544449), PopMember(tree = (cos(cos(x4 * x4)) + 5.016708048145385), loss = 38.57032869984266, cost = 0.6338508970133961), PopMember(tree = (cos(x4 * x4) + 5.016708048145385), loss = 36.83407325820458, cost = 0.6053179001159344), PopMember(tree = (cos(x4 * 5.016708048145385) + 5.016708048145385), loss = 37.573922611833616, cost = 0.6174763180568854), PopMember(tree = ((cos(x4) * x4) + 5.016708048145385), loss = 37.97842073401685, cost = 0.624123694582539), PopMember(tree = (x4 + cos(x4 * x4)), loss = 62.27717966821164, cost = 1.0234407516553368), PopMember(tree = (x4 + 5.016708048145385), loss = 42.348482901238256, cost = 0.6959397230704916), PopMember(tree = (cos(x4 * x1) + 5.016708048145385), loss = 38.29732339483242, cost = 0.6293644261093806)  …  PopMember(tree = (cos((x4 * x4) * x4) + 5.016708048145385), loss = 36.60379717791729, cost = 0.6015336259090251), PopMember(tree = (cos(cos(x4 * x4) + 5.016708048145385) + 5.016708048145385), loss = 37.1678357832185, cost = 0.6108028333016449), PopMember(tree = ((cos(x4) * x4) + 5.016708048145385), loss = 37.97842073401685, cost = 0.624123694582539), PopMember(tree = (cos(cos(x4) * x4) + 5.016708048145385), loss = 38.27254322988763, cost = 0.6289571977992299), PopMember(tree = (cos(x4 * x4) + 5.016708048145385), loss = 36.83407325820458, cost = 0.6053179001159344), PopMember(tree = (cos(x4 * x4) + 5.016708048145385), loss = 36.83407325820458, cost = 0.6053179001159344), PopMember(tree = ((cos(x4) * x4) + 5.016708048145385), loss = 37.97842073401685, cost = 0.624123694582539), PopMember(tree = ((x4 * x4) + 5.016708048145385), loss = 85.57842460116595, cost = 1.4063650227244135), PopMember(tree = (cos(cos(x4 * x4) * x4) + 5.016708048145385), loss = 38.49712309468947, cost = 0.6326478624514182), PopMember(tree = (cos((1.1864481163141942 / x3) * x4) + 5.016708048145385), loss = 36.61822359671293, cost = 0.6017707044821808)], 27), Population{Float64, Float64, Expression{Float64, Node{Float64, 2}, @NamedTuple{operators::OperatorEnum{Tuple{Tuple{typeof(cos)}, Tuple{typeof(+), typeof(-), typeof(*), typeof(/)}}}, variable_names::Vector{String}}}, PopMember{Float64, Float64, Expression{Float64, Node{Float64, 2}, @NamedTuple{operators::OperatorEnum{Tuple{Tuple{typeof(cos)}, Tuple{typeof(+), typeof(-), typeof(*), typeof(/)}}}, variable_names::Vector{String}}}}}(PopMember{Float64, Float64, Expression{Float64, Node{Float64, 2}, @NamedTuple{operators::OperatorEnum{Tuple{Tuple{typeof(cos)}, Tuple{typeof(+), typeof(-), typeof(*), typeof(/)}}}, variable_names::Vector{String}}}}[PopMember(tree = (((x3 / x3) + (cos((x5 / x3) / x3) - -1.9822233106884246)) + (x3 / x3)), loss = 37.452081451854745, cost = 0.6154740242950987), PopMember(tree = ((((x3 / x3) + cos((x5 / ((x3 / x3) - -1.9822233106884246)) / x3)) - -1.9822233106884246) + (x3 / x3)), loss = 37.288825501527356, cost = 0.6127911347775351), PopMember(tree = ((((x3 / x3) + x5) - -1.9822233106884246) + (x3 / x3)), loss = 45.56868247931457, cost = 0.7488593237047002), PopMember(tree = (cos((x5 / x3) / x3)), loss = 56.06595446419936, cost = 0.9213677126166143), PopMember(tree = ((((x3 / x3) + cos((x5 / x3) / x3)) - -1.9822233106884246) + (x3 / x3)), loss = 37.452081451854745, cost = 0.6154740242950987), PopMember(tree = (((x3 / x3) + (cos((x5 / x3) / x3) - -1.9822233106884246)) + (x3 / (x3 / x3))), loss = 44.55963855706056, cost = 0.7322770591296714), PopMember(tree = ((((x3 / x3) - -1.9822233106884246) + cos((x5 / x3) / x3)) + (x3 / x3)), loss = 37.452081451854745, cost = 0.6154740242950987), PopMember(tree = ((((x3 / x3) + cos(x3 / x3)) - -1.9822233106884246) + (x3 / x3)), loss = 37.53305367014329, cost = 0.6168046925814586), PopMember(tree = ((x3 + cos((x5 / x3) / x3)) + (x3 / x3)), loss = 54.07777833061082, cost = 0.8886947417559625), PopMember(tree = ((((x3 / x3) + cos((x5 / x3) / x3)) - -1.9822233106884246) + (x3 / x3)), loss = 37.452081451854745, cost = 0.6154740242950987)  …  PopMember(tree = ((((x3 / x3) + cos((x5 / x3) / x3)) - -1.9822233106884246) + (x3 / x3)), loss = 37.452081451854745, cost = 0.6154740242950987), PopMember(tree = (((x3 / x3) + (cos((x5 / x3) / x3) - -1.9822233106884246)) + (x3 / x3)), loss = 37.452081451854745, cost = 0.6154740242950987), PopMember(tree = ((((x3 / x3) + cos((x5 / x3) + x3)) - -1.9822233106884246) + (x3 / x3)), loss = 38.90469483513072, cost = 0.6393457497130596), PopMember(tree = (((x3 / x3) + cos((x5 / x3) / x3)) - -1.9822233106884246), loss = 39.14409952847986, cost = 0.64328004026084), PopMember(tree = (((x3 + cos((x5 / x3) / x3)) - -1.9822233106884246) + (x3 / x3)), loss = 44.55963855706056, cost = 0.7322770591296714), PopMember(tree = ((((x3 / x3) + cos((x5 / x3) / x3)) - -1.9822233106884246) + (x3 / x3)), loss = 37.452081451854745, cost = 0.6154740242950987), PopMember(tree = ((((x3 / x3) + cos((x5 / x3) / x3)) - -1.9822233106884246) + (x3 / x3)), loss = 37.452081451854745, cost = 0.6154740242950987), PopMember(tree = (((x3 / x3) + (cos((x5 / x3) / x3) - -1.9822233106884246)) + (x3 / (x5 / x3))), loss = 436.2016073571405, cost = 7.168380188140231), PopMember(tree = ((((x3 / x3) + cos((x5 / x3) / x3)) - -1.9822233106884246) + (x3 / x3)), loss = 37.452081451854745, cost = 0.6154740242950987), PopMember(tree = ((((x3 / x3) - -1.9822233106884246) + cos((x5 / (x3 / x3)) / x3)) + (x3 / x3)), loss = 38.61863843357619, cost = 0.634644801786668)], 27), Population{Float64, Float64, Expression{Float64, Node{Float64, 2}, @NamedTuple{operators::OperatorEnum{Tuple{Tuple{typeof(cos)}, Tuple{typeof(+), typeof(-), typeof(*), typeof(/)}}}, variable_names::Vector{String}}}, PopMember{Float64, Float64, Expression{Float64, Node{Float64, 2}, @NamedTuple{operators::OperatorEnum{Tuple{Tuple{typeof(cos)}, Tuple{typeof(+), typeof(-), typeof(*), typeof(/)}}}, variable_names::Vector{String}}}}}(PopMember{Float64, Float64, Expression{Float64, Node{Float64, 2}, @NamedTuple{operators::OperatorEnum{Tuple{Tuple{typeof(cos)}, Tuple{typeof(+), typeof(-), typeof(*), typeof(/)}}}, variable_names::Vector{String}}}}[PopMember(tree = (cos(cos(cos((0.7323385796794246 / (x2 / x1)) * (x2 * 0.7323385796794246)) * 1.5845049170341359))), loss = 52.98962402396006, cost = 0.8708124056025144), PopMember(tree = (cos(cos(cos((0.7323385796794246 / (x2 / x1)) * ((0.7323385796794246 / x2) * 0.7323385796794246)) * 1.5845049170341359)) / 0.7455417979402578), loss = 49.523501725678955, cost = 0.8138513995135884), PopMember(tree = (cos(cos(cos((0.37943353598519636 / x1) * ((0.37943353598519614 / x2) * 0.3794335359851957)) * 1.5745913323937681))), loss = 52.166797273196096, cost = 0.8572903669878814), PopMember(tree = (cos(cos(cos((0.7323385796794246 / (x2 / x1)) * ((0.7323385796794246 / x2) * 0.7323385796794246)) * 1.5845049170341359))), loss = 52.10036559473113, cost = 0.8561986526985683), PopMember(tree = (cos(cos(cos((0.7323385796794246 / (x2 / x1)) * ((0.7323385796794246 / x2) * 0.7323385796794246)) * 1.5845049170341359))), loss = 52.10036559473113, cost = 0.8561986526985683), PopMember(tree = (cos(cos(cos((0.7323385796794246 / (x2 / (x5 * x1))) * ((0.7323385796794246 / x2) * 0.7323385796794246)) * 1.5845049170341359))), loss = 52.19319869855283, cost = 0.8577242385080084), PopMember(tree = (cos(cos(cos(((x1 * 2.0644349503613286) / (0.7323385796794246 / x1)) * (0.536319795286877 / x2)) * 1.5845049170341359))), loss = 53.13751937068555, cost = 0.8732428644901111), PopMember(tree = (cos(cos(cos((0.7323385796794246 / (x2 / x1)) * (x2 / (x2 * 0.7323385796794246))) * 1.5845049170341359))), loss = 52.41808879881945, cost = 0.861420001458144), PopMember(tree = (cos(cos(cos((-0.5499283642446837 / (x2 / x1)) * -0.5499283642446837) * 1.5884991234334713))), loss = 52.08123359848609, cost = 0.8558842443595586), PopMember(tree = (cos(cos(cos((0.7323385796794246 / ((0.7323385796794246 / x2) / x1)) * ((0.7323385796794246 / x2) * 0.7323385796794246)) * 1.5845049170341359))), loss = 52.98962402396006, cost = 0.8708124056025144)  …  PopMember(tree = (cos(cos(cos((0.7323385796794246 / (x2 / x1)) * 0.7323385796794246) * 1.5845049170341359))), loss = 52.19682866709961, cost = 0.8577838921043626), PopMember(tree = (cos(cos(cos((0.8434858588305566 / (x2 / x1)) * ((0.7246481184106748 / (cos((8.988135284037067 / (x2 / x1)) * (x4 / (x2 * 7.741561965392834))) * 1.8585464206009115)) * 0.5878651157803662)) * 1.5864718605687806))), loss = 52.10078583739002, cost = 0.8562055588151424), PopMember(tree = (cos(cos(cos((0.7323385796794246 / (x2 / x1)) * (x2 / (x2 * 0.7323385796794246))) * 1.5845049170341359))), loss = 52.41808879881945, cost = 0.861420001458144), PopMember(tree = (cos(cos(cos((0.7323385796794246 / (x2 / x1)) * ((0.7323385796794246 / x2) * 0.7323385796794246)) * 1.5845049170341359))), loss = 52.10036559473113, cost = 0.8561986526985683), PopMember(tree = (cos(cos((0.7323385796794246 / (x2 / x1)) * ((0.7323385796794246 / x2) * 0.7323385796794246)) * -0.013708160877783754)), loss = 52.173092840723264, cost = 0.8573938260782967), PopMember(tree = (cos(cos(cos((0.8268749361007453 / (x2 / x1)) * (x1 * 0.8268749371511558)) * 1.6865093798012072))), loss = 52.43245658419474, cost = 0.861656116470777), PopMember(tree = (cos(cos(cos((0.7323385796794246 / (x2 / x1)) * 1.5845049170341359) * 1.5845049170341359))), loss = 52.56105903251927, cost = 0.8637695228112564), PopMember(tree = (cos(cos(cos(cos((0.7323385796794246 / (x2 / x1)) * ((0.7323385796794246 / x2) * 0.7323385796794246)) * 1.5845049170341359) * 1.5845049170341359))), loss = 55.97737999057668, cost = 0.9199121116028108), PopMember(tree = (cos(cos((0.7323385796794246 / (x2 / x1)) * (0.7323385796794246 / (x2 * 0.7323385796794246))))), loss = 55.84741422486677, cost = 0.9177763009951974), PopMember(tree = (cos(cos(cos((0.7323385796794246 / (x2 / x1)) * (((0.7323385796794246 / (x2 / x1)) * (0.7323385796794246 / (x2 * 0.7323385796794246))) / (x2 * 0.7323385796794246))) * 1.5845049170341359))), loss = 52.183388951291725, cost = 0.8575630286529068)], 27), Population{Float64, Float64, Expression{Float64, Node{Float64, 2}, @NamedTuple{operators::OperatorEnum{Tuple{Tuple{typeof(cos)}, Tuple{typeof(+), typeof(-), typeof(*), typeof(/)}}}, variable_names::Vector{String}}}, PopMember{Float64, Float64, Expression{Float64, Node{Float64, 2}, @NamedTuple{operators::OperatorEnum{Tuple{Tuple{typeof(cos)}, Tuple{typeof(+), typeof(-), typeof(*), typeof(/)}}}, variable_names::Vector{String}}}}}(PopMember{Float64, Float64, Expression{Float64, Node{Float64, 2}, @NamedTuple{operators::OperatorEnum{Tuple{Tuple{typeof(cos)}, Tuple{typeof(+), typeof(-), typeof(*), typeof(/)}}}, variable_names::Vector{String}}}}[PopMember(tree = (1.0035516472576258 - ((x5 - 1.5408619435567297) - (((x5 - x5) - 1.0035516472576258) * 1.0035516472576258))), loss = 47.735414919907605, cost = 0.7844666246366087), PopMember(tree = (1.5408619435567297 - ((x5 - 1.0035516472576258) - (2.0071032945152516 - (x5 - x5)))), loss = 38.093264983988476, cost = 0.6260110036440676), PopMember(tree = (1.0035516472576258 - ((x5 - 1.0035516472576258) - (((x5 - 1.0035516472576258) - x5) - 0.4662413509585219))), loss = 54.94841862017793, cost = 0.9030025308550056), PopMember(tree = (1.0035516472576258 - ((x5 - 0.4662413509585219) - (1.0035516472576258 - ((x5 - 1.0035516472576258) - x5)))), loss = 39.44652339985251, cost = 0.6482499652941363), PopMember(tree = (1.0035516472576258 - (((x5 - 1.0035516472576258) - cos(x5)) - (1.0035516472576258 - ((x5 - 1.0035516472576258) - x5)))), loss = 39.472036226701846, cost = 0.6486692339062771), PopMember(tree = (0.6532546268820374 - ((((x5 - 1.1905649227687243) - (0.65325462709083 - ((x5 - 0.65325462709083) - x5))) - 0.18701327592683076) - (0.6532546266732449 - ((x5 - 0.6532546266732449) - x5)))), loss = 38.084739333754804, cost = 0.6258708961772557), PopMember(tree = (1.0035516472576258 - ((x5 - 1.5408619435567297) - (1.0035516472576258 - ((x5 - 1.0035516472576258) - x5)))), loss = 38.093264983988476, cost = 0.6260110036440676), PopMember(tree = (1.0035516472576258 - ((x5 - 1.5408619435567297) - (x5 - 0.0))), loss = 42.698887284768944, cost = 0.7016981425682041), PopMember(tree = (1.0035516472576258 - ((x5 - 1.5408619435567297) - (1.0035516472576258 - ((x5 - 1.0035516472576258) - x5)))), loss = 38.093264983988476, cost = 0.6260110036440676), PopMember(tree = (1.0035516472576258 - ((x5 - 0.5373102962991039) - (1.0035516472576258 - ((x5 - 1.0035516472576258) - x5)))), loss = 39.28570566689535, cost = 0.6456071445631071)  …  PopMember(tree = (1.0343297965799756 - ((x5 - 1.571640092819841) - (2.0378814437401647 - (x5 - x5)))), loss = 38.084739333754804, cost = 0.6258708961772557), PopMember(tree = (1.0035516472576258 - ((x5 - 1.5408619435567297) - (1.0035516472576258 - ((x5 - 1.0035516472576258) - x5)))), loss = 38.093264983988476, cost = 0.6260110036440676), PopMember(tree = (1.0035516472576258 - ((x5 - 1.5408619435567297) - (x5 - 0.0))), loss = 42.698887284768944, cost = 0.7016981425682041), PopMember(tree = (x5 - -5.034584871069445), loss = 44.46121762534391, cost = 0.7306596449681544), PopMember(tree = (2.4733446454737735 - (x5 - x5)), loss = 43.03011675252085, cost = 0.7071414484027397), PopMember(tree = (2.0071032945152516 - x5), loss = 45.03717955241001, cost = 0.7401247959384104), PopMember(tree = (1.0035516472576258 - ((x5 - 1.5408619435567297) - (1.0035516472576258 - ((1.0035516472576258 - ((x5 - 1.5408619435567297) - (1.0035516472576258 - ((x5 - 1.0035516472576258) - x5)))) - x5)))), loss = 80.92031024046405, cost = 1.3298152481840184), PopMember(tree = (1.0266352592455499 - ((x5 - 1.5639455555002248) - (1.0266352592455499 - ((x5 - 1.0266352592455499) - x5)))), loss = 38.084739333754804, cost = 0.6258708961772557), PopMember(tree = (1.0035516472576258 - ((x5 - 1.5408619435567297) - (3.010654941772877 - x5))), loss = 47.64168508697223, cost = 0.7829263023037257), PopMember(tree = (1.0035516472576258 - ((x5 - 1.5408619435567297) - (1.0035516472576258 - ((x5 - 1.0035516472576258) - x5)))), loss = 38.093264983988476, cost = 0.6260110036440676)], 27), Population{Float64, Float64, Expression{Float64, Node{Float64, 2}, @NamedTuple{operators::OperatorEnum{Tuple{Tuple{typeof(cos)}, Tuple{typeof(+), typeof(-), typeof(*), typeof(/)}}}, variable_names::Vector{String}}}, PopMember{Float64, Float64, Expression{Float64, Node{Float64, 2}, @NamedTuple{operators::OperatorEnum{Tuple{Tuple{typeof(cos)}, Tuple{typeof(+), typeof(-), typeof(*), typeof(/)}}}, variable_names::Vector{String}}}}}(PopMember{Float64, Float64, Expression{Float64, Node{Float64, 2}, @NamedTuple{operators::OperatorEnum{Tuple{Tuple{typeof(cos)}, Tuple{typeof(+), typeof(-), typeof(*), typeof(/)}}}, variable_names::Vector{String}}}}[PopMember(tree = ((cos((x2 * x2) * cos((x2 * -0.8076232467295237) * x2)) / ((-0.8076232467295237 / x2) * -0.9540143331194691)) - -1.9080286662389383), loss = 42.377765260904, cost = 0.6964209388279522), PopMember(tree = ((cos(x2 * (x2 * -0.8076232467295237)) / x2) - -1.9080286662389383), loss = 1009.1386669288088, cost = 16.583821574907592), PopMember(tree = ((x2 / ((-0.6432066760650759 / x2) * -1.5687784107214369)) - -0.2903185776068976), loss = 0.40263243222262857, cost = 0.006616716448466242), PopMember(tree = ((cos((x2 * -0.8076232467295237) * x2) / 0.9101433477973855) - -1.9080286662389383), loss = 47.91226200158161, cost = 0.7873728659140838), PopMember(tree = ((cos((x2 * x2) * -0.8076232467295237) / ((-0.8076232467295237 / x2) * -0.9540143331194691)) - -1.9080286662389383), loss = 38.71441070558114, cost = 0.6362186888279677), PopMember(tree = ((cos(x2 * 0.770484153140447) / ((-0.8076232467295237 / x2) * -0.9540143331194691)) - -1.9080286662389383), loss = 47.66206660970543, cost = 0.7832612449112277), PopMember(tree = ((cos(x2 * (x2 * -0.8076232467295237)) / ((-0.8076232467295237 / x2) * -0.9540143331194691)) - -1.9080286662389383), loss = 38.71441070558113, cost = 0.6362186888279675), PopMember(tree = ((cos(x2 * (x2 * -5.582021293321986)) / (x2 * (-0.34484034773961325 / x2))) - -5.5587170424520815), loss = 31.921988685200926, cost = 0.524594470532698), PopMember(tree = ((cos((x2 * -0.8076232467295237) * x2) / ((-0.8076232467295237 / x2) * -0.9540143331194691)) - -1.9080286662389383), loss = 38.71441070558113, cost = 0.6362186888279675), PopMember(tree = ((cos(x2 * (x2 * -0.8076232467295237)) / (-0.8076232467295237 / (x2 * -0.9540143331194691))) - -1.9080286662389383), loss = 39.11408785041569, cost = 0.6427868391473651)  …  PopMember(tree = ((cos((x2 * -0.8076232467295237) * x2) / ((-0.8076232467295237 / x2) * -0.9540143331194691)) - -1.9080286662389383), loss = 38.71441070558113, cost = 0.6362186888279675), PopMember(tree = ((cos(x2 * (x2 * -0.8076232467295237)) / (0.770484153140447 / x2)) - -1.9080286662389383), loss = 38.71441070558113, cost = 0.6362186888279675), PopMember(tree = ((cos(x2 * (x2 * (x2 * (x2 * -3.98072889865691)))) / ((-1.7466360962124803 / x2) * -1.5885370375054249)) - -4.693669945794085), loss = 35.61331869199689, cost = 0.585256459031376), PopMember(tree = ((0.6912179357691858 / (0.770484153140447 / x2)) - -1.9080286662389383), loss = 51.25329615072136, cost = 0.8422782183902026), PopMember(tree = ((cos(x2 * ((-0.8076232467295237 / x2) * -0.8076232467295237)) / ((-0.8076232467295237 / x2) * -0.9540143331194691)) - -1.9080286662389383), loss = 52.6737938881669, cost = 0.8656221668458202), PopMember(tree = ((cos((x2 * -0.8076232467295237) * x2) / ((-0.8076232467295237 / x2) * -0.9540143331194691)) - -1.9080286662389383), loss = 38.71441070558113, cost = 0.6362186888279675), PopMember(tree = (((cos(x2 * (x2 * -0.8076232467295237)) / ((-0.8076232467295237 / x2) * -0.9540143331194691)) - -1.9080286662389383) + 0.45470091335547447), loss = 36.45519579928739, cost = 0.5990915643472741), PopMember(tree = ((-0.20611862713879736 / ((-7.803975274863338 / x2) * -7.772742101976135)) - -4.818932531138346), loss = 37.42767344786065, cost = 0.6150729119440383), PopMember(tree = ((cos((x2 * -0.8076232467295237) * x2) / (-0.8076232467295237 / (x2 * -0.9540143331194691))) - -1.9080286662389383), loss = 39.11408785041569, cost = 0.6427868391473651), PopMember(tree = ((cos(cos((x2 * -0.8076232467295237) * x2) * (x2 * -0.8076232467295237)) / ((-0.8076232467295237 / x2) * -0.9540143331194691)) - -1.9080286662389383), loss = 48.48538249225038, cost = 0.796791321741468)], 27), Population{Float64, Float64, Expression{Float64, Node{Float64, 2}, @NamedTuple{operators::OperatorEnum{Tuple{Tuple{typeof(cos)}, Tuple{typeof(+), typeof(-), typeof(*), typeof(/)}}}, variable_names::Vector{String}}}, PopMember{Float64, Float64, Expression{Float64, Node{Float64, 2}, @NamedTuple{operators::OperatorEnum{Tuple{Tuple{typeof(cos)}, Tuple{typeof(+), typeof(-), typeof(*), typeof(/)}}}, variable_names::Vector{String}}}}}(PopMember{Float64, Float64, Expression{Float64, Node{Float64, 2}, @NamedTuple{operators::OperatorEnum{Tuple{Tuple{typeof(cos)}, Tuple{typeof(+), typeof(-), typeof(*), typeof(/)}}}, variable_names::Vector{String}}}}[PopMember(tree = (4.7240425192299815), loss = 37.44602495463219, cost = 0.6153744940000071), PopMember(tree = ((2.0239993487674495 - (x3 + -3.1762268959062787)) + 0.4330463519682721), loss = 40.92188838016233, cost = 0.6724955822674586), PopMember(tree = (4.7240425192299815), loss = 37.44602495463219, cost = 0.6153744940000071), PopMember(tree = (3.082105537225377), loss = 40.52020410539, cost = 0.6658944474972057), PopMember(tree = (-1.494336550594364), loss = 77.54667407843556, cost = 1.2743741259644064), PopMember(tree = (3.375585780420214), loss = 39.57497911281423, cost = 0.6503609602384862), PopMember(tree = (4.7240425192299815), loss = 37.44602495463219, cost = 0.6153744940000071), PopMember(tree = (4.7240425192299815), loss = 37.44602495463219, cost = 0.6153744940000071), PopMember(tree = (-1.0612901986260919), loss = 72.2487577467048, cost = 1.1873100761528952), PopMember(tree = (4.334322724388525), loss = 37.68767888217882, cost = 0.6193457476528925)  …  PopMember(tree = (4.7240425192299815), loss = 37.44602495463219, cost = 0.6153744940000071), PopMember(tree = (3.9513822513300854), loss = 38.221012037658376, cost = 0.6281103527367242), PopMember(tree = (4.83921809867733), loss = 37.43275953974227, cost = 0.6151564949470909), PopMember(tree = (3.951382251330086), loss = 38.221012037658376, cost = 0.6281103527367242), PopMember(tree = (3.229705968635617), loss = 40.02328884751816, cost = 0.6577283210326679), PopMember(tree = (4.8392181020124605), loss = 37.432759539742264, cost = 0.6151564949470908), PopMember(tree = (6.218379069824345), loss = 39.334844514630774, cost = 0.6464146746974154), PopMember(tree = (4.7240425192299815), loss = 37.44602495463219, cost = 0.6153744940000071), PopMember(tree = (4.7240425192299815), loss = 37.44602495463219, cost = 0.6153744940000071), PopMember(tree = (4.7240425192299815), loss = 37.44602495463219, cost = 0.6153744940000071)], 27), Population{Float64, Float64, Expression{Float64, Node{Float64, 2}, @NamedTuple{operators::OperatorEnum{Tuple{Tuple{typeof(cos)}, Tuple{typeof(+), typeof(-), typeof(*), typeof(/)}}}, variable_names::Vector{String}}}, PopMember{Float64, Float64, Expression{Float64, Node{Float64, 2}, @NamedTuple{operators::OperatorEnum{Tuple{Tuple{typeof(cos)}, Tuple{typeof(+), typeof(-), typeof(*), typeof(/)}}}, variable_names::Vector{String}}}}}(PopMember{Float64, Float64, Expression{Float64, Node{Float64, 2}, @NamedTuple{operators::OperatorEnum{Tuple{Tuple{typeof(cos)}, Tuple{typeof(+), typeof(-), typeof(*), typeof(/)}}}, variable_names::Vector{String}}}}[PopMember(tree = ((cos((cos(x2) * cos(x1)) * 7.2822074377465e-7) + (cos(x1) * 7.2822074377465e-7)) * 1.1158765488351188), loss = 51.2960302790025, cost = 0.8429804956706188), PopMember(tree = (((cos(x2) * (cos(x1) * 7.2822074377465e-7)) + 0.5352692580757026) * 1.1158765488351188), loss = 55.426676559386, cost = 0.9108620496610262), PopMember(tree = ((cos(cos(x2 * cos(x1)) * 7.2822074377465e-7) + 0.5352692580757026) * 1.1158765488351188), loss = 47.204930266671724, cost = 0.775748830813224), PopMember(tree = (((cos((cos(x2) * cos(x1)) * 7.2822074377465e-7) + 0.5352692580757026) * 1.1158765488351188) - x4), loss = 49.21961608808113, cost = 0.8088574523403652), PopMember(tree = ((cos(cos(x2) * (x1 * 7.2822074377465e-7)) + 0.5352692580757026) * 1.1158765488351188), loss = 47.204930266673415, cost = 0.7757488308132519), PopMember(tree = (cos((cos(x2) * cos(x1)) * 7.2822074377465e-7) + 0.5972944123990496), loss = 47.94282874960062, cost = 0.7878751888473783), PopMember(tree = (((cos((cos(x2) * cos(x1)) * 7.2822074377465e-7) + 0.5352692580757026) * 1.1158765488351188) - 0.03732952427154672), loss = 47.43971146529177, cost = 0.7796071405130272), PopMember(tree = ((cos(cos(x2) * cos(x1 * 7.2822074377465e-7)) + 0.5352692580757026) * 1.1158765488351188), loss = 49.10132435529963, cost = 0.8069134885873903), PopMember(tree = ((cos((cos(x2) * cos(x1)) * 7.2822074377465e-7) + 0.5352692580757026) * 1.1158765488351188), loss = 47.20493026667137, cost = 0.7757488308132182), PopMember(tree = (((cos(x1) * 7.2822074377465e-7) + 0.5352692580757026) * 1.1158765488351188), loss = 55.4266743458064, cost = 0.9108620132838559)  …  PopMember(tree = ((cos((cos(x2) * cos(x1)) * 7.920636264677828e-6) + 1.134118771851151) * 2.267548889027904), loss = 37.432759539728146, cost = 0.6151564949468588), PopMember(tree = ((cos(cos((cos(x2) * cos(x1)) * 7.2822074377465e-7)) + 0.5352692580757026) * 1.1158765488351188), loss = 50.675175279844545, cost = 0.8327775881145542), PopMember(tree = ((cos(cos(x5) * -3.765651505223085e-10) + 1.3796353441441451) * 2.0335964976831487), loss = 37.43275953974227, cost = 0.6151564949470909), PopMember(tree = ((cos((cos(x2) * (cos(x2) * (cos(x5) * 7.2822074377465e-7))) * 7.2822074377465e-7) + 0.5352692580757026) * 1.1158765488351188), loss = 47.20493026667097, cost = 0.7757488308132117), PopMember(tree = ((cos(cos(x1)) + 0.5352692580757026) * 1.1158765488351188), loss = 48.67897831114387, cost = 0.7999728057370707), PopMember(tree = ((cos(cos(x2) * (cos(x1) * 7.2822074377465e-7)) + 0.5352692580757026) * 1.1158765488351188), loss = 47.20493026667137, cost = 0.7757488308132182), PopMember(tree = ((cos(cos(x2) * cos((cos(x2) * cos(x1)) * 7.2822074377465e-7)) + 0.5352692580757026) * 1.1158765488351188), loss = 49.10132435530184, cost = 0.8069134885874266), PopMember(tree = ((cos(cos(x2) * (cos(x1) * 0.00020144209354628077)) + 1.0893879652593825) * 2.3161351490899835), loss = 37.43275953774704, cost = 0.615156494914302), PopMember(tree = (((cos((cos(x2) * cos(x1)) * 7.2822074377465e-7) + 0.5352692580757026) * 1.1158765488351188) + 1.2348598074527748), loss = 41.009349069812494, cost = 0.6739328797564063), PopMember(tree = ((cos(cos(x2) * (cos(x1) * 7.2822074377465e-7)) + 0.5352692580757026) * x2), loss = 74.37406046124413, cost = 1.2222365358810243)], 27), Population{Float64, Float64, Expression{Float64, Node{Float64, 2}, @NamedTuple{operators::OperatorEnum{Tuple{Tuple{typeof(cos)}, Tuple{typeof(+), typeof(-), typeof(*), typeof(/)}}}, variable_names::Vector{String}}}, PopMember{Float64, Float64, Expression{Float64, Node{Float64, 2}, @NamedTuple{operators::OperatorEnum{Tuple{Tuple{typeof(cos)}, Tuple{typeof(+), typeof(-), typeof(*), typeof(/)}}}, variable_names::Vector{String}}}}}(PopMember{Float64, Float64, Expression{Float64, Node{Float64, 2}, @NamedTuple{operators::OperatorEnum{Tuple{Tuple{typeof(cos)}, Tuple{typeof(+), typeof(-), typeof(*), typeof(/)}}}, variable_names::Vector{String}}}}[PopMember(tree = (cos(((cos(x3 + 0.227881574763294) * 0.05193001211659875) * (cos(x1) + 0.227881574763294)) * 0.227881574763294)), loss = 52.17250625435555, cost = 0.8573841863290934), PopMember(tree = (cos((cos(x3 + 0.227881574763294) * cos(x1 + 0.227881574763294)) * 0.011833892938607461)), loss = 52.17246677081848, cost = 0.8573835374708589), PopMember(tree = (cos(cos(x1 + 0.227881574763294) * 0.010625952946105476)), loss = 52.17254767294096, cost = 0.8573848669872159), PopMember(tree = (cos((cos(x3) * cos(x1 + 0.227881574763294)) * 0.011833892938607461)), loss = 52.17246731241853, cost = 0.8573835463713192), PopMember(tree = (cos(((cos(x3 + 0.227881574763294) * 0.227881574763294) * cos(x1 + 0.227881574763294)) * 0.05193001211659875)), loss = 52.17246677081848, cost = 0.8573835374708589), PopMember(tree = (cos(((cos(cos((cos(x3 + 0.227881574763294) * cos(x1 + 0.227881574763294)) * 0.011833892938607461)) * 0.227881574763294) * cos(x1 + 0.227881574763294)) * 0.05193001211659875)), loss = 52.17242487752392, cost = 0.8573828490115372), PopMember(tree = (cos((((cos(x3 + 0.32904360107449016) * -4.9334622168109904e-8) * cos(x1 + 0.001375900576094894)) * (x5 + 0.8451546632881055)) * 0.09398275466951798)), loss = 52.172355175250885, cost = 0.8573817035494741), PopMember(tree = (cos(cos(x3 + 0.227881574763294) * cos(x1 + 0.227881574763294))), loss = 52.96761484848903, cost = 0.8704507147358536), PopMember(tree = (cos(((cos(x3 + (cos(x3 + 0.227881574763294) * 0.227881574763294)) * 0.05193001211659875) * (cos(x1) + 0.227881574763294)) * 0.227881574763294)), loss = 52.17251317395303, cost = 0.8573843000432675), PopMember(tree = (cos(((cos(x3 + 0.227881574763294) * 0.227881574763294) * cos(x1 + 0.227881574763294)) * 0.05193001211659875)), loss = 52.17246677081848, cost = 0.8573835374708589)  …  PopMember(tree = (cos(((cos(x3 + 0.227881574763294) * cos(x1 + 0.227881574763294)) * cos(x1 + 0.227881574763294)) * 0.05193001211659875)), loss = 52.17372318967997, cost = 0.8574041850061334), PopMember(tree = (x3 + 0.227881574763294), loss = 64.51950626067261, cost = 1.060290339666086), PopMember(tree = (cos(((cos(x3 + 0.227881574763294) * 0.227881574763294) * cos(x4 + 0.227881574763294)) * 0.05193001211659875)), loss = 52.17250794525328, cost = 0.8573842141166981), PopMember(tree = (cos(((cos(x3 + 0.22786485831457998) * 0.05597315161771418) * cos(x1 + 0.2278054189275053)) * 0.22882110996600105) + 3.839238026561918), loss = 37.432734980571716, cost = 0.6151560913505231), PopMember(tree = (cos(((cos(x3 + 0.227881574763294) * 0.227881574763294) * cos(x1 + 0.227881574763294)) * 0.05193001211659875) / 0.9770461294977685), loss = 51.992629999185304, cost = 0.854428164704846), PopMember(tree = (cos(((cos((x3 + 0.227881574763294) * 0.227881574763294) * 0.227881574763294) * cos(x1 + 0.227881574763294)) * 0.227881574763294)), loss = 52.17597572591755, cost = 0.8574412023757768), PopMember(tree = (cos((x3 * ((cos(x3 + 0.227881574763294) * 0.227881574763294) * cos(x1 + 0.227881574763294))) * 0.227881574763294)), loss = 52.18506694709072, cost = 0.8575906042318097), PopMember(tree = (cos(((cos((((cos(x3 + 0.22788610492225247) * 0.22792142036495044) * cos(x1 + 0.22788610338712845)) * 0.22792142036495044) + 0.22844468510754934) * 0.21778305410956733) * cos(x1 + 0.2276147838914636)) * 1.600817487328561e-8)), loss = 52.172355175250885, cost = 0.8573817035494741), PopMember(tree = (cos(x3 * 0.227881574763294)), loss = 53.02095321010555, cost = 0.8713272581695111), PopMember(tree = (cos(cos(x1 + 0.227881574763294) * 0.011833892938607461)), loss = 52.17259392613057, cost = 0.8573856270954834)], 27)]], HallOfFame{Float64, Float64, Expression{Float64, Node{Float64, 2}, @NamedTuple{operators::OperatorEnum{Tuple{Tuple{typeof(cos)}, Tuple{typeof(+), typeof(-), typeof(*), typeof(/)}}}, variable_names::Vector{String}}}, PopMember{Float64, Float64, Expression{Float64, Node{Float64, 2}, @NamedTuple{operators::OperatorEnum{Tuple{Tuple{typeof(cos)}, Tuple{typeof(+), typeof(-), typeof(*), typeof(/)}}}, variable_names::Vector{String}}}}}(PopMember{Float64, Float64, Expression{Float64, Node{Float64, 2}, @NamedTuple{operators::OperatorEnum{Tuple{Tuple{typeof(cos)}, Tuple{typeof(+), typeof(-), typeof(*), typeof(/)}}}, variable_names::Vector{String}}}}[PopMember(tree = (4.839218102109231), loss = 37.43275953974226, cost = 0.6151564949470907), PopMember(tree = (cos(2.0959059281958764e-10)), loss = 52.172355175250885, cost = 0.8573817035494741), PopMember(tree = (x2 * x2), loss = 0.4615391783482523, cost = 0.007584768708596951), PopMember(tree = (4.8392181020694425 - cos(x2)), loss = 33.621575751883185, cost = 0.5525248725562958), PopMember(tree = ((x2 * x2) - -0.20439552534313027), loss = 0.406224485475958, cost = 0.006675746958536852), PopMember(tree = (cos(0.19226065665466907) * (x2 * x2)), loss = 0.5101653162488943, cost = 0.008383873154049726), PopMember(tree = (((x2 * x2) * 0.9916242761734921) - -0.27605326980850226), loss = 0.40248602982593384, cost = 0.0066143105241820085), PopMember(tree = ((x2 * x2) - (-0.20439552534313027 - cos(x1))), loss = 0.041777530780294204, cost = 0.0006865569014505772), PopMember(tree = ((x2 / ((-0.6432066760650759 / x2) * -1.5687784107214369)) - -0.2903185776068976), loss = 0.40263243222262857, cost = 0.006616716448466242), PopMember(tree = ((x2 * x2) * cos(cos(1.5001798874347037) * cos(1.5001798874347037))), loss = 0.46155845818206814, cost = 0.0075850855464453795)  …  PopMember(tree = (((x2 * (((x2 / (x2 + x2)) / (x2 + x2)) + x2)) + (x2 / (x2 + x2))) - 0.5124893610348425), loss = 0.40512787472561945, cost = 0.006657725652232053), PopMember(tree = (cos(0.07055776370989085 * ((cos(x2) * 0.07055776370989085) * ((0.07055776370989085 * (cos(x2) * (0.07055776370989085 * 0.07055776370989085))) * 0.07055776370989085))) * (x2 * x2)), loss = 0.4615391783482556, cost = 0.007584768708597004), PopMember(tree = ((x2 - (((x2 - (x2 - x2)) - ((x2 - (x2 - x2)) * x2)) + (x2 - (x2 - x2)))) + x2), loss = 0.46153917834825214, cost = 0.007584768708596948), PopMember(tree = (cos((cos(x2) * 0.07055776370989085) * (cos(x2 * x2) * (cos(x2) * (cos(x2 * x2) * 0.07055776370989085)))) * (x2 * x2)), loss = 0.4615399411238419, cost = 0.007584781243776401), PopMember(tree = ((cos(cos(cos(((cos(((x2 * 0.999987607802173) * x2) * 0.07055776370989085) * x2) * x2) * x2) * x2) * 0.19226065665466907) * x2) * x2), loss = 0.47531153918947006, cost = 0.007811098728782484), PopMember(tree = (cos(cos(x2 * x2) * ((cos(x2) * (cos(x2 * x2) * ((cos(x2) * 0.19226065665466907) * 0.07055776370989085))) * 0.07055776370989085)) * (x2 * x2)), loss = 0.4615392065286559, cost = 0.007584769171703558), PopMember(tree = (cos(cos(x2) * (cos(cos(cos(x2 * x2) * ((cos(x2) * 0.07055776370989085) * 0.07055776370989085)) * x2) * (0.07055776370989085 * 0.07055776370989085))) * (x2 * x2)), loss = 0.46154458437641194, cost = 0.007584857549317623), PopMember(tree = (2.8677530625037417 - (((-2.5530433202610765 / ((cos(cos(x2 * 0.44279548390010565) - (4.194229739499458 - (cos(x2) * 0.010286945541061968))) / 2.54400237082056) / cos(x2))) - (cos(x2) * 4.077708303050866)) * 1.1639009261998787)), loss = 0.46830440737520285, cost = 0.007695946047027337), PopMember(tree = ((2.277531163297817 - ((-2.516694635104354 / ((cos(cos(x2 * 0.38097327685141646) - (4.308409695097145 - (cos(cos(x2)) * -0.18556648819201635))) / 2.5078746328400534) / cos(x2))) - (cos(x2) * 4.432963581981715))) * 1.226632864100635), loss = 0.4158238033849752, cost = 0.006833498693418285), PopMember(tree = (cos(0.19226065665466907 * cos((((cos(0.19226065665466907 * cos(((cos(0.07055776370989085) * x2) * 0.19226065665466907) * x2)) * (x2 * x2)) * x2) * 0.19226065665466907) * x2)) * (x2 * x2)), loss = 0.4749880378293683, cost = 0.0078057824238870486)], Bool[1, 1, 1, 1, 1, 1, 1, 1, 1, 1  …  1, 1, 1, 1, 1, 1, 1, 1, 1, 1])), 5, 1, Options{SymbolicRegression.CoreModule.OptionsStructModule.ComplexityMapping{Int64, Int64, 2}, OperatorEnum, Tuple{Int64, Int64}, Tuple{Vector{Int64}, Vector{Tuple{Int64, Int64}}}, Node{T, 2} where T, Expression, @NamedTuple{}, Tuple{Main.MutationCounterPlugin, SimulatedAnnealingPlugin, AdaptiveParsimonyPlugin, AdaptiveMutationWeightsPlugin}, PopMember, false, false, nothing, Nothing, 5, false, Symbol, Nothing}(OperatorEnum{Tuple{Tuple{typeof(cos)}, Tuple{typeof(+), typeof(-), typeof(*), typeof(/)}}}(((cos,), (+, -, *, /))), ([-1], [(-1, -1), (-1, -1), (-1, -1), (-1, -1)]), nothing, SymbolicRegression.CoreModule.OptionsStructModule.ComplexityMapping{Int64, Int64, 2}(false, (Int64[], Int64[]), 0, 0), 15, 0.982, 0.0, nothing, false, 30, 30, Val{false}(), Val{false}(), true, true, true, true, nothing, 31, 0.129, :auto, nothing, Pair{AbstractMutation, Float64}[ConstantMutation(0.129, 0.00743) => 0.0346, OperatorMutation() => 0.293, FeatureMutation() => 0.1, SwapOperandsMutation() => 0.198, RotateTreeMutation() => 4.26, AddNodeMutation() => 2.47, InsertNodeMutation() => 0.0112, DeleteNodeMutation() => 0.87, SimplifyMutation() => 0.00209, RandomizeMutation() => 0.000502, DoNothingMutation() => 0.273, OptimizeMutation() => 0.0, BacksolveMutation(500, 8, 0.001, 8) => 0.0, FormConnectionMutation() => 0.5, BreakConnectionMutation() => 0.1], Pair{AbstractCrossover, Float64}[SubtreeCrossover() => 1.0], 0.2, 0.0, true, true, 1040.0, 27, 380, 0.00036, 0.0614, 0.001, 12, nothing, Val{5}(), true, 0.00743, (1, 4), nothing, L2DistLoss(), nothing, nothing, :log, Node{T, 2} where T, Expression, NamedTuple(), nothing, nothing, Optim.BFGS{LineSearches.InitialStatic{Float64}, LineSearches.BackTracking{Float64, Int64}, Nothing, Nothing, Optim.Flat}(LineSearches.InitialStatic{Float64}(1.0, false), LineSearches.BackTracking{Float64, Int64}(0.0001, 0.5, 0.1, 1000, 3, Inf, nothing), nothing, nothing, Optim.Flat()), 0.14, 2, Optim.Options(x_abstol = 0.0, x_reltol = 0.0, f_abstol = 0.0, f_reltol = 0.0, g_abstol = 1.0e-8, outer_x_abstol = 0.0, outer_x_reltol = 0.0, outer_f_abstol = 0.0, outer_f_reltol = 0.0, outer_g_abstol = 1.0e-8, f_calls_limit = 10000, g_calls_limit = 0, h_calls_limit = 0, allow_f_increases = true, allow_outer_f_increases = true, successive_f_tol = 1, iterations = 8, outer_iterations = 1000, store_trace = false, trace_simplex = false, show_trace = false, extended_trace = false, show_warnings = false, show_every = 1, time_limit = NaN, )
, nothing, "pysr_trace.jsonl", 0.982, nothing, Val{nothing}(), nothing, nothing, Base.PipeEndpoint(RawFD(-1) closed, 0 bytes waiting), true, false, true, Val{false}(), PopMember, (Main.MutationCounterPlugin(), SimulatedAnnealingPlugin(3.17), AdaptiveParsimonyPlugin(true, true), AdaptiveMutationWeightsPlugin(0.02, 0.05, :cost, 0.5))), ["x1", "x2", "x3", "x4", "x5"], nothing, false, nothing, nothing, SymbolicRegression.MLJInterfaceModule.SRFitResultTypes{Float64, Matrix{Float64}, Vector{Float64}, Nothing, Tuple{Vector{Vector{Population{Float64, Float64, Expression{Float64, Node{Float64, 2}, @NamedTuple{operators::OperatorEnum{Tuple{Tuple{typeof(cos)}, Tuple{typeof(+), typeof(-), typeof(*), typeof(/)}}}, variable_names::Vector{String}}}, PopMember{Float64, Float64, Expression{Float64, Node{Float64, 2}, @NamedTuple{operators::OperatorEnum{Tuple{Tuple{typeof(cos)}, Tuple{typeof(+), typeof(-), typeof(*), typeof(/)}}}, variable_names::Vector{String}}}}}}}, HallOfFame{Float64, Float64, Expression{Float64, Node{Float64, 2}, @NamedTuple{operators::OperatorEnum{Tuple{Tuple{typeof(cos)}, Tuple{typeof(+), typeof(-), typeof(*), typeof(/)}}}, variable_names::Vector{String}}}, PopMember{Float64, Float64, Expression{Float64, Node{Float64, 2}, @NamedTuple{operators::OperatorEnum{Tuple{Tuple{typeof(cos)}, Tuple{typeof(+), typeof(-), typeof(*), typeof(/)}}}, variable_names::Vector{String}}}}}}, Vector{DynamicQuantities.SymbolicDimensions{DynamicQuantities.FRInt32}}, DynamicQuantities.SymbolicDimensions{DynamicQuantities.FRInt32}, Nothing, Nothing}(Float64, Matrix{Float64}, Vector{Float64}, Nothing, Tuple{Vector{Vector{Population{Float64, Float64, Expression{Float64, Node{Float64, 2}, @NamedTuple{operators::OperatorEnum{Tuple{Tuple{typeof(cos)}, Tuple{typeof(+), typeof(-), typeof(*), typeof(/)}}}, variable_names::Vector{String}}}, PopMember{Float64, Float64, Expression{Float64, Node{Float64, 2}, @NamedTuple{operators::OperatorEnum{Tuple{Tuple{typeof(cos)}, Tuple{typeof(+), typeof(-), typeof(*), typeof(/)}}}, variable_names::Vector{String}}}}}}}, HallOfFame{Float64, Float64, Expression{Float64, Node{Float64, 2}, @NamedTuple{operators::OperatorEnum{Tuple{Tuple{typeof(cos)}, Tuple{typeof(+), typeof(-), typeof(*), typeof(/)}}}, variable_names::Vector{String}}}, PopMember{Float64, Float64, Expression{Float64, Node{Float64, 2}, @NamedTuple{operators::OperatorEnum{Tuple{Tuple{typeof(cos)}, Tuple{typeof(+), typeof(-), typeof(*), typeof(/)}}}, variable_names::Vector{String}}}}}}, Vector{DynamicQuantities.SymbolicDimensions{DynamicQuantities.FRInt32}}, DynamicQuantities.SymbolicDimensions{DynamicQuantities.FRInt32}, Nothing, Nothing)), nothing, (best_idx = 6, equations = Expression{Float64, Node{Float64, 2}, @NamedTuple{operators::OperatorEnum{Tuple{Tuple{typeof(cos)}, Tuple{typeof(+), typeof(-), typeof(*), typeof(/)}}}, variable_names::Vector{String}}}[4.839218102109231, x2 * x2, (x2 * x2) - -0.20439552534313027, ((x2 * x2) * 0.9916242761734921) - -0.27605326980850226, (x2 * x2) - (-0.20439552534313027 - cos(x1)), ((x2 * x2) - (-0.20439552534313027 - cos(x2 - (x2 + x1)))) + -0.15600462186243608], equation_strings = ["4.839218102109231", "x2 * x2", "(x2 * x2) - -0.20439552534313027", "((x2 * x2) * 0.9916242761734921) - -0.27605326980850226", "(x2 * x2) - (-0.20439552534313027 - cos(x1))", "((x2 * x2) - (-0.20439552534313027 - cos(x2 - (x2 + x1)))) + -0.15600462186243608"], losses = [37.43275953974226, 0.4615391783482523, 0.406224485475958, 0.40248602982593384, 0.041777530780294204, 0.002341679539677845], complexities = [1, 3, 5, 7, 8, 14], scores = [0.0, 2.1978672898463345, 0.06383050857297735, 0.004622769470053614, 2.265301733886878, 0.48024837165907974]))

The search ran with our plugin active. Since on_mutation_end! runs on workers against per-dispatch copies of the state (built by fork_plugin_state, which defaults to deepcopy), the head-side state won't reflect worker counts in multithreading mode. For a production version you'd aggregate via on_generation_end! on the head node. But the plugin loaded, the hooks fired, and the search completed — the API works.

julia
@test report(mach).best_idx isa Int
Test Passed

Show raw source code
julia
#=
# Writing a Custom Plugin

This tutorial walks through building a simple plugin from scratch.
We'll create a plugin that counts how many mutations are accepted vs
rejected during the search, which is useful for diagnosing whether
the search is exploring effectively.

## Defining the plugin

A plugin has two parts: an immutable **config struct** (subtyping
`AbstractPlugin`) and a mutable **state object** returned by
`init_plugin_state`.
=#
using SymbolicRegression
using SymbolicRegression: AbstractPlugin, MutationEvent, AbstractMutation
using SymbolicRegression: machine, fit!, report
using Test

struct MutationCounterPlugin <: AbstractPlugin end

mutable struct MutationCounterState
    accepted::Int
    rejected::Int
end

#=
## Implementing the hooks

Create the state once per output at search start:
=#
function SymbolicRegression.init_plugin_state(::MutationCounterPlugin, options, dataset)
    return MutationCounterState(0, 0)
end

#=
The `on_mutation_end!` hook fires on the worker after each mutation's
accept/reject decision. We increment the appropriate counter:
=#
function SymbolicRegression.on_mutation_end!(
    state::MutationCounterState,
    ::MutationCounterPlugin,
    ::AbstractMutation,
    event::MutationEvent,
    dataset,
    options,
)
    if event.accepted
        state.accepted += 1
    else
        state.rejected += 1
    end
    return nothing
end

#=
## Running the search

Pass the plugin to `SRRegressor` via the `plugins` keyword.
All default plugins (like `AdaptiveParsimonyPlugin`) are still
active alongside yours.
=#
X = 2randn(100, 5)
y = @. cos(X[:, 1]) + X[:, 2]^2

model = SRRegressor(;
    binary_operators=[+, -, *, /],
    unary_operators=[cos],
    plugins=(MutationCounterPlugin(),),
    niterations=5,
)
mach = machine(model, X, y)
fit!(mach)

#=
The search ran with our plugin active. Since `on_mutation_end!` runs on
workers against per-dispatch copies of the state (built by `fork_plugin_state`,
which defaults to `deepcopy`), the head-side state won't reflect worker
counts in multithreading mode. For a production version you'd aggregate
via `on_generation_end!` on the head node. But the plugin loaded, the hooks
fired, and the search completed — the API works.
=#
@test report(mach).best_idx isa Int

which uses Literate.jl to generate this page.