#author("2024-12-17T06:31:02+01:00","","")
#author("2024-12-17T06:38:01+01:00","","")
[[近藤/技術資料]]

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

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

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

*プログラム [#y244cf77]
これを解凍し、最終版.pyを実行してください
#ref(近藤.7z)

*環境 [#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

コマンドプロンプトで献立.pyを実行すると以下のような画面になる。
#ref(スクリーンショット 2024-12-17 142500.png,,スクリーンショット 2024-12-17 142500)
次々と必要な情報を入力すると、以下パレート図が作成される。
#ref(スクリーンショット 2024-12-17 142543.png,,スクリーンショット 2024-12-17 142543)
home.htmlに献立が作成されれば完了
#ref(スクリーンショット 2024-12-17 142615.png,,スクリーンショット 2024-12-17 142615)

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

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