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
endImplementing the hooks
Create the state once per output at search start:
function SymbolicRegression.init_plugin_state(::MutationCounterPlugin, options, dataset)
return MutationCounterState(0, 0)
endThe 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
endRunning 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)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}), ([0.5923706405874168 -0.4393023701587242 … 1.4495060248123197 -0.9531059984514131; 2.3516701762523833 2.2338737692150312 … 0.945006263368613 1.4301448195318203; … ; -0.41295500311286726 0.11606118212075513 … 0.20264202681321183 -1.0616402707268757; -1.0258942775644408 -2.2043071375171985 … 3.946198343463496 1.2935611459162863], [1.0226059858244931, 4.286291634772704, 1.1241958102184508, 0.49146780372180426, -0.7916934472084638, 0.7454197638305606, 0.9008055448031509, 0.5160555429053552, 1.0189980192952557, 17.30826706894335 … 3.515568159758242, 0.21576209899946988, 0.7937009267125412, 4.7073040722809605, -0.02334317410011788, 11.462184107401423, 1.117625598031595, -0.9352930155758766, 0.9294091265545944, 5.377304284150783]), 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 = ((cos(cos(cos((x1 * x4) + x2))) + (x2 * x2)) + -0.9277323293160418), loss = 0.5945131897683639, cost = 0.009990398463962463), PopMember(tree = (cos(cos(cos(cos(cos(cos((x4 * x1) + x2))) + (x2 * x2)))) + (x2 * x2)), loss = 0.8832444388418282, cost = 0.014842334933808297), PopMember(tree = (cos(cos(cos((x1 * x4) + x2))) + (x2 * x2)), loss = 0.8549228317163492, cost = 0.014366409176074351), PopMember(tree = (cos(cos(cos((x1 * x1) + x2))) + (x2 * x2)), loss = 0.9050729781027629, cost = 0.015209149007669221), PopMember(tree = (cos(cos(cos((x1 * (x2 * x2)) + x2))) + (x2 * x2)), loss = 0.9287960078986566, cost = 0.015607798734054221), PopMember(tree = (cos(cos(cos((x4 * x1) + x2))) + (x2 * x2)), loss = 0.8549228317163492, cost = 0.014366409176074351), PopMember(tree = (cos(cos(cos((x4 * x1) + x2))) + (x2 * x2)), loss = 0.8549228317163492, cost = 0.014366409176074351), PopMember(tree = (cos(cos(cos(x1 * x4) + x2)) + (x2 * x2)), loss = 0.9164643250933671, cost = 0.015400573012108443), PopMember(tree = (cos(cos(cos((x4 * x1) + x2))) + (x2 * x2)), loss = 0.8549228317163492, cost = 0.014366409176074351), PopMember(tree = (cos(cos((x4 * x1) + x2)) + (x2 * x2)), loss = 1.032951516748412, cost = 0.01735806273750089) … PopMember(tree = (cos(cos(cos((x4 * 0.480180838222594) + x2))) + (x2 * x2)), loss = 0.8747395040201121, cost = 0.01469941516475813), PopMember(tree = (cos(cos(cos((x4 * x1) + x2))) + (x2 * x2)), loss = 0.8549228317163492, cost = 0.014366409176074351), PopMember(tree = (cos(cos(cos((x4 * (x1 * x4)) + x2))) + (x2 * x2)), loss = 0.8507202597355875, cost = 0.014295787751043138), PopMember(tree = (cos(cos(cos((x4 * x1) + x2))) + (x2 * x2)), loss = 0.8549228317163492, cost = 0.014366409176074351), PopMember(tree = (cos(cos((x4 * x1) + cos(x2))) + (x2 * x2)), loss = 0.9745532896227698, cost = 0.016376719398757705), PopMember(tree = (cos(cos(cos((x4 * x1) + x2))) + (x2 * x2)), loss = 0.8549228317163492, cost = 0.014366409176074351), PopMember(tree = (cos(cos(cos(x4 * (x1 + x2)))) + (x2 * x2)), loss = 0.8813547912441883, cost = 0.014810580663622553), PopMember(tree = (cos(cos(cos((x4 * x1) + x2))) + (x2 * x2)), loss = 0.8549228317163492, cost = 0.014366409176074351), PopMember(tree = (cos(cos(cos((x4 * x1) + x2))) + x4), loss = 55.68735695250927, cost = 0.9357889697573245), PopMember(tree = (cos(cos(cos((x4 * x1) + x2))) + (x2 * x2)), loss = 0.8549228317163492, cost = 0.014366409176074351)], 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 = (x2 * (x2 + cos(x1))), loss = 2.4577659235776452, cost = 0.04130112053065841), PopMember(tree = ((cos(x1) + (x2 * ((x2 * x2) + cos(x1)))) * -0.04008968775274688), loss = 43.341343686487825, cost = 0.7283224339568698), PopMember(tree = ((x2 * x2) + cos(x1)), loss = 0.0, cost = 0.0), PopMember(tree = ((((x2 * x2) + cos(x1)) * x2) + cos(x1)), loss = 2713.7784386567546, cost = 45.603240452334205), PopMember(tree = ((x2 * x2) + cos(cos(x1))), loss = 0.9929824249745113, cost = 0.016686408752465617), PopMember(tree = ((cos(x1) * x2) + cos(x1)), loss = 57.9743767988439, cost = 0.9742208161033666), PopMember(tree = ((x2 * x2) + 0.08697415651287504), loss = 0.4899162835114076, cost = 0.00823271707086862), PopMember(tree = ((x2 * x2) + cos(x4 * x3)), loss = 0.8949118640430356, cost = 0.015038398248827354), PopMember(tree = (((x2 * x2) + cos(x1)) + (x2 * x2)), loss = 59.85569342030915, cost = 1.005835089779341), PopMember(tree = (x2), loss = 73.10162072272622, cost = 1.228424082005713) … PopMember(tree = ((x2 * x2) + cos(x1)), loss = 0.0, cost = 0.0), PopMember(tree = (cos(x1) + (x2 * x2)), loss = 0.0, cost = 0.0), PopMember(tree = (cos(x1)), loss = 59.85569342030917, cost = 1.0058350897793413), PopMember(tree = ((x2 * x2) + cos(x1)), loss = 0.0, cost = 0.0), PopMember(tree = ((cos(x1) + (x2 * ((x2 * x2) + cos(x3)))) * -0.04008968775274688), loss = 43.19294509842826, cost = 0.7258286944541649), PopMember(tree = (x2 + cos(x1)), loss = 73.16537777527849, cost = 1.2294954768390776), PopMember(tree = (x2 * (x2 + cos(x1))), loss = 2.4577659235776452, cost = 0.04130112053065841), PopMember(tree = (((x2 * x2) * x2) + cos(x1)), loss = 2766.4758476073744, cost = 46.48878533593922), PopMember(tree = (x2 * (x2 + cos(x1))), loss = 2.4577659235776452, cost = 0.04130112053065841), PopMember(tree = ((x2 * x2) + x1), loss = 3.8782275687039935, cost = 0.06517103306046619)], 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 * x2) - x2) * ((x2 + x2) + (x1 - x2))) + (x2 * x2)), loss = 0.7221198777062403, cost = 0.012134743923585664), PopMember(tree = (cos((cos(x2 * x2) - x1) * ((x2 + x2) + (x2 - x2))) + (x2 * x2)), loss = 0.7917632001008542, cost = 0.013305053603926784), PopMember(tree = (cos((cos(x2 * x2) - x1) * ((x2 + x2) + (x1 - x2))) + (x2 * x1)), loss = 107.65769435909769, cost = 1.809115899981843), PopMember(tree = (cos((cos(x2 * x2) - x1) * ((x2 + x2) + (x1 - x2))) + (x2 * x2)), loss = 0.6457561788784932, cost = 0.010851502790166133), PopMember(tree = (cos((cos(x2 * x2) - x1) * ((x2 + x2) - (x1 - x2))) + (x2 * x2)), loss = 0.8475677776001038, cost = 0.014242812386953612), PopMember(tree = (cos((cos(x2 * x2) - x1) * ((x2 + x2) + (x1 - x2))) + (x2 * x2)), loss = 0.6457561788784932, cost = 0.010851502790166133), PopMember(tree = (cos(cos(x2 * x2) - x1) + (x2 * x2)), loss = 0.3065918674528346, cost = 0.005152072274220843), PopMember(tree = (cos((cos(x2 * x2) - x2) * ((x2 + x2) + (x1 - x2))) + (x2 * x2)), loss = 0.7221198777062403, cost = 0.012134743923585664), PopMember(tree = (cos((cos(x2 * x2) - x1) * (x1 - ((x2 + x2) + x2))) + (x2 * x2)), loss = 0.8475677776001039, cost = 0.014242812386953614), PopMember(tree = (cos((cos(x2 * x2) - x1) * ((x2 + x2) + (x1 - x2))) + (x2 * x2)), loss = 0.6457561788784932, cost = 0.010851502790166133) … PopMember(tree = (cos(cos((x2 * x2) - x1) * ((x2 + x2) + (x1 - x2))) + (x2 * x2)), loss = 0.8576683401498303, cost = 0.014412545617971178), PopMember(tree = (cos((cos(x2 * x2) - x1) * ((x2 + (x1 - x2)) + x2)) + (x2 * x2)), loss = 0.6457561788784932, cost = 0.010851502790166133), PopMember(tree = (cos((cos(x2 * x2) - x1) * ((x2 + x2) + (x1 - x2))) + (x2 * x2)), loss = 0.6457561788784932, cost = 0.010851502790166133), PopMember(tree = (cos((cos(x2 * x2) - x1) * x1) + (x2 * x2)), loss = 0.5458831592789779, cost = 0.009173203168273731), PopMember(tree = (cos((cos(x2 * x2) - ((x2 + x2) + (x1 - x2))) * ((x2 + x2) + (x1 - x2))) + (x2 * x2)), loss = 0.9371605738939706, cost = 0.01574835969840197), PopMember(tree = (cos((cos(x2 * x2) - x1) * ((x2 + x2) + (x1 - x2))) + (x2 * x2)), loss = 0.6457561788784932, cost = 0.010851502790166133), PopMember(tree = (cos((cos(x2 * x2) - x1) * ((x2 + x1) + (x1 - x2))) + (x2 * x2)), loss = 0.7290602245403811, cost = 0.01225137183284733), PopMember(tree = (cos((cos(x2 * x2) - x1) * ((x2 + x2) + (x1 - x2))) + (x2 * x2)), loss = 0.6457561788784932, cost = 0.010851502790166133), PopMember(tree = (cos((cos(x2 * x2) - x1) * ((x1 + x2) + (x1 - x2))) + (x2 * x2)), loss = 0.7290602245403811, cost = 0.01225137183284733), PopMember(tree = ((cos((cos(x2 * x2) - x1) * ((x2 + (x1 - x2)) + x2)) + (x2 * x2)) + -1.2979871420417484), loss = 2.061517190358328, cost = 0.03464242430014461)], 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 + cos(cos(((x3 + x4) * x3) + cos(x5 + cos(cos(((x3 + x4) * x3) + cos(x3))))))), loss = 52.543874617724114, cost = 0.8829648413285395), PopMember(tree = (x5 + cos(cos(((x3 + x4) * x3) + cos(x3)))), loss = 51.63790529156086, cost = 0.867740629788296), PopMember(tree = ((x5 + cos(cos(((x3 + x4) * x3) + cos(x3)))) + 0.5900034138155571), loss = 48.57321360844536, cost = 0.8162405258201317), PopMember(tree = (x5 + cos(cos((x3 + x4) * (x3 + cos(x3))))), loss = 52.28093435506015, cost = 0.8785463052196005), PopMember(tree = (x5 + cos(cos(x3))), loss = 52.03155657150809, cost = 0.8743556775453591), PopMember(tree = (x3), loss = 59.85588643563385, cost = 1.0058383332734073), PopMember(tree = (x5 + cos(cos(cos(x3) + ((x3 + x4) * x3)))), loss = 51.63790529156086, cost = 0.867740629788296), PopMember(tree = ((x3 - x2) + cos(cos(((x3 + x4) * x3) + cos(x3)))), loss = 48.16781400781327, cost = 0.8094280553532884), PopMember(tree = (x5 + cos(cos(((x3 * x3) + x4) + cos(x3)))), loss = 51.88009040535866, cost = 0.8718103894345416), PopMember(tree = (x5 + cos(cos(cos(((x3 + x4) * x3) + cos(x3)) + cos(x3)))), loss = 52.36615192761749, cost = 0.8799783298081738) … PopMember(tree = (x5 + cos(cos(((x3 * x3) + x4) + cos(x3)))), loss = 51.88009040535866, cost = 0.8718103894345416), PopMember(tree = (x5 + cos(cos(((x5 + x4) * x3) + cos(x3)))), loss = 52.55954002395592, cost = 0.8832280880538418), PopMember(tree = (x5 + cos(cos(cos(x3) + ((x3 + x4) * x5)))), loss = 52.045369885264876, cost = 0.8745878010893158), PopMember(tree = (x5 + cos(cos(((x3 * x3) + x4) + cos(x3)))), loss = 51.88009040535866, cost = 0.8718103894345416), PopMember(tree = (x3 + cos(cos(((x3 + x4) * x3) + cos(x3)))), loss = 54.496923205822185, cost = 0.9157845229611391), PopMember(tree = (x3 + cos(cos(((x3 + x4) * x3) + cos(x3)))), loss = 54.496923205822185, cost = 0.9157845229611391), PopMember(tree = (x5 + cos(cos(((x3 + x4) * (((x3 + x4) * x3) + cos(x3))) + cos(x3)))), loss = 51.86267938504186, cost = 0.8715178088263692), PopMember(tree = (x5 + cos(cos(((x3 + x4) * x3) + x3))), loss = 52.28549319632384, cost = 0.8786229135128093), PopMember(tree = (x5 + cos(cos(((x3 + x4) * x3) + cos(x3)))), loss = 51.63790529156086, cost = 0.867740629788296), PopMember(tree = (x5 + cos(cos(((x3 + x4) * x3) + cos(x3)))), loss = 51.63790529156086, cost = 0.867740629788296)], 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 - x2)) * x2) + x2), loss = 73.10162072272622, cost = 1.228424082005713), PopMember(tree = (((cos(x2) * (x2 - x2)) * x2) + (x2 * x2)), loss = 0.49748078741114043, cost = 0.008359833524197393), PopMember(tree = (((cos(x2 * -0.5950478542400748) * (x2 * x2)) + x2) * x2), loss = 263.6886267732826, cost = 4.431111869707347), PopMember(tree = (((cos(x2) * x2) * (x2 - x2)) + (x2 * x2)), loss = 0.49748078741114043, cost = 0.008359833524197393), PopMember(tree = (((cos((cos(x2 * x2) * (x2 - x2)) + (x2 * x2)) * (x2 - x2)) + x2) * x2), loss = 0.49748078741114043, cost = 0.008359833524197393), PopMember(tree = (((cos(x2) * (x2 - x2)) * x2) + x2), loss = 73.10162072272622, cost = 1.228424082005713), PopMember(tree = (((cos(x2) * (x2 - (x2 * x2))) * x2) + (x2 * x2)), loss = 382.5081093248531, cost = 6.427794191313245), PopMember(tree = ((cos(x2 * x2) * (x2 - x2)) + (x2 - x2)), loss = 59.50845623554476, cost = 1.0), PopMember(tree = (((cos(x2) * (x2 - x2)) * (x2 * x2)) + (x2 * x2)), loss = 0.49748078741114043, cost = 0.008359833524197393), PopMember(tree = (x2 * (((cos(x2) * 0.8951465854455838) * (x2 - x2)) + x2)), loss = 0.49748078741114043, cost = 0.008359833524197393) … PopMember(tree = ((((cos(x2) * x2) * (x2 - x2)) + x2) * (x2 - x2)), loss = 59.50845623554476, cost = 1.0), PopMember(tree = (cos(x2) * x2), loss = 61.926174707767046, cost = 1.0406281497650105), PopMember(tree = (((cos(x2 * -0.5950478542400748) * (x2 - x2)) + x2) * x2), loss = 0.49748078741114043, cost = 0.008359833524197393), PopMember(tree = (x2 * -0.5950478542400748), loss = 54.87046703141775, cost = 0.9220616783307393), PopMember(tree = (((cos(x2) * (x2 - x2)) * x2) + (x2 * x2)), loss = 0.49748078741114043, cost = 0.008359833524197393), PopMember(tree = (((cos(x2) * x2) * (x2 - x2)) + (x2 * x2)), loss = 0.49748078741114043, cost = 0.008359833524197393), PopMember(tree = (x2 * ((cos(x2) * (x2 - x2)) + x2)), loss = 0.49748078741114043, cost = 0.008359833524197393), PopMember(tree = (((cos(x2) * x2) * (x2 - x2)) + x2), loss = 73.10162072272622, cost = 1.228424082005713), PopMember(tree = (((cos(x2 * -0.5950478542400748) * (x2 - (x2 * x2))) + x2) * x2), loss = 283.8881390386192, cost = 4.77055122913861), PopMember(tree = (((cos(x2 * -0.5950478542400748) * (x2 - x2)) + x2) * x2), loss = 0.49748078741114043, cost = 0.008359833524197393)], 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.7392826929491402), loss = 54.551022668352616, cost = 0.9166936284219882), PopMember(tree = (0.7437387748819124), loss = 54.524455526268696, cost = 0.9162471852815585), PopMember(tree = (0.7437387748819124), loss = 54.524455526268696, cost = 0.9162471852815585), PopMember(tree = (0.7615645713854539), loss = 54.41857539334845, cost = 0.9144679401184651), PopMember(tree = (cos(cos(cos(cos(cos(cos(cos(cos(cos(cos(cos(x4 / x4)))))))))))), loss = 54.57298052263995, cost = 0.9170626155487995), PopMember(tree = (0.7437387748819124), loss = 54.524455526268696, cost = 0.9162471852815585), PopMember(tree = (0.7437387748819124), loss = 54.524455526268696, cost = 0.9162471852815585), PopMember(tree = (0.7359423925833817), loss = 54.570963567599726, cost = 0.9170287219617732), PopMember(tree = (3.7225086694017233), loss = 45.65138544176056, cost = 0.7671411481599267), PopMember(tree = (0.7050724937082679), loss = 54.75630651615481, cost = 0.9201432868535503) … PopMember(tree = (0.7437387748819124), loss = 54.524455526268696, cost = 0.9162471852815585), PopMember(tree = (0.7437387748819124), loss = 54.524455526268696, cost = 0.9162471852815585), PopMember(tree = (0.7437387748819124), loss = 54.524455526268696, cost = 0.9162471852815585), PopMember(tree = (0.7437387748819124), loss = 54.524455526268696, cost = 0.9162471852815585), PopMember(tree = (0.7400444255278169), loss = 54.5464784077575, cost = 0.9166172651472103), PopMember(tree = (0.7437387748819124), loss = 54.524455526268696, cost = 0.9162471852815585), PopMember(tree = (3.722508669415745), loss = 45.65138544176057, cost = 0.7671411481599268), PopMember(tree = (0.7437387748819124), loss = 54.524455526268696, cost = 0.9162471852815585), PopMember(tree = (0.7321502043002167), loss = 54.59362919157541, cost = 0.917409602687127), PopMember(tree = (0.7384386024044922), loss = 54.55605960652001, cost = 0.9167782708154567)], 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((0.009303394677202313 / x3) / (cos(cos(x1)) / x1))), loss = 53.04346108576324, cost = 0.8913600594142125), PopMember(tree = (cos((-0.022701637371996736 / x3) / ((0.9997423288968085 / x1) / cos(x1))) * 1.8306616543355279), loss = 49.18257651551383, cost = 0.8264804638997975), PopMember(tree = (cos((-0.022701637371996736 / ((0.9997423288968085 / x1) / x1)) / x3)), loss = 53.13392805335362, cost = 0.8928802965924766), PopMember(tree = (cos((-0.022701637371996736 / x3) / (cos(-0.022701637371996736 / x1) / cos(x1)))), loss = 53.052810367445915, cost = 0.8915171678702891), PopMember(tree = (cos((0.015261860228632629 / x3) / (-53.16355999803564 / x3))), loss = 53.06343912110327, cost = 0.8916957770013223), PopMember(tree = ((-0.022701637371996736 / x3) / cos((0.9997423288968085 / x1) / cos(x1))), loss = 59.77139338995793, cost = 1.004418483876853), PopMember(tree = (cos((-0.022701637371996736 / cos(x1)) / ((0.9997423288968085 / x1) / cos(x1)))), loss = 53.06795991355807, cost = 0.8917717459096217), PopMember(tree = (cos((-0.022701637371996736 / ((0.9997423288968085 / x1) / cos(x1 * -1.234871122515557))) / x3)), loss = 53.04381229466173, cost = 0.8913659612459974), PopMember(tree = (cos((-0.022701637371996736 / x3) / ((0.9997423288968085 / x1) / x3))), loss = 53.06795991355807, cost = 0.8917717459096217), PopMember(tree = (cos((-0.022701637371996736 / x3) / ((0.9997423288968085 / x1) / (-0.022701637371996736 / cos(x3))))), loss = 53.06343519657018, cost = 0.8916957110521558) … PopMember(tree = (cos((-0.022701637371996736 / x3) / cos((-0.022701637371996736 / x1) / cos(x1)))), loss = 53.045573381183985, cost = 0.8913955551328777), PopMember(tree = (cos(cos((-0.022701637371996736 / x1) / cos(x1)) / cos((-0.022701637371996736 / x1) / cos(x1)))), loss = 55.77782278188549, cost = 0.9373091878086574), PopMember(tree = (cos(((0.9997423288968085 / x1) / x3) / ((0.9997423288968085 / x1) / cos(x1)))), loss = 55.42272877269911, cost = 0.9313420693241707), PopMember(tree = (cos(cos((-0.022701637371996736 / x3) / ((0.9997423288968085 / x1) / cos(x1))) / ((0.9997423288968085 / x1) / cos(x1)))), loss = 56.68393856191262, cost = 0.9525358604086079), PopMember(tree = (cos((-0.022701637371996736 / x3) / (cos(-0.022701637371996736 / x3) / x1))), loss = 53.05173944927132, cost = 0.891499171803136), PopMember(tree = (cos((-0.022701637371996736 / x3) / (-1.6170166943256872 / cos(x1)))), loss = 53.058455639840275, cost = 0.8916120329155529), PopMember(tree = (cos((4.976141975293124e-13 / x3) / (cos(x1) / (0.8885677524155992 / x1)))), loss = 53.06343889673777, cost = 0.8916957732310095), PopMember(tree = (cos((-0.022701637371996736 / x3) / cos((-0.022701637371996736 / x1) / cos(x1)))), loss = 53.045573381183985, cost = 0.8913955551328777), PopMember(tree = (cos((-0.022701637371996736 / x3) / (cos(-0.022701637371996736 / x3) / cos(x1)))), loss = 53.05923966002833, cost = 0.8916252078529929), PopMember(tree = (cos((-0.022701637371996736 / x3) / (cos(-0.022701637371996736 / x1) / cos(x1))) + 0.16402454177936213), loss = 52.184725587543454, cost = 0.876929580915144)], 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 + 0.3946305342091494) * 0.3946305342091494) * (0.3946305342091494 / (x2 * (x2 * x2))))), loss = 52.95412888936767, cost = 0.8898588913106075), PopMember(tree = (cos(((x2 + 0.3946305342091494) * 0.3946305342091494) * (x2 * (0.3946305342091494 / x2)))), loss = 54.25860964420148, cost = 0.9117798221724408), PopMember(tree = (cos(((x2 + 0.3946305342091494) * 0.15573325853019862) / (x2 * x2))), loss = 53.02300932806838, cost = 0.891016381238225), PopMember(tree = (cos(((x2 + 0.3946305342091494) * 0.15573325853019862) / (x2 * x2))), loss = 53.02300932806838, cost = 0.891016381238225), PopMember(tree = (cos(0.1529450145986531 / (x2 * x2))), loss = 53.00032305551057, cost = 0.8906351535271916), PopMember(tree = (cos(((x2 + 0.3946305342091494) * 0.15573325853019862) / (x2 * x2))), loss = 53.02300932806838, cost = 0.891016381238225), PopMember(tree = (cos(((x2 + 0.3946305342091494) * 0.3946305342091494) * (0.3946305342091494 / (x2 * x2)))), loss = 53.02300932806838, cost = 0.891016381238225), PopMember(tree = (cos(((x2 + 0.3946305342091494) * 0.3946305342091494) * ((0.3946305342091494 / x2) * x2))), loss = 54.25860964420148, cost = 0.9117798221724408), PopMember(tree = (cos(((x2 + 0.3946305342091494) * 0.15573325853019862) / (x2 * x2))), loss = 53.02300932806838, cost = 0.891016381238225), PopMember(tree = (cos(0.06145709900790385 / (x2 * x2))), loss = 52.92680284498264, cost = 0.8893996953221102) … PopMember(tree = (0.9231386748248778), loss = 53.487857808307666, cost = 0.8988278505594813), PopMember(tree = (cos(((x2 + 0.3946305342091494) * 0.3946305342091494) * (0.3946305342091494 / x2))), loss = 53.082882378685724, cost = 0.8920225080041481), PopMember(tree = (cos(((x2 + -1.7114147550781131) * 0.052044523090206) * (-0.8358663227610955 / (x2 * x2)))), loss = 52.88693755885838, cost = 0.8887297857219272), PopMember(tree = (cos(((x2 + 1.1391089094426634) * -0.19972808167047562) / (x2 * x2))), loss = 52.894173355026844, cost = 0.88885137846061), PopMember(tree = (cos(((x2 + 0.3946305342091494) * 0.15573325853019862) / (x2 * x2))), loss = 53.02300932806838, cost = 0.891016381238225), PopMember(tree = (cos(((x2 + 0.3946305342091494) * 0.15573325853019862) / (x2 * x2))), loss = 53.02300932806838, cost = 0.891016381238225), PopMember(tree = (cos(((x2 + 0.3946305342091494) * 0.3946305342091494) * (0.3946305342091494 / (x2 * x2)))), loss = 53.02300932806838, cost = 0.891016381238225), PopMember(tree = (cos(((x2 + (x2 * 0.4737721734295265)) * 0.11700355780318401) / (x2 * x2))), loss = 52.95707486552199, cost = 0.8899083964791277), PopMember(tree = (cos(((x2 + (x2 * 0.3946305342091494)) * cos(((x2 + 0.3946305342091494) * 0.15573325853019862) / (x2 * x2))) / (x2 * x2))), loss = 54.01571036235054, cost = 0.9076980614073908), PopMember(tree = (cos(((x2 + 0.3946305342091494) * 0.3946305342091494) * (0.3946305342091494 / (x2 * x2)))), loss = 53.02300932806838, cost = 0.891016381238225)], 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 * x1) + (x4 * x1)) * x2) + x4)), loss = 60.40285141809093, cost = 1.0150297157601602), PopMember(tree = (cos((((x4 * x1) + (((x1 * x5) + x5) * ((x1 * x5) + x5))) * x2) + x4)), loss = 59.83690735606072, cost = 1.0055194024730854), PopMember(tree = (cos((((x4 * x1) + (((x1 * x5) + x5) * (((x4 * x1) + (((x1 * x5) + x5) * x1)) * x2))) * x2) + x4)), loss = 57.75446375996366, cost = 0.9705253238524876), PopMember(tree = (cos((((x4 * x1) + (x1 * x1)) * x2) + x4)), loss = 60.38936784965394, cost = 1.014803133366834), PopMember(tree = (cos(x1 + x4)), loss = 60.96259367457099, cost = 1.0244358118327), PopMember(tree = (cos((((x4 * x1) * x2) + (((x1 * x5) + x5) * x1)) + x4)), loss = 59.508666614051414, cost = 1.0000035352707826), PopMember(tree = (cos((((x4 * x1) * x2) + (((x1 * x5) + x5) * x1)) + x4)), loss = 59.508666614051414, cost = 1.0000035352707826), PopMember(tree = (cos((((x4 * x1) + (((x1 * x5) + x5) * x1)) * x2) + ((((x4 * x1) + (((x1 * x5) + x5) * x1)) * x2) + x4))), loss = 60.233612211950025, cost = 1.0121857635414868), PopMember(tree = (cos(((((x4 * x1) + ((x5 * -2.1274068715120693) + x5)) * x1) * x2) + x4)), loss = 58.479152941390794, cost = 0.9827032432150515), PopMember(tree = (cos((((x4 * x1) * x2) + (((x1 * x5) + x5) * x1)) + x4)), loss = 59.508666614051414, cost = 1.0000035352707826) … PopMember(tree = (cos((((((x1 * x5) + x5) * x1) + (((x1 * x5) + x5) * x1)) * x2) + x4)), loss = 59.47663483852969, cost = 0.9994652626025263), PopMember(tree = (cos((((x4 * x1) + (((x1 * x5) + x5) * x1)) * x2) + x4)), loss = 57.6548154828739, cost = 0.9688508008788896), PopMember(tree = (cos((((x4 * x1) + (((x1 * x5) + x5) * x1)) * x2) + x4)), loss = 57.6548154828739, cost = 0.9688508008788896), PopMember(tree = (cos((((x4 * x1) + (((x1 * x5) + x5) * x1)) + x4) * x2)), loss = 59.621435380286776, cost = 1.0018985393318693), PopMember(tree = (cos((((x4 * x1) + (((x1 * x5) + x5) * x1)) * x2) + x4)), loss = 57.6548154828739, cost = 0.9688508008788896), PopMember(tree = (cos(x4)), loss = 58.79796425853583, cost = 0.9880606552084517), PopMember(tree = (cos((((x4 * 0.9913592951894553) + (((x1 * x5) + x5) * x1)) * x2) + x4)), loss = 59.744117323799244, cost = 1.0039601277391854), PopMember(tree = (cos(((((x4 * x1) + ((x1 * x5) + x5)) * x1) * x2) + x4)), loss = 58.114121489623464, cost = 0.9765691326220549), PopMember(tree = (cos((((x4 * x1) + (((x1 * x5) * x1) + x5)) * x2) + x4)), loss = 60.90217454738031, cost = 1.023420508613414), PopMember(tree = (cos(((((x4 * x1) + (((x1 * x5) + x5) * x1)) * x2) * x2) + x4)), loss = 60.19980021475253, cost = 1.011617575432831)], 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 + (x3 + x3)) / (x1 + x1)) + (x3 + cos(x3 + cos(x1 + x3)))), loss = 53.20981655393204, cost = 0.8941555523355939), PopMember(tree = ((cos(cos(x3 + (x3 + x3)) / (x1 + x1)) + x3) + cos(cos(x1 + (x3 + x3)))), loss = 50.126066954964415, cost = 0.8423351927759102), PopMember(tree = (cos(cos(x3 + (x3 + x3)) / (x1 + x1)) + (x3 + cos(cos(x3 + (x1 + x3))))), loss = 50.126066954964415, cost = 0.8423351927759102), PopMember(tree = (cos(cos(x3 + (x3 + x3)) / (x1 + x1)) + cos(x3 + cos(x1 + (x3 + x3)))), loss = 52.19486511584435, cost = 0.8770999689396755), PopMember(tree = (x3 + (cos(cos(x3 + (x3 + x3)) / (x1 + x1)) + cos(cos(x3 + (x1 + x3))))), loss = 50.126066954964415, cost = 0.8423351927759102), PopMember(tree = (cos(cos(x3 + (x3 + x3)) / (x1 + x1)) + (x3 + cos(x3))), loss = 52.59172281942014, cost = 0.8837688985117175), PopMember(tree = (cos(cos(x3 + (x3 + x3)) / (x1 + x1)) + (x3 + cos(cos(x3 + (x1 + cos(x3 + (x1 + x3))))))), loss = 50.94162044212756, cost = 0.8560400263198193), PopMember(tree = (cos(cos(cos(x3 + (x3 + x3)) / (x1 + x1)) + cos(cos(x3 + (x1 + x3)))) + (x3 + cos(cos(x3 + (x1 + x3))))), loss = 55.79938135751857, cost = 0.9376714653234318), PopMember(tree = (x3 + (cos(x3 + (x3 + x3)) / (x1 + x1))), loss = 61.82753490220908, cost = 1.0389705734842962), PopMember(tree = (cos(cos(x3 + (x3 + x3)) / x3) + (x3 + cos(cos(x3 + (x1 + x3))))), loss = 51.41348848692973, cost = 0.8639694547515441) … PopMember(tree = (cos(cos(x3 + (x3 + x3)) / (x1 + x1)) + (x3 + cos(cos(x3 + (x1 + x3))))), loss = 50.126066954964415, cost = 0.8423351927759102), PopMember(tree = (cos(cos(x3 + (x3 + x3)) / (x1 + x1)) + cos(x3 + cos(x3 + (x1 + x3)))), loss = 52.19486511584435, cost = 0.8770999689396755), PopMember(tree = (cos(cos(x3 + (x3 + x3)) / ((x5 * 2.025427353876311) + x1)) + (x3 + cos(cos((x3 + x3) + x1)))), loss = 50.653082260290724, cost = 0.8511913342163854), PopMember(tree = ((cos(cos(x3 + (x3 + x3)) / (x1 + x1)) + x3) + cos(cos(x1 + (x3 + x3)))), loss = 50.126066954964415, cost = 0.8423351927759102), PopMember(tree = (cos(x1) + (x3 + cos(cos((x3 + x3) + x1)))), loss = 54.73959223805646, cost = 0.9198624145346282), PopMember(tree = (cos(cos(x3 + (x3 + x3)) / ((cos(x3 + (x3 + x3)) / (x1 + x1)) + x1)) + (x3 + cos(cos(x3 + (x1 + x3))))), loss = 50.86851582265909, cost = 0.8548115518458874), PopMember(tree = (cos(cos(cos(x3 + (x3 + x3)) + (x3 + x3)) / (x1 + x1)) + (x3 + cos(cos(x3 + (x3 + x1))))), loss = 50.269727321649164, cost = 0.844749309622029), PopMember(tree = (cos(cos(x3 + (x3 + (x1 + x1))) / (x1 + x1)) + (x3 + cos(cos(x1 + (x3 + x3))))), loss = 50.39251650197733, cost = 0.8468127000726592), PopMember(tree = (cos(cos(x3 + (x3 + x3)) / (x1 + x1)) + (x3 + cos(cos(x1)))), loss = 50.449559725957506, cost = 0.847771273485392), PopMember(tree = (cos(x1) + cos(x3 + cos(x1 + (x3 + x3)))), loss = 58.094986785862005, cost = 0.9762475866608268)], 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 = ((x2 * x2) + cos(x1 + (((cos((cos(x1) * (x2 / x1)) / (x1 / x5)) + x2) * 0.5441421512818886) * (cos(x1) - cos(x1))))), loss = 0.0, cost = 0.0), PopMember(tree = ((x2 * x2) + (cos(x1) + ((((x2 / cos(cos(x2) - 0.9954300256632457)) / (x3 / cos(x1))) * (x5 + x2)) * (cos(x1) - cos(x1))))), loss = 0.0, cost = 0.0), PopMember(tree = ((x2 * x2) + cos(x1 + ((x3 / (cos(x2 / (cos(x2) - cos(x3))) / (cos(x1) * (x5 + x1)))) * (cos(x1) - cos(x1))))), loss = 0.0, cost = 0.0), PopMember(tree = ((x2 * x2) + cos(x1 + (cos(((cos(cos(x1 * x1) / x2) / x1) + (x2 * 0.9954300256632457)) / 0.09563952490944641) * (cos(x1) - cos(x1))))), loss = 0.0, cost = 0.0), PopMember(tree = ((x2 * x2) + cos((cos(((cos((cos(x1) * x1) / x2) / x1) + (x2 * 0.9954300256632457)) / 0.09563952490944641) * (cos(x1) - cos(x1))) + x1)), loss = 0.0, cost = 0.0), PopMember(tree = ((x2 * x2) + cos(x1 + ((cos((cos(x2) * (x2 / x1)) / (x1 / x5)) + cos(x2 * 0.9954300256632457)) * (cos(x1) - cos(x1))))), loss = 0.0, cost = 0.0), PopMember(tree = ((x2 * x2) + cos(x1 + ((cos((x2 / (cos(x1) - cos(x3))) / (x3 / (cos(x1) * (x5 + x5)))) * cos(x1)) - cos(x1)))), loss = 0.19767004185345105, cost = 0.0033217134901137218), PopMember(tree = ((x2 + (cos(x1) + ((cos((x2 / (cos(x2) - 0.9954300256632457)) / (x3 / cos(x1))) * (x5 + x2)) * (cos(x1) - cos(x1))))) * x2), loss = 2.4577659235776452, cost = 0.04130112053065841), PopMember(tree = ((x2 * x2) + cos(x1 + ((cos((cos(x1) * (x2 / x1)) / (x1 / x5)) + (x2 * 0.5441421512818886)) * (cos(x1) - cos(x1))))), loss = 0.0, cost = 0.0), PopMember(tree = ((x2 * x2) + (cos(x1) + (cos(x3 / ((x2 / cos(x2 - cos(x3))) / (x5 + (x2 * 0.9954300256632457)))) * (cos(x2) - cos(x1))))), loss = 0.5939810390583683, cost = 0.009981456025464491) … PopMember(tree = ((x2 * x2) + (cos(x1) + (((x2 / cos(cos(x2) - 0.9954300256632457)) * (x5 + x2)) * (cos(x1) - cos(x1))))), loss = 0.0, cost = 0.0), PopMember(tree = ((x2 * x2) + cos(x1 + ((x3 / (cos(x1) * (cos(x2 / (cos(x2) - cos(x3))) / (x5 + x1)))) * (cos(x1) - cos(x1))))), loss = 0.0, cost = 0.0), PopMember(tree = ((x2 * x2) + cos(x1 + ((cos((cos(x1) * (x2 / x2)) / (x1 / x5)) + (x2 * 0.5441421512818886)) * (cos(x1) - cos(x1))))), loss = 0.0, cost = 0.0), PopMember(tree = ((x2 * x2) + (cos(x1) + (cos(x3 / ((x2 / cos(x2 - cos(x3))) / (x5 + (x2 * 0.9954300256632457)))) * (cos(x1) - cos(x1))))), loss = 0.0, cost = 0.0), PopMember(tree = ((x2 * x2) + (cos(x1) + (cos(x3 / ((x2 / cos(x2 - cos(x3))) / (x5 + (x2 * 0.9954300256632457)))) * (cos(x1) - cos(x1))))), loss = 0.0, cost = 0.0), PopMember(tree = ((x2 * x2) + cos(x1 + (((cos((cos(x2) * (x2 / x2)) / (x1 / x5)) + (x2 * -0.04286080833322474)) * cos(x1)) - cos(x1)))), loss = 0.22371118118493086, cost = 0.0037593175043802735), PopMember(tree = ((x2 * x2) + (cos(x1) + (cos((x2 / cos(x2 - cos(x3))) / (x3 / (x5 + (x2 * 0.9954300256632457)))) * (cos(x1) - cos(x1))))), loss = 0.0, cost = 0.0), PopMember(tree = ((x2 * x2) + cos(x1 + ((cos((cos(x2) * (x2 / x2)) / (x1 / x5)) + (x2 * 0.5441421512818886)) * (cos(x1) - cos(x1))))), loss = 0.0, cost = 0.0), PopMember(tree = ((x2 * x2) + (cos(x1) + (cos(x3 / ((x2 / cos(x2 - cos(x3))) / (x5 + (x2 * 0.9954300256632457)))) * (cos(x1) - cos(x1))))), loss = 0.0, cost = 0.0), PopMember(tree = ((x2 * x2) + cos((cos(((cos((cos(x1) * x1) / x2) / x1) + (x2 * 0.9954300256632457)) / 0.09563952490944641) * cos(x1 - cos(x1))) + x1)), loss = 0.04443622406101892, cost = 0.0007467211699314239)], 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 = (x2 + cos(cos(x2 / x2) * cos((x2 * x4) - (x2 * (x2 - x2))))), loss = 66.45945042826169, cost = 1.116806831035974), PopMember(tree = (cos(x2 - x2) + cos(cos(x2 / x2) * cos(cos(x2 - x2) - (x2 * (x2 - x2))))), loss = 48.76596618740194, cost = 0.819479604619179), PopMember(tree = (x2 + cos(cos(x2 / x2) * cos((x2 - (x2 * (x2 - x2))) * x4))), loss = 66.45945042826169, cost = 1.116806831035974), PopMember(tree = (cos(x2 - x2) + cos(cos(x2 / (x2 - x2)) * cos((x2 * x4) - (x2 * (x2 - x2))))), loss = Inf, cost = Inf), PopMember(tree = (cos(x2) + cos(cos(x2 / x2) * cos((x2 - (x2 * (x2 - x2))) * x4))), loss = 57.10697548367824, cost = 0.95964471431823), PopMember(tree = (cos(x2 - x2) + cos(cos(x2 / x2) * cos((x2 - (x2 * (x2 - x2))) * x4))), loss = 48.692811601390204, cost = 0.8182502904907436), PopMember(tree = (cos(x2 - x2) + cos(cos(x2 / x2) * cos((x2 * x4) - (cos(x2 / x2) * (x2 - x2))))), loss = 48.692811601390204, cost = 0.8182502904907436), PopMember(tree = (cos(x2 - x2) + cos(x2 * cos((x2 * x4) - (x2 * (x2 - x2))))), loss = 54.637474440674374, cost = 0.9181463929161563), PopMember(tree = ((cos(x2 - x2) + cos(cos(x2 / x2) * cos((x2 * x4) - (x2 * (x2 - x2))))) * x3), loss = 67.38932015473475, cost = 1.132432672896036), PopMember(tree = (cos(x2 - x2) + cos(cos(x2 / x2) * cos((x2 * x4) * (x2 * (x2 - x2))))), loss = 49.12944428551294, cost = 0.8255876121378465) … PopMember(tree = (cos(x2 - x2) + cos(cos(x2 / x2) * cos((x2 - x2) * x4))), loss = 49.12944428551294, cost = 0.8255876121378465), PopMember(tree = (cos((x2 - x2) + cos(cos(x2 / x2) * cos((x2 * x4) - (x2 * (x2 - x2)))))), loss = 55.54596291378299, cost = 0.9334129370441481), PopMember(tree = (cos(x2 - x2) + cos(cos(x2 / x2) * cos((x2 * x4) - ((x2 - x2) * -0.950407069257865)))), loss = 48.692811601390204, cost = 0.8182502904907436), PopMember(tree = (cos(x2 - x2) + cos(cos(x2 / x2) * (x2 * x4))), loss = 54.10610209687355, cost = 0.9092170343440307), PopMember(tree = ((x2 * x4) + cos(cos(x2 / x2) * cos((x2 - (x2 * (x2 - x2))) * x4))), loss = 68.65120514016567, cost = 1.1536378102035167), PopMember(tree = (cos(x2 - x2) + cos(cos(x2 / x2) * cos((x2 - (x2 * (x2 - x2))) * x4))), loss = 48.692811601390204, cost = 0.8182502904907436), PopMember(tree = (cos(cos(x2 - x2) - x2) + cos(cos(x2 / x2) * cos((x2 - (x2 * (x2 - x2))) * x4))), loss = 56.36861907687731, cost = 0.9472371263297533), PopMember(tree = (cos(cos(x2 - x2) - x2) + cos(cos(x2 / x2) * cos((x2 * x4) - (x2 * (x2 - x2))))), loss = 56.36861907687731, cost = 0.9472371263297533), PopMember(tree = (cos(x2 - x2) + cos(cos(x2 / x2) * cos((x2 * x4) - ((x2 - x2) * (x2 - x2))))), loss = 48.692811601390204, cost = 0.8182502904907436), PopMember(tree = (cos(x2 - x2) + cos(cos(x2 / x2) * cos((x2 - (x2 * (x2 - x2))) * x4))), loss = 48.692811601390204, cost = 0.8182502904907436)], 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(x3) + x1) * x1) * (x1 - x1)) + x1)))), loss = 54.40094333462373, cost = 0.9141716451069641), PopMember(tree = (2.419829966032429 / cos(cos(cos(cos(cos(cos(cos(((cos(x3) * x1) + x1) * (x1 - x1)) + x1))) + x1)))), loss = 47.53836726920308, cost = 0.7988506218517583), PopMember(tree = (cos(cos(cos(cos(cos(cos(((cos(x3) + x1) * x1) * (x1 - x1)) + x1)) + x1)))), loss = 54.502563142745956, cost = 0.9158792983473707), PopMember(tree = (cos(cos(cos(cos(cos(cos(cos(((cos(x3) + cos(x1)) * x1) * (x1 - x1)) + x1))) + x1)))), loss = 54.32507544970831, cost = 0.9128967357963423), PopMember(tree = (cos(cos(cos(cos(cos(cos(cos(((cos(x3) + x1) * x1) * (x1 - x1)) + x1)) + x1))))), loss = 54.62784688007764, cost = 0.917984608168143), PopMember(tree = (cos(cos(cos(cos(cos(cos(cos(((cos(x3) + x1) * x1) * (x1 - x1)) + x1))) + x1)))), loss = 54.32507544970831, cost = 0.9128967357963423), PopMember(tree = (cos(cos(cos(cos(cos(cos(cos(((cos(x3) / x1) + x1) * (((cos(x3) + x1) * x1) * (x1 - x1))) + x1))) + x1)))), loss = 54.32507544970831, cost = 0.9128967357963423), PopMember(tree = (cos(cos(cos(cos(cos(cos(cos(((cos(x3) * x1) + x1) * (x1 - x1)) + x1))) + x1)))), loss = 54.32507544970831, cost = 0.9128967357963423), PopMember(tree = (cos(cos(cos(cos(cos(cos(cos(((cos(x3) / cos(x2)) + x1) * (x1 - x1)) + x1))) + x1)))), loss = 54.32507544970831, cost = 0.9128967357963423), PopMember(tree = (cos(cos(cos(cos(cos(cos(cos((cos(x3 * x1) + x1) * (x1 - x1)) + x1))) + x1)))), loss = 54.32507544970831, cost = 0.9128967357963423) … PopMember(tree = (cos(cos(cos(cos(cos(cos(cos(((cos(x3) + x1) * x1) * (x1 - x1)) + x1))) + ((cos(x3) + x1) * x1))))), loss = 54.7610200739179, cost = 0.9202224950545568), PopMember(tree = (cos(cos(cos(cos(cos(cos(cos(x1 - x1) + x1))) + x1)))), loss = 54.32507544970831, cost = 0.9128967357963423), PopMember(tree = (cos(cos(cos(cos(cos(cos(cos(((cos(x3) + x1) * x1) * (x1 - x1)) + x1))) + x1)))), loss = 54.32507544970831, cost = 0.9128967357963423), PopMember(tree = (cos(cos(cos(cos(cos(cos(cos(((cos(x3) + x1) * x1) * (x1 - x1)) + x1))) + x1)))), loss = 54.32507544970831, cost = 0.9128967357963423), PopMember(tree = (cos(cos(cos(cos(cos(cos(cos(((cos(x3) + x1) * x1) * (x1 - x1)) + x1))) + x1)))), loss = 54.32507544970831, cost = 0.9128967357963423), PopMember(tree = (cos(cos(cos(cos(cos(cos(cos((cos(x3) + x1) * (x1 * (x1 - x1))) + x1))) + x1)))), loss = 54.32507544970831, cost = 0.9128967357963423), PopMember(tree = (cos(cos(cos(cos(cos(cos(cos((x1 - x1) * (x1 - x1)) + x1))) + x1)))), loss = 54.32507544970831, cost = 0.9128967357963423), PopMember(tree = (cos(cos(cos(cos(cos(cos(cos(cos(cos(cos(((cos(x3) + x1) * x1) * (x1 - x1)) + x1))) + x1))) + x1)))), loss = 54.38226533931227, cost = 0.9138577738272667), PopMember(tree = (cos(cos(cos(cos(cos(cos((cos(x3 * x1) + x1) * (x1 - x1)) + x1))) + x1))), loss = 55.03039868914447, cost = 0.9247492233931365), PopMember(tree = (cos(cos(cos(cos(cos(cos(cos((((cos(x3) + x1) * x1) * x1) - x1) + x1))) + x1)))), loss = 54.382047517548266, cost = 0.9138541134774983)], 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(x1) + (x2 * x2)) + -1.6990613111003912), loss = 2.8868093388781806, cost = 0.048510909566393215), PopMember(tree = (cos(x1) + x2), loss = 73.16537777527849, cost = 1.2294954768390776), PopMember(tree = (x2 * (cos(x1) + x2)), loss = 2.4577659235776452, cost = 0.04130112053065841), PopMember(tree = (cos(x1) + (x2 * x2)), loss = 0.0, cost = 0.0), PopMember(tree = (cos(x1) + (x2 * x1)), loss = 109.41259053175212, cost = 1.8386057621571992), PopMember(tree = (x2 + (x2 * x2)), loss = 4.416495432521932, cost = 0.07421626625702873), PopMember(tree = (cos(x1) + (x2 * x2)), loss = 0.0, cost = 0.0), PopMember(tree = (cos(x1) + (x2 * x2)), loss = 0.0, cost = 0.0), PopMember(tree = (cos(x1) + (x2 * x2)), loss = 0.0, cost = 0.0), PopMember(tree = (cos(x1) + ((x2 * x2) * x2)), loss = 2766.4758476073744, cost = 46.48878533593922) … PopMember(tree = ((cos(x1) + x2) * x2), loss = 2.4577659235776452, cost = 0.04130112053065841), PopMember(tree = (cos(x1) + (x2 * x2)), loss = 0.0, cost = 0.0), PopMember(tree = ((x2 * x2) + -0.8691635204736018), loss = 1.404115540849187, cost = 0.02359522712690537), PopMember(tree = (cos(x2) + (x2 * x2)), loss = 0.975895288448738, cost = 0.016399270795834052), PopMember(tree = (x1), loss = 61.24082222912067, cost = 1.029111257511351), PopMember(tree = (cos(x1) + (x2 * x2)), loss = 0.0, cost = 0.0), PopMember(tree = (x2 + (cos(x1) + (x2 * x2))), loss = 3.6355345128986323, cost = 0.061092737786854326), PopMember(tree = (x1 + (x2 * x2)), loss = 3.8782275687039935, cost = 0.06517103306046619), PopMember(tree = (cos(x1) + (x2 * x2)), loss = 0.0, cost = 0.0), PopMember(tree = (cos(cos(x1) + (x2 * x2)) + (x2 * x2)), loss = 1.2300791982725452, cost = 0.020670662223259143)], 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(x1) + (x2 * x2)), loss = 0.0, cost = 0.0), PopMember(tree = ((cos(x1) + (x2 * x2)) + (x2 * x2)), loss = 59.85569342030915, cost = 1.005835089779341), PopMember(tree = (cos(x1) + (x2 * x2)), loss = 0.0, cost = 0.0), PopMember(tree = (cos(x1) + (x2 * (x2 * x2))), loss = 2766.4758476073744, cost = 46.48878533593922), PopMember(tree = (cos(x1) + x2), loss = 73.16537777527849, cost = 1.2294954768390776), PopMember(tree = ((x2 * x2) + cos(x1)), loss = 0.0, cost = 0.0), PopMember(tree = ((cos(x1) + x2) * x2), loss = 2.4577659235776452, cost = 0.04130112053065841), PopMember(tree = ((x2 * x2) + (x2 * x2)), loss = 61.197892179895874, cost = 1.0283898466070778), PopMember(tree = (cos(x1) + cos(x1)), loss = 61.19789217989588, cost = 1.0283898466070778), PopMember(tree = ((cos(x1) + (x2 * x2)) + 0.449602783626068), loss = 0.20214266304430895, cost = 0.0033968729123839696) … PopMember(tree = (cos(x1) + ((cos(x1) + (x2 * x2)) * x2)), loss = 2713.7784386567546, cost = 45.603240452334205), PopMember(tree = (x2 * x2), loss = 0.49748078741114043, cost = 0.008359833524197393), PopMember(tree = (cos(x1) + (cos(x1) + (x2 * x2))), loss = 0.4974807874111405, cost = 0.008359833524197393), PopMember(tree = ((x2 * x2) + -0.340633910038642), loss = 0.6727649420844842, cost = 0.011305367079622503), PopMember(tree = ((x2 * x2) + cos(x2)), loss = 0.975895288448738, cost = 0.016399270795834052), PopMember(tree = (cos(x1) + (x1 * x2)), loss = 109.41259053175212, cost = 1.8386057621571992), PopMember(tree = (cos(x1) + (cos(x1) + (x2 * x2))), loss = 0.4974807874111405, cost = 0.008359833524197393), PopMember(tree = (x2 * x2), loss = 0.49748078741114043, cost = 0.008359833524197393), PopMember(tree = (x2 * x2), loss = 0.49748078741114043, cost = 0.008359833524197393), PopMember(tree = (cos(x1) + (x2 * x2)), loss = 0.0, cost = 0.0)], 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 = (((((x2 + (((x2 + x2) + 0.03376432325060092) * -0.18375070952407482)) * 0.27622431534030517) + x2) + (x2 * -0.18375070952407482)) * x2), loss = 0.494110854465407, cost = 0.008303204043970336), PopMember(tree = (((((x2 + (((x2 + x2) + 0.03376432325060092) * -0.18375070952407482)) * 0.27622431534030517) + x2) + (x2 * -0.18375070952407482)) * x2), loss = 0.494110854465407, cost = 0.008303204043970336), PopMember(tree = (x2 * (((x2 + (((x2 + x2) + 0.03376432325060092) * -0.18375070952407482)) * 0.27622431534030517) + x2)), loss = 2.4745255496568968, cost = 0.04158275489221728), PopMember(tree = ((x2 * ((((x2 + (((x2 + x2) + 0.03376432325060092) * -0.18375070952407482)) * 0.27622431534030517) + x2) + (x2 * -0.18375070952407482))) + 0.9688202319418074), loss = 1.2013053581237192, cost = 0.020187136990560548), PopMember(tree = (x2 * ((((x2 + (((x2 + x3) + 0.03376432325060092) * -0.18375070952407482)) * 0.27622431534030517) + x2) + (x2 * -0.18375070952407482))), loss = 0.7138865322480222, cost = 0.011996388033027371), PopMember(tree = (x2 * ((((x2 + -0.18375070952407482) * 0.27622431534030517) + x2) + (x2 * -0.18375070952407482))), loss = 1.1278272968011684, cost = 0.018952387074822323), PopMember(tree = (x2 * ((((x2 + (((x2 + x2) + 0.03376432325060092) * -0.18375070952407482)) * 0.27622431534030517) + x2) + (x2 * -0.18375070952407482))), loss = 0.494110854465407, cost = 0.008303204043970336), PopMember(tree = (x2 * (((x2 + ((x2 + 0.03376432325060092) * -0.18375070952407482)) * 0.27622431534030517) + (x2 + (x2 * -0.18375070952407482)))), loss = 0.6371048513322173, cost = 0.010706122988814331), PopMember(tree = (x2 * (((((1.6561276289622797 / x1) + (((x2 + x2) + 0.03376432325060092) * -0.18375070952407482)) * 0.27622431534030517) + x2) + (x2 * -0.18375070952407482))), loss = 10.551886656071712, cost = 0.17731743223694998), PopMember(tree = (x2 * ((((x2 + (((x2 + x2) * -0.18375070952407482) + 0.03376432325060092)) * 0.27622431534030517) + x2) + (x2 * -0.18375070952407482))), loss = 0.49851154896385497, cost = 0.008377154786046878) … PopMember(tree = (((((x2 + ((x2 + x2) + 0.03376432325060092)) * -0.05075641393158286) + x2) + (x2 * -0.18375070952407482)) * x2), loss = 6.965863528659054, cost = 0.11705670032989868), PopMember(tree = ((x2 * ((((x2 + (((x2 + x2) + 0.27902282906104164) * -0.3163842942875686)) * 0.3142098553064571) + x2) + (x2 * -0.13864248682858216))) + 0.14513130851947523), loss = 0.472073918687705, cost = 0.00793288800534759), PopMember(tree = (x2 * (((((x2 + (((x2 + x2) + 0.03376432325060092) * -0.18375070952407482)) * 0.27622431534030517) + x2) + (x2 * -0.18375070952407482)) * x2)), loss = 2719.3634905350946, cost = 45.697093531907186), PopMember(tree = (x2 * (((x2 + (((x2 + x2) + 0.03376432325060092) * -0.18375070952407482)) * 0.27622431534030517) + (x2 + (x2 * -0.18375070952407482)))), loss = 0.494110854465407, cost = 0.008303204043970336), PopMember(tree = (x2 * ((((x2 + (((x2 + x2) + 0.03376432325060092) * -0.18375070952407482)) * 0.27622431534030517) + x2) + (x2 * -0.18375070952407482))), loss = 0.494110854465407, cost = 0.008303204043970336), PopMember(tree = (x2 * (((x2 + (((x2 + x2) + 0.03376432325060092) * -0.18375070952407482)) * 0.27622431534030517) + (x2 + (x2 * -0.18375070952407482)))), loss = 0.494110854465407, cost = 0.008303204043970336), PopMember(tree = (x2 * ((((x2 + (((x2 + x2) + 0.5971201980760622) * -0.14813756080935875)) * 0.6127777010781589) + x2) + (x2 * -0.4426635350010965))), loss = 0.4849675742061219, cost = 0.00814955730470534), PopMember(tree = (x2 * ((((x2 + ((((x2 * -0.18375070952407482) + x2) + 0.03376432325060092) * -0.18375070952407482)) * 0.27622431534030517) + x2) + (x2 * -0.18375070952407482))), loss = 0.6969211458858241, cost = 0.01171129600686144), PopMember(tree = (x2 * (((x2 + (((x2 + x2) + 0.03376432325060092) * -0.18375070952407482)) * 0.27622431534030517) + (x2 + ((x2 + x2) * -0.18375070952407482)))), loss = 2.555670121338286, cost = 0.04294633541193712), PopMember(tree = (x2 * ((((x2 + (((x2 + x2) + 0.03376432325060092) * -0.18375070952407482)) * 0.27622431534030517) + x2) + (x2 * -0.18375070952407482))), loss = 0.494110854465407, cost = 0.008303204043970336)], 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 = (x2 + (x2 * (cos(cos(x4)) + x2))), loss = 11.927569980936514, cost = 0.20043487489786543), PopMember(tree = ((cos(x2) * x2) + (cos(x2) * x2)), loss = 67.46580636337627, cost = 1.1337179727253375), PopMember(tree = ((x2 * cos(x2)) + (x2 * (cos(cos(x4)) + x2))), loss = 1.7250020472565613, cost = 0.02898751129467558), PopMember(tree = ((cos(x2) * x2) + (x2 * (cos(cos(x4)) + x2))), loss = 1.7250020472565613, cost = 0.02898751129467558), PopMember(tree = ((cos(x2) * cos(x4)) + (x2 * (cos(cos(x4)) + x2))), loss = 2.6402025771237163, cost = 0.044366847069151616), PopMember(tree = ((cos(x2) * (x2 + -0.7911210254226483)) + (x2 * (cos(cos(x4)) + x2))), loss = 2.353039834223508, cost = 0.03954126830159682), PopMember(tree = (x2), loss = 73.10162072272622, cost = 1.228424082005713), PopMember(tree = (cos(x2 * x2) + (x2 * (cos(cos(x4)) + x2))), loss = 3.163319330900151, cost = 0.05315747594558975), PopMember(tree = ((cos(x2) * x2) + (x2 * ((x2 * (cos(cos(x4)) + x2)) + x2))), loss = 1933.399993250513, cost = 32.489500073700135), PopMember(tree = ((cos(x2) * x2) + (cos(cos(x4)) + (x2 * x2))), loss = 2.1854046154811058, cost = 0.03672427002358953) … PopMember(tree = ((cos(x2) * x2) + (x2 * (cos(x2) + x2))), loss = 6.255861167665281, cost = 0.10512558320961143), PopMember(tree = (((cos(x2) * x2) + (x2 * (cos(cos(x4)) + x2))) + 0.211562706619909), loss = 1.6489716199511755, cost = 0.02770987056737383), PopMember(tree = ((cos(x2) * x2) + (x2 * (cos(cos(x4)) + x2))), loss = 1.7250020472565613, cost = 0.02898751129467558), PopMember(tree = ((cos(x2) * x2) + (x2 * (cos(cos(x2)) + x2))), loss = 2.544200476629908, cost = 0.04275359566646331), PopMember(tree = ((x2 * (x2 + cos(cos(x4)))) + (x2 * (cos(cos(x4)) + x2))), loss = 58.42112497677253, cost = 0.9817281218913093), PopMember(tree = ((x2 * cos(x2)) + (x2 * (cos(cos(x4)) + x2))), loss = 1.7250020472565613, cost = 0.02898751129467558), PopMember(tree = ((cos(x2) * x2) + ((cos(x2) * x2) * (cos(cos(x4)) + x2))), loss = 92.34974313019131, cost = 1.5518759680919139), PopMember(tree = ((x2 * cos(x2)) + (x2 * (x2 + 0.5474737570084879))), loss = 1.4432796756804327, cost = 0.024253354346274455), PopMember(tree = ((cos(x2) * x2) + (x2 * (cos(cos(x4)) + x2))), loss = 1.7250020472565613, cost = 0.02898751129467558), PopMember(tree = ((cos((cos(x2) * x2) + (x2 * (cos(cos(x4)) + x2))) * x2) + (x2 * (cos(cos(x4)) + x2))), loss = 6.176453589687353, cost = 0.1037911917129875)], 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(x5 + x5)) + (cos(x3) + x5)) + cos(x3)), loss = 50.08491109299839, cost = 0.8416435959076748), PopMember(tree = (((cos(x3) + cos(cos(x5 + x5))) + x5) + x3), loss = 50.52082868089159, cost = 0.8489689008385869), PopMember(tree = ((cos(x3) + (cos(cos(x3 + x5)) + x5)) + x3), loss = 50.95536118300856, cost = 0.8562709303249009), PopMember(tree = ((cos(x3) + (cos(x3) + x5)) + x3), loss = 54.34311130831235, cost = 0.9131998163960584), PopMember(tree = (x3 + (x5 + x3)), loss = 65.9434899207987, cost = 1.1081364581158508), PopMember(tree = (((cos(x3) + cos(cos(x5 + x5))) + cos(x1)) + x3), loss = 53.33219336857707, cost = 0.8962120132553771), PopMember(tree = ((((((cos(x3) + cos(cos(x5 + x5))) + x5) + x3) + cos(cos(x5 + x5))) + x3) + x5), loss = 59.90683549755515, cost = 1.006694498348832), PopMember(tree = (((cos(cos(x5 + x5)) + cos(cos(x5 + x5))) + x5) + x3), loss = 48.525844482859576, cost = 0.8154445191921278), PopMember(tree = ((cos(cos(x5 + x5)) + (cos(x3) + x5)) + x3), loss = 50.52082868089159, cost = 0.8489689008385869), PopMember(tree = ((cos(x3) + cos(cos(x5 + x5))) + (x5 + x3)), loss = 50.52082868089159, cost = 0.8489689008385869) … PopMember(tree = ((cos(cos(x5 + cos(cos(x5 + x5)))) + (cos(x3) + x5)) + x3), loss = 51.00456866768734, cost = 0.8570978293539061), PopMember(tree = ((cos(x3) + (cos(cos(x5 + x5)) + x5)) + x3), loss = 50.52082868089159, cost = 0.8489689008385869), PopMember(tree = (((cos(x3) + cos(cos(x5 + x5))) + x5) + x3), loss = 50.52082868089159, cost = 0.8489689008385869), PopMember(tree = ((((cos(x3) + cos(cos(x5 + x5))) + x3) + x5) - -0.16906151061824798), loss = 49.671524333699125, cost = 0.8346969065554422), PopMember(tree = (((cos(x3) + cos(cos(x5 + x5))) + x5) + x3), loss = 50.52082868089159, cost = 0.8489689008385869), PopMember(tree = ((cos(x3) + (cos(cos(x5 + x5)) + x5)) + x3), loss = 50.52082868089159, cost = 0.8489689008385869), PopMember(tree = (((cos(x3) + cos(cos(x5 + x5))) + x5) + cos(cos(x5 + x5))), loss = 46.62833683643496, cost = 0.7835581661179705), PopMember(tree = ((cos(x3) + x3) + (x5 + x3)), loss = 63.48633170147261, cost = 1.0668455496506704), PopMember(tree = (((cos(x3) + x5) + x5) + x3), loss = 59.706274369104406, cost = 1.003324202072671), PopMember(tree = (((x3 + cos(cos(x5 + x5))) + x5) + x3), loss = 61.12563913258325, cost = 1.0271756822364437)], 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.9637643732228698 / x2) + x3) / (((0.5852550604344333 / x2) / (0.5852550604344333 / ((-0.9637643732228698 / x2) / 0.5642511110967924))) + x3)), loss = 167.17711238150696, cost = 2.8093001055142657), PopMember(tree = (((((-0.9637643732228698 / x2) + x3) / x2) + x3) / ((-1.0762220519877785 / x2) + x3)), loss = 90.00337857294288, cost = 1.5124468733770196), PopMember(tree = (((-0.9637643732228698 / x2) + x3) / (((0.5852550604344333 / x2) / -0.5438051184265079) + x3)), loss = 52.974113097276955, cost = 0.8901947126236354), PopMember(tree = (-0.9637643732228698 / (((0.5852550604344333 / x2) / -0.5438051184265079) + x3)), loss = 68.0379750607146, cost = 1.143332886865835), PopMember(tree = (-0.9637643732228698 / ((-1.0762220519877785 / x2) + x3)), loss = 68.0379750607146, cost = 1.143332886865835), PopMember(tree = (((-0.9637643732228698 / x2) + x3) / ((-1.0762220519877785 / x2) + x3)), loss = 52.974113097276955, cost = 0.8901947126236354), PopMember(tree = (((((0.5852550604344333 / x2) / -0.6072594886209739) + x3) / ((-1.0762220519877785 / x2) + x3)) + x4), loss = 53.751901326677334, cost = 0.9032649261462609), PopMember(tree = (((-0.9637643732228698 / x2) + x3) / ((-0.5438051184265079 / x2) + x3)), loss = 59.11961425484582, cost = 0.9934657693158795), PopMember(tree = ((((0.5852550604344333 / x2) / -0.6072594886209739) + x3) / (((0.5852550604344333 / (0.5852550604344333 / (-0.6072594886209739 / (-0.9637643732228698 / x2)))) / x2) + x3)), loss = 2034.0415082287595, cost = 34.18071374894471), PopMember(tree = ((x3 + 0.5642511110967924) / ((-1.0762220519877785 / x2) + x3)), loss = 63.42614966240747, cost = 1.0658342305395354) … PopMember(tree = ((((-0.5246975144445825 / x2) + x3) / ((-0.893093240196077 / x2) + x3)) + 2.9722439160595227), loss = 44.86709579263966, cost = 0.7539616826060473), PopMember(tree = (((-0.9637643732228698 / x2) + x3) / ((-0.9291762774726676 / x2) + x3)), loss = 53.09042137931128, cost = 0.8921491958919285), PopMember(tree = (((-0.9637643732228698 / x2) + x3) / (((0.5852550604344333 / x2) / -0.5438051184265079) + x3)), loss = 52.974113097276955, cost = 0.8901947126236354), PopMember(tree = (((((-0.9637643732228698 / x2) + x3) / x2) + x3) / (((0.5852550604344333 / x2) / -0.5438051184265079) + x3)), loss = 90.00337857294288, cost = 1.5124468733770196), PopMember(tree = (((-0.9637643732228698 / x2) + x3) / (((0.5852550604344333 / x2) / 1.0) + x3)), loss = 58.24617339926269, cost = 0.9787881770737634), PopMember(tree = (((-0.9637643732228698 / x2) + x3) / (((0.5852550604344333 / x2) / 1.0) + x3)), loss = 58.24617339926269, cost = 0.9787881770737634), PopMember(tree = (((-0.9637643732228698 / x2) + x3) / ((-1.0762220519877785 / x2) + x3)), loss = 52.974113097276955, cost = 0.8901947126236354), PopMember(tree = (((-0.9637643732228698 / x2) + x3) / ((-1.0762220519877785 / x2) + x3)), loss = 52.974113097276955, cost = 0.8901947126236354), PopMember(tree = ((((-0.9637643732228698 / x2) + x3) / ((0.5852550604344333 / x2) / -0.5438051184265079)) + x3), loss = 58.88157948576475, cost = 0.9894657534502538), PopMember(tree = (-1.0762220519877785 / ((-1.0762220519877785 / x2) + x3)), loss = 70.00787546700559, cost = 1.1764357520871036)], 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) + (x2 * x2)) + cos(cos(x1) + x1)) + (x2 * x2)), loss = 1.3155096339174037, cost = 0.022106263834342957), PopMember(tree = ((cos(x1 + cos(cos(x1) + x1)) + x2) * x2), loss = 2.8462142629609595, cost = 0.04782873633446566), PopMember(tree = ((cos((cos(x1) + cos(cos(x1) + x1)) + (x2 * x2)) + cos(cos(x1) + x1)) + (x2 * x2)), loss = 0.6616548147932859, cost = 0.011118668785060425), PopMember(tree = (cos(x1) + ((cos(x1) + (x2 * x2)) * x2)), loss = 2713.7784386567546, cost = 45.603240452334205), PopMember(tree = (cos(cos(x1) + (cos(x1) + x1)) + (x2 * x2)), loss = 0.8005469003664802, cost = 0.013452657840723966), PopMember(tree = (cos(x1 + cos(cos(x1) + x1)) + (x2 * x2)), loss = 0.0521477086851852, cost = 0.0008763075365083502), PopMember(tree = ((cos(x1) + (x2 * x2)) + (x2 * x2)), loss = 59.85569342030915, cost = 1.005835089779341), PopMember(tree = (cos(x1)), loss = 59.85569342030917, cost = 1.0058350897793413), PopMember(tree = (x1 + cos(cos(x1) + x1)), loss = 60.581747945347246, cost = 1.0180359528325555), PopMember(tree = (x1), loss = 61.24082222912067, cost = 1.029111257511351) … PopMember(tree = ((cos(x1 + cos(cos(x1) + x1)) + x2) * x2), loss = 2.8462142629609595, cost = 0.04782873633446566), PopMember(tree = (cos(cos(x1) + (x2 * x2)) + (x2 * x2)), loss = 1.2300791982725452, cost = 0.020670662223259143), PopMember(tree = (cos(x1) + (x2 * (cos(x1 + cos(cos(x1 + x1))) + (x2 * x2)))), loss = 2695.9492388004237, cost = 45.30363261532765), PopMember(tree = (x2), loss = 73.10162072272622, cost = 1.228424082005713), PopMember(tree = ((cos(x1) + cos(cos(x1 + x1))) + (x2 * x2)), loss = 0.6418218524627635, cost = 0.010785389053319104), PopMember(tree = (cos(x1 + cos(cos(x1) + x1)) + ((x2 * x2) * x2)), loss = 2766.964459152852, cost = 46.49699612775583), PopMember(tree = ((cos(x1) + cos((cos(x1) + cos(cos(x1) + x1)) + (x2 * x2))) + (x2 * x2)), loss = 0.48524417555322347, cost = 0.008154205406245847), PopMember(tree = (x1), loss = 61.24082222912067, cost = 1.029111257511351), PopMember(tree = (cos(x1 + cos((cos(x1) + x1) + x1)) + (x2 * x2)), loss = 0.24756276488844642, cost = 0.004160127493621246), PopMember(tree = ((cos(x1) + cos(cos(x1))) + (x2 * x2)), loss = 0.6109604681116626, cost = 0.010266784029707902)], 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 = (3.7225086756767753), loss = 45.651385441760546, cost = 0.7671411481599265), PopMember(tree = (cos(-0.003889348031457955)), loss = 53.06348008020823, cost = 0.89169646529182), PopMember(tree = (x2 * x2), loss = 0.49748078741114043, cost = 0.008359833524197393), PopMember(tree = (2.7360893254815553 - cos(x2)), loss = 43.086235868640124, cost = 0.7240355168700285), PopMember(tree = ((x2 * x2) + 0.08697415312478668), loss = 0.4899162835114076, cost = 0.00823271707086862), PopMember(tree = (cos(x1) + (x2 * x2)), loss = 0.0, cost = 0.0), PopMember(tree = (((x2 * x2) + 0.1468713591919842) * 0.9841642582774209), loss = 0.4782206931316482, cost = 0.008036180458769894), PopMember(tree = (cos(x1) + ((x2 * x2) + 0.0)), loss = 0.0, cost = 0.0), PopMember(tree = (cos(cos(x1) + x1) + (x2 * x2)), loss = 0.14563941322756427, cost = 0.0024473734060769157), PopMember(tree = ((x2 * x2) + (cos(x1) + (-0.010733866520452589 - -0.010733866520452589))), loss = 0.0, cost = 0.0) … PopMember(tree = ((cos(x1) + (x2 * x2)) + (((x3 + cos(-0.36530227838165147 + x2)) + 0.21707490360586335) * (cos(x1) - cos(x1)))), loss = 0.0, cost = 0.0), PopMember(tree = ((cos(x1) + (x2 * x2)) + ((x3 + cos(cos(x5 * (x3 * x1)))) * (cos(x1) - cos(x1)))), loss = 0.0, cost = 0.0), PopMember(tree = (cos(x1) + ((x2 * x2) + (((x5 + cos(cos(cos(x5 * x1)))) + x2) * (cos(x1) - cos(x1))))), loss = 0.0, cost = 0.0), PopMember(tree = (((0.0 - (0.0 + 0.0)) + ((0.0 + (0.0 + ((0.0 + (-0.0 + x2)) * x2))) + (cos(x1) + 0.0))) + 0.0), loss = 0.0, cost = 0.0), PopMember(tree = (cos(x1) + ((x2 * x2) + ((((x3 + x2) + cos(cos(cos(x5 * x1)))) + x2) * (cos(x1) - cos(x1))))), loss = 0.0, cost = 0.0), PopMember(tree = ((cos(x1) + (x2 * x2)) + ((x3 + ((cos(cos(x3) * (x3 * x1)) + -0.7556702287563055) + x2)) * (cos(x1) - cos(x1)))), loss = 0.0, cost = 0.0), PopMember(tree = (cos(x1) + ((x2 * x2) + ((((x3 + (x2 * x2)) + cos(cos(cos(x5 * x1)))) + x2) * (cos(x1) - cos(x1))))), loss = 0.0, cost = 0.0), PopMember(tree = ((cos(x1) + (x2 * x2)) + ((x3 + (((x5 * 0.38727530078745775) + cos(cos(x3) * (x3 * x1))) + x2)) * (cos(x1) - cos(x1)))), loss = 0.0, cost = 0.0), PopMember(tree = ((cos(x1) + (x2 * x2)) + ((((((0.7906411145998129 - x5) + x2) + x3) + cos(cos(cos(x5 * x1)))) + x2) * (cos(x1) - cos(x1)))), loss = 0.0, cost = 0.0), PopMember(tree = ((cos(x1) + (x2 * x2)) + ((x3 + (((cos(x1) - cos(x1)) + cos(cos(x3) * (x3 * x1))) + x2)) * (cos(x1) - cos(x1)))), loss = 0.0, cost = 0.0)], 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, 0.01, 10) => 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 = 4, equations = Expression{Float64, Node{Float64, 2}, @NamedTuple{operators::OperatorEnum{Tuple{Tuple{typeof(cos)}, Tuple{typeof(+), typeof(-), typeof(*), typeof(/)}}}, variable_names::Vector{String}}}[3.7225086756767753, x2 * x2, (x2 * x2) + 0.08697415312478668, cos(x1) + (x2 * x2)], equation_strings = ["3.7225086756767753", "x2 * x2", "(x2 * x2) + 0.08697415312478668", "cos(x1) + (x2 * x2)"], losses = [45.651385441760546, 0.49748078741114043, 0.4899162835114076, 0.0], complexities = [1, 3, 5, 6], scores = [0.0, 2.2596161485979005, 0.007661205526222606, 744.4400719213812]))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 IntTest PassedShow raw source code
#=
# 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 Intwhich uses Literate.jl to generate this page.