Glowworm Swarm Optimization

Example:


from bejoor.swarm_based import GlowwormSwarmOptimization
import math
def rastrigin_function(sol):
    n = len(sol)
    return 10 * n + sum(x**2 - 10 * math.cos(2 * math.pi * x) for x in sol)

solution_vector = [{"type": "float", "lower_bound": -5.12, "upper_bound": 5.12}] * 7

gso = GlowwormSwarmOptimization(objective_function=rastrigin_function, solution_vector_size=7,
                                solution_vector=solution_vector, optimization_side="min",
                                luciferin_decay=0.4, luciferin_enhancement=0.6, sensing_range=3.0, neighbor_count=5,
                                step_size=0.02, population_size=50, epochs=100)
gso.run()

print(f'Best Global Objective Value: {gso.global_best_objective_value}')
print(f'Best Global Solution: {gso.global_best_solution}')

Parameters:

  • objective_function: Objective function needs to be optimized.
  • solution_vector_size: Vector size of the candidate solutions.
  • solution_vector: A vector which determines the types of each variable in solution vectors.
  • optimization_side: Determines maximize or minimize the objective function.
  • target_objective_value: Target Objective value.
  • target_objective_lower_bound: Target Objective lower bound.
  • target_objective_upper_bound: Target Objective upper bound.
  • population_size: Number of individuals in the population.
  • epochs: Number of generations to run the algorithm.
  • luciferin_decay: Decay rate of luciferin (light intensity).
  • luciferin_enhancement: Enhancement rate of luciferin after objective evaluation.
  • sensing_range: The radius within which glowworms sense each other.
  • neighbor_count: Maximum number of neighbors a glowworm can consider.
  • step_size: The step size used to move towards neighbors.