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