Skip to content

Commit cbd3240

Browse files
author
Maximilian Reißmann
committed
adapt sbp for mitigating sens on noise
1 parent dab8e31 commit cbd3240

4 files changed

Lines changed: 20 additions & 16 deletions

File tree

paper/ConstraintViaSBP.jl

Lines changed: 5 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -120,16 +120,16 @@ function main()
120120
start_time = time_ns()
121121

122122
regressor = GepRegressor(num_cols - 1;
123-
considered_dimensions=phy_dims,
123+
considered_dimensions=phy_dims, gene_count=3, head_len=6,
124124
entered_non_terminals=[:+, :-, :*, :/, :sqrt, :sin, :cos, :exp, :log],
125-
max_permutations_lib=5000, rounds=7, number_of_objectives=1)
125+
max_permutations_lib=10000, rounds=5, number_of_objectives=1)
126126

127127

128128
@inline function loss_new_(elem, validate::Bool)
129129
try
130130
if isnan(mean(elem.fitness)) && elem.dimension_homogene || validate
131131
y_pred = elem.compiled_function(x_train', regressor.operators_)
132-
fit = sqrt(get_loss_function("mse")(y_train, y_pred))
132+
fit = sqrt(get_loss_function("rmse")(y_train, y_pred))
133133
elem.fitness = (fit+length(elem.expression_raw)*0.1*fit,)
134134
end
135135
catch e
@@ -139,8 +139,8 @@ function main()
139139

140140

141141
#perform the regression by entering epochs, population_size, the feature cols, the target col and the loss function
142-
fit!(regressor, epochs, population_size, loss_new_; target_dimension=target_dim,
143-
break_condition=break_condition, correction_amount=0.5)
142+
fit!(regressor, epochs, population_size, loss_new_; target_dimension=target_dim,
143+
break_condition=break_condition, correction_amount=0.5, cycles=30)
144144

145145
end_time = (time_ns() - start_time) / 1e9
146146
elem = regressor.best_models_[1]

src/Gep.jl

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -216,7 +216,7 @@ Applies correction operations to ensure dimensional homogeneity in chromosomes.
216216
Threads.@threads for i in 1:pop_amount
217217
if !(population[i].dimension_homogene) && population[i].compiled && isnan(mean(population[i].fitness))
218218
distance, correction = correction_callback(population[i].genes, population[i].toolbox.gen_start_indices,
219-
population[i].expression_raw)
219+
population[i].expression_raw, epoch)
220220
if correction
221221
compile_expression!(population[i]; force_compile=true)
222222
population[i].dimension_homogene = true

src/RegressionWrapper.jl

Lines changed: 4 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -713,13 +713,13 @@ function fit!(regressor::GepRegressor, epochs::Int, population_size::Int, x_trai
713713
)
714714

715715
correction_callback = if !isnothing(target_dimension)
716-
(genes, start_indices, expression) -> correct_genes!(
716+
(genes, start_indices, expression, generation) -> correct_genes!(
717717
genes,
718718
start_indices,
719719
expression,
720720
target_dimension,
721721
regressor.token_dto_;
722-
cycles=cycles
722+
cycles=generation>1 ? 10 : cycles
723723
)
724724
else
725725
nothing
@@ -792,13 +792,13 @@ function fit!(regressor::GepRegressor, epochs::Int, population_size::Int, loss_f
792792
)
793793

794794
correction_callback = if !isnothing(target_dimension)
795-
(genes, start_indices, expression) -> correct_genes!(
795+
(genes, start_indices, expression, generation) -> correct_genes!(
796796
genes,
797797
start_indices,
798798
expression,
799799
target_dimension,
800800
regressor.token_dto_;
801-
cycles=cycles
801+
cycles=generation>1 ? 10 : cycles
802802
)
803803
else
804804
nothing

src/Sbp.jl

Lines changed: 10 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -1164,11 +1164,11 @@ function calculate_vector_dimension!(tree::TempComputeTree)
11641164
tree.vector_dimension = function_op(dims...)
11651165

11661166
#needs to be revised
1167-
#if length(dims) == 2 && has_inf16(tree.vector_dimension)
1168-
# tree.symbol = rand(point_operations)
1169-
# function_op = tokenLib.physical_operation_dict[][tree.symbol]
1170-
# tree.vector_dimension = function_op(dims...)
1171-
#end
1167+
if length(dims) == 2 && has_inf16(tree.vector_dimension)
1168+
tree.symbol = rand(point_operations)
1169+
function_op = tokenLib.physical_operation_dict[][tree.symbol]
1170+
tree.vector_dimension = function_op(dims...)
1171+
end
11721172
tree.modified = false
11731173
return tree.vector_dimension
11741174
end
@@ -1197,6 +1197,10 @@ function enforce_changes!(tree::TempComputeTree, expected_dim::Vector{Float16},
11971197
if isnothing(exchange_symbol) || isempty(exchange_symbol)
11981198
return false
11991199
end
1200+
1201+
1202+
1203+
12001204
tree.depend_on[index] = rand(exchange_symbol)
12011205
tree.modified = true
12021206
calculate_vector_dimension!(tree)
@@ -1451,7 +1455,7 @@ function propagate_necessary_changes!(
14511455
return true
14521456
end
14531457

1454-
if check_crit_up!(tree.depend_on_total_number + 1, expected_dim, tree) && distance_to_change <= 0
1458+
if check_crit_up!(tree.depend_on_total_number + 1, expected_dim, tree) && distance_to_change <= 0 && rand() > 0.01
14551459
return enforce_changes!(tree, expected_dim)
14561460
end
14571461

0 commit comments

Comments
 (0)