7
6

More than 3 years have passed since last update.

pymooを使って多目的最適化のNSGA-Ⅱを実装してみた

Last updated at Posted at 2021-03-22
  • 製造業出身のデータサイエンティストがお送りする記事
  • 今回は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()

image.png

deapと違って凄い簡単ですね。

簡単に何を行っているかを説明しますと、

  • problem:問題を定義しております(今回はzdt4を使用)
  • algorithm:アルゴリズムを定義しております(今回はNSGA2)
  • minimize:目的関数の最適化方向を定義しております(今回は最小化)
  • n_gen:世代数
  • pop_size:集団内の個体数

あとは可視化を行っているだけです。

さいごに

最後まで読んで頂き、ありがとうございました。
今回は、pymooを使って多目的最適化のNSGA-Ⅱを実装しました。
凄い簡単にできました。ただ、実際の業務で使用する際は、細かい制約条件をどこまで落とし込めるライブラリーなのかを調査する必要がありそうです。
時間があるい時に確認しようと思います。

訂正要望がありましたら、ご連絡頂けますと幸いです。

7
6
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
7
6