#author("2024-07-25T08:16:42+02:00","","")
#author("2024-07-25T08:48:15+02:00","","")
[[水上/技術資料]]

----
目次
#contents
----

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

*組み合わせ最適化問題とは [#h82a02b0]
最適化問題とは、制約を満たしつつ、目的の値を最大化or最小化する条件を求める問題のこと。
&br;
組合せ最適化問題とは、様々な制約の下で多くの選択肢の中から、ある指標(価値)を最も良くする変数の値(組合せ)を求めること。&br;
多目的最適化とNSGA2について↓&br;
https://logmi.jp/tech/articles/325211
&br;

*プログラム [#y244cf77]
これを解凍し、最終版.pyを実行してください
#ref(卒論プログラム_完成版.zip)

*環境 [#h82a02b0]
Python 3.10.1 64bitでやってますが,たぶんどのバージョンもできるはず...&br;
pymooはバージョン0.5.0を使いましょう。

**準備 [#j661bc61]
まず、pymooをインストールします。pymooはpythonでNSGA2を実行するためのモジュールです。&br;
また、pymooはバージョンによってコードの書き方が変わります。&br;
自分は0.5.0を使っているので0.5.0をインストールする。&br;
 pip install pymoo == 0.5.0
 pip install PySimpleGUI
 pip install jinja2
 pip install flask
 pip install pandas
 pip install pulp
 pip install bs4
 pip install requests
 pip install regex
 pip install ortoolpy
 pip install pyecharts

&br;
*実験 [#bb5c41a2]
**問題設定 [#s10f289d]
スクレイピングしたレシピデータを活用したNSGA2のコードは以下の通り。&br;
①&br;
#ref(code1.png,,)
#ref(code2.png,,)
#ref(code3.png,,)
②&br;
#ref(code4.png,,)
③&br;
#ref(code5.png,,)
*解説 [#bb5c41a2]
①は制約式の記述部分である。リスト化した各変数(コストや時間や各栄養素など)を足したりしている。具体的な式はコメントアウト部分に記載。&br;
記述した制約式をpの配列にいれ、out["G"]の部分に書き込んでいる。&br;
②はそれぞれサンプリング、クロスオーバー、ミューテーションの部分である、nsga2で組み合わせ最適化を使うときはこの3つをコピペして用いる。&br;
③はプログラム実行部分である。&br;
proble= SubsetProblem(... の部分が①で記述したコードを組み合わせ最適化問題として置き換えている。&br;
algorithm=NSGA2(...の部分でアルゴリズムの設定をしている。②で記述したサンプリング、クロスオーバー、ミューテーションを使用する。&br;
res=minimize(...の部分でアルゴリズムを実行している。初めにminimize(とすることで最小化問題としてとらえる。

トップ   編集 差分 履歴 添付 複製 名前変更 リロード   新規 一覧 検索 最終更新   ヘルプ   最終更新のRSS