Skills › Scientific Agent Skills › pymoo › multi_objective_example.py
multi_objective_example.py
63 lines · skills/pymoo/scripts/multi_objective_example.py at 5f2bc03
1"""
2Multi-objective optimization example using pymoo.
4This script demonstrates multi-objective optimization using
5NSGA-II on the ZDT1 benchmark problem.
6"""
8from pymoo.algorithms.moo.nsga2 import NSGA2
9from pymoo.problems import get_problem
10from pymoo.optimize import minimize
11from pymoo.visualization.scatter import Scatter
12import matplotlib.pyplot as plt
15def run_multi_objective_optimization():
16 """Run multi-objective optimization example."""
18 # Define the problem - ZDT1 (bi-objective)
19 problem = get_problem("zdt1")
21 # Configure NSGA-II algorithm
22 algorithm = NSGA2(
23 pop_size=40,
24 eliminate_duplicates=True
25 )
27 # Run optimization
28 result = minimize(
29 problem,
30 algorithm,
31 ('n_gen', 50),
32 seed=1,
33 verbose=True
34 )
36 # Print results summary
37 print("\n" + "="*60)
38 print("MULTI-OBJECTIVE OPTIMIZATION RESULTS")
39 print("="*60)
40 print(f"Number of solutions in approximate Pareto front: {len(result.F)}")
41 print(f"Completed generations: {result.algorithm.n_gen - 1}")
42 print(f"Number of function evaluations: {result.algorithm.evaluator.n_eval}")
43 print("\nFirst 5 solutions (decision variables):")
44 print(result.X[:5])
45 print("\nFirst 5 solutions (objective values):")
46 print(result.F[:5])
47 print("="*60)
49 # Visualize results
50 plot = Scatter(title="ZDT1 - NSGA-II Results")
51 plot.add(result.F, color="red", alpha=0.7, s=30, label="Approximate Front")
53 # Add true approximate Pareto front for comparison
54 pf = problem.pareto_front()
55 plot.add(pf, color="black", alpha=0.3, label="Analytic Pareto Front")
57 plot.show()
59 return result
62if __name__ == "__main__":
63 result = run_multi_objective_optimization()