From 90b911d5a519922ac7289a427583882a7f72b2f4 Mon Sep 17 00:00:00 2001 From: Jonathan Rampersad Date: Thu, 29 Jan 2026 17:35:14 -0400 Subject: [PATCH] fix: Implemented Relative Mutation --- src/polysolve/__init__.py | 8 ++++---- 1 file changed, 4 insertions(+), 4 deletions(-) diff --git a/src/polysolve/__init__.py b/src/polysolve/__init__.py index 0e3c66d..917a8b5 100644 --- a/src/polysolve/__init__.py +++ b/src/polysolve/__init__.py @@ -693,7 +693,7 @@ class Function: # Use mutation_strength noise = np.random.normal(0, options.mutation_strength, mutation_size) - dst_solutions[idx_cross_end:idx_mut_end] = mutation_candidates + noise + dst_solutions[idx_cross_end:idx_mut_end] = mutation_candidates * (1.0 + noise) # 4. New Randoms: Add new blood to prevent getting stuck dst_solutions[idx_mut_end:] = np.random.uniform(min_r, max_r, random_size) @@ -805,7 +805,7 @@ class Function: noise_real = np.random.normal(0, options.mutation_strength, mutation_size) noise_imag = np.random.normal(0, options.mutation_strength, mutation_size) - dst_solutions[idx_cross_end:idx_mut_end] = (mut_candidates.real + noise_real) + 1j * (mut_candidates.imag + noise_imag) + dst_solutions[idx_cross_end:idx_mut_end] = (mut_candidates.real * (1.0 + noise_real)) + 1j * (mut_candidates.imag * (1.0 + noise_imag)) # 4. New Randoms: Add new blood to prevent getting stuck rand_real = np.random.uniform(min_r, max_r, random_size) @@ -935,7 +935,7 @@ class Function: # Use mutation_strength noise = cupy.random.normal(0, options.mutation_strength, mutation_size) - d_dst_solutions[idx_cross_end:idx_mut_end] = d_mutation_candidates + noise + d_dst_solutions[idx_cross_end:idx_mut_end] = d_mutation_candidates * (1.0 + noise) # 4. New Randoms d_dst_solutions[idx_mut_end:] = cupy.random.uniform( @@ -1100,7 +1100,7 @@ class Function: noise_imag = cupy.random.normal(0, options.mutation_strength, mutation_size) # Apply Mutation: Scale Real/Imag independently to allow "rotation" off the line - d_dst_solutions[idx_cross_end:idx_mut_end] = (mut_candidates.real + noise_real) + 1j * (mut_candidates.imag + noise_imag) + d_dst_solutions[idx_cross_end:idx_mut_end] = (mut_candidates.real * (1.0 + noise_real)) + 1j * (mut_candidates.imag * (1.0 + noise_imag)) # 4. Random Injection: Fresh genetic material rand_real = cupy.random.uniform(min_r, max_r, random_size, dtype=cupy.float64)