- 製造業出身のデータサイエンティストがお送りする記事
- 今回はpymooを使って多目的最適化手法の中で、NSGA-Ⅱを実装しました。
##はじめに
過去に多目的最適化(NSGA-Ⅱ)をご紹介しておりますので、概要的な部分はこちらの記事を参考にしてください。
また、deapを使ってNSGA-Ⅱも記事として書いておりますので、参考にしてください。
##使用するライブラリー(pymoo)
今回は最適化ライブラリpymooを使って実装したいと思います。
##NSGA-Ⅱの実装
NSGA-Ⅱの実装コードは下記の通りです。
今回は多目的最適化問題における一般的な問題の一つとして、ZDT4を使用しました。
# 必要なライブラリーのインポート
from pymoo.algorithms.nsga2 import NSGA2
from pymoo.factory import get_problem
from pymoo.optimize import minimize
from pymoo.visualization.scatter import Scatter
problem = get_problem("zdt4")
algorithm = NSGA2(pop_size=100)
res = minimize(problem,
algorithm,
('n_gen', 250),
seed=1,
verbose=False)
plot = Scatter()
plot.add(problem.pareto_front(), plot_type="line", color="black", alpha=0.7)
plot.add(res.F, color="red")
plot.show()
deapと違って凄い簡単ですね。
簡単に何を行っているかを説明しますと、
- problem:問題を定義しております(今回はzdt4を使用)
- algorithm:アルゴリズムを定義しております(今回はNSGA2)
- minimize:目的関数の最適化方向を定義しております(今回は最小化)
- n_gen:世代数
- pop_size:集団内の個体数
あとは可視化を行っているだけです。
##さいごに
最後まで読んで頂き、ありがとうございました。
今回は、pymooを使って多目的最適化のNSGA-Ⅱを実装しました。
凄い簡単にできました。ただ、実際の業務で使用する際は、細かい制約条件をどこまで落とし込めるライブラリーなのかを調査する必要がありそうです。
時間があるい時に確認しようと思います。
訂正要望がありましたら、ご連絡頂けますと幸いです。