#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(とすることで最小化問題としてとらえる。