Initial commit
This commit is contained in:
63
skills/pymoo/scripts/multi_objective_example.py
Normal file
63
skills/pymoo/scripts/multi_objective_example.py
Normal file
@@ -0,0 +1,63 @@
|
||||
"""
|
||||
Multi-objective optimization example using pymoo.
|
||||
|
||||
This script demonstrates multi-objective optimization using
|
||||
NSGA-II on the ZDT1 benchmark problem.
|
||||
"""
|
||||
|
||||
from pymoo.algorithms.moo.nsga2 import NSGA2
|
||||
from pymoo.problems import get_problem
|
||||
from pymoo.optimize import minimize
|
||||
from pymoo.visualization.scatter import Scatter
|
||||
import matplotlib.pyplot as plt
|
||||
|
||||
|
||||
def run_multi_objective_optimization():
|
||||
"""Run multi-objective optimization example."""
|
||||
|
||||
# Define the problem - ZDT1 (bi-objective)
|
||||
problem = get_problem("zdt1")
|
||||
|
||||
# Configure NSGA-II algorithm
|
||||
algorithm = NSGA2(
|
||||
pop_size=100,
|
||||
eliminate_duplicates=True
|
||||
)
|
||||
|
||||
# Run optimization
|
||||
result = minimize(
|
||||
problem,
|
||||
algorithm,
|
||||
('n_gen', 200),
|
||||
seed=1,
|
||||
verbose=True
|
||||
)
|
||||
|
||||
# Print results summary
|
||||
print("\n" + "="*60)
|
||||
print("MULTI-OBJECTIVE OPTIMIZATION RESULTS")
|
||||
print("="*60)
|
||||
print(f"Number of solutions in Pareto front: {len(result.F)}")
|
||||
print(f"Number of generations: {result.algorithm.n_gen}")
|
||||
print(f"Number of function evaluations: {result.algorithm.evaluator.n_eval}")
|
||||
print("\nFirst 5 solutions (decision variables):")
|
||||
print(result.X[:5])
|
||||
print("\nFirst 5 solutions (objective values):")
|
||||
print(result.F[:5])
|
||||
print("="*60)
|
||||
|
||||
# Visualize results
|
||||
plot = Scatter(title="ZDT1 - NSGA-II Results")
|
||||
plot.add(result.F, color="red", alpha=0.7, s=30, label="Obtained Pareto Front")
|
||||
|
||||
# Add true Pareto front for comparison
|
||||
pf = problem.pareto_front()
|
||||
plot.add(pf, color="black", alpha=0.3, label="True Pareto Front")
|
||||
|
||||
plot.show()
|
||||
|
||||
return result
|
||||
|
||||
|
||||
if __name__ == "__main__":
|
||||
result = run_multi_objective_optimization()
|
||||
Reference in New Issue
Block a user