SPEA2¶
SPEA2 (Strength Pareto Evolutionary Algorithm 2) assigns each individual a strength-based fitness that accounts for both dominance and density, and uses an external archive to keep the best solutions found across generations.
from jmetal.algorithm.multiobjective import SPEA2
from jmetal.operator.crossover import SBXCrossover
from jmetal.operator.mutation import PolynomialMutation
from jmetal.problem import ZDT1
from jmetal.util.solution import (
print_function_values_to_file,
print_variables_to_file,
)
from jmetal.util.termination_criterion import StoppingByEvaluations
def main():
problem = ZDT1()
max_evaluations = 25000
algorithm = SPEA2(
problem=problem,
population_size=100,
offspring_population_size=100,
mutation=PolynomialMutation(
probability=1.0 / problem.number_of_variables(), distribution_index=20
),
crossover=SBXCrossover(probability=1.0, distribution_index=20),
termination_criterion=StoppingByEvaluations(max_evaluations=max_evaluations),
)
algorithm.run()
front = algorithm.result()
# Save results to file
print_function_values_to_file(front, "FUN." + algorithm.label)
print_variables_to_file(front, "VAR." + algorithm.label)
print(f"Algorithm: {algorithm.get_name()}")
print(f"Problem: {problem.name()}")
print(f"Computing time: {algorithm.total_computing_time}")
if __name__ == "__main__":
main()