水上/技術資料?


目次


目標 

pymooというモジュールを使って多目的最適化問題を解きます。

最適化問題とは 

最適化問題とは、制約を満たしつつ、目的の値を最大化or最小化する条件を求める問題のこと。
特に、目的関数が複数存在する最適化問題を多目的最適化問題という。
多目的最適化問題を解く手法としてNSGA2があり、本ページではpythonでnsga2を用いて多目的最適化問題を解く方法を紹介する。 

最適化問題について学びたいときはこちら↓
https://science-log.com/%E6%95%B0%E5%AD%A6/%E3%80%90%E6%9C%80%E9%81%A9%E5%8C%96%E5%95%8F%E9%A1%8C%E3%81%AE%E5%9F%BA%E7%A4%8E%E3%80%91%E6%95%B0%E7%90%86%E6%9C%80%E9%81%A9%E5%8C%96%E3%81%A8%E3%81%AF%E4%BD%95%E3%81%8B/

多目的最適化とNSGA2について↓
https://logmi.jp/tech/articles/325211

環境 

Python 3.10.1 64bitでやってますが,たぶんどのバージョンもできるはず...
pymooはバージョン0.5.0を使いましょう。

準備 

まず、pymooをインストールします。pymooはpythonでNSGA2を実行するためのモジュールです。
また、pymooはバージョンによってコードの書き方が変わります。
自分は0.5.0を使っているので0.5.0をインストールする。

pip install pymoo == 0.5.0

実験 

問題設定 

以下の問題について考えてみる。

pro1.png

これは目的関数として (x1^2 + x2^2)を最小化かつ、(x1 - 1)^2 + x2^2 を最小化し
制約条件として2(x1 - 0.1)(x1 - 0.9)/0.18 =< 0 、-20(x1 - 0.4)(x1 - 0.6)/4.8 =< 0 を満たしている問題について考えている。

プログラムの解説 

最適化問題のコードの解説をする。

program.png

class MyProgram(program): の中は最適化問題全体の計算するコードである。 

program1.png

また、def __init__(self): の中は最適化問題の引数の設定をしている。

program2.png

引数の説明はこちら↓

pro2.png

また、__init__ についてはこちらを参考に↓ 
https://qiita.com/ishigen/items/2d8b6e6398743f2c8110

また、evaluateの部分は目的関数と制約条件を書くところです。

program3.png

参考文献 


トップ   新規 一覧 検索 最終更新   ヘルプ   最終更新のRSS