@@ -338,7 +338,7 @@ def mutate_de_2(best_idx, randos_idx, F, min_idx, max_idx, best):
338
338
def binomial_crossover (donor_vector , target , CR ):
339
339
"""Performs binomial crossover of donor_vector with target given crossover rate CR."""
340
340
# Create the trial vector by mixing parameters from the target and donor vectors
341
- trial_vector = np .copy (target )
341
+ trial_vector = target .copy ()
342
342
dimensions = len (donor_vector )
343
343
344
344
# Generate a random array of floats for comparison with the crossover rate CR
@@ -350,9 +350,11 @@ def binomial_crossover(donor_vector, target, CR):
350
350
crossover_points [np .random .randint (0 , dimensions )] = True
351
351
352
352
# Apply crossover
353
- trial_vector [crossover_points ] = np .array (donor_vector )[crossover_points ]
353
+ for i , d in enumerate (donor_vector ):
354
+ if crossover_points [i ]:
355
+ trial_vector [i ] = donor_vector [i ]
354
356
355
- return list ( trial_vector )
357
+ return trial_vector
356
358
357
359
358
360
def exponential_crossover (donor_vector , target , CR ):
@@ -363,7 +365,7 @@ def exponential_crossover(donor_vector, target, CR):
363
365
from the donor vector and the rest from the target vector.
364
366
"""
365
367
dimensions = len (target )
366
- trial_idx = np .copy (target )
368
+ trial_vector = target .copy ()
367
369
368
370
# 1. Select a random starting point for the crossover block.
369
371
start_point = np .random .randint (0 , dimensions )
@@ -374,10 +376,10 @@ def exponential_crossover(donor_vector, target, CR):
374
376
l = 0
375
377
while np .random .rand () < CR and l < dimensions :
376
378
crossover_point = (start_point + l ) % dimensions
377
- trial_idx [crossover_point ] = np . array ( donor_vector ) [crossover_point ]
379
+ trial_vector [crossover_point ] = donor_vector [crossover_point ]
378
380
l += 1
379
381
380
- return list ( trial_idx )
382
+ return trial_vector
381
383
382
384
383
385
def repair (trial_vector , searchspace ):
0 commit comments