平井のゼミ


目次


目標 

釣り情報サイトから釣りの結果などをスクレイピングする。

スクレピングとは 

スクレピングとは,Webサイトから大量の情報を字と動的に抽出するコンピュータソフトウェア技術。

Webスクレイピングは、Webサイトやデータベースを探り、大量のデータの中から特定のデータのみを自動で抽出することができる。 &br;

環境 

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

実験 

問題設定 

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

#ref(): File not found: "pro1.png" at page "テンプレ"

これは目的関数として (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 を満たしている問題について考えている。


サンプルプログラムの解説 

#ref(): File not found: "pro1.1.py" at page "テンプレ"

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

#ref(): File not found: "program.png" at page "テンプレ"


Myprogram全体の部分 

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

#ref(): File not found: "program1.png" at page "テンプレ"


def __init__(self) 

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

#ref(): File not found: "program2.png" at page "テンプレ"

引数の説明はこちら↓

#ref(): File not found: "pro2.png" at page "テンプレ"

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


evaluate 

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

#ref(): File not found: "program3.png" at page "テンプレ"

out["F"]に評価関数の値,out["G"]に制約条件の値を書き込む。
※制約条件、目的関数は=<0制約と設定してあるため、>=とする場合は-1をかける。


プログラム実行部分 

#ref(): File not found: "program4.png" at page "テンプレ"

problem = MyProblem()で、記述した問題を定義。
algorithm = NSGA2(pop_size=100)でアルゴリズムの種類を定義(本研究ではNSGA2を使用)
vurpose = True で処理の途中を可視化している(Trueで以下のように表示される)

#ref(): File not found: "program6.png" at page "テンプレ"

n gen は現在の 世代数,n evel はこれまでの個体を評価した数,cv (min),cv (avg) はそれぞれ現在の母集 団における最小の制約違反,
現在の母集団における平均の制約違反,n nds は多目的最適化問題の場合の非劣解の数,
eps は過去数世代にわたるインジケーターの変化,indicatorはパフォーマンスインジケーターを表す.

グラフ、解を表示する部分 

#ref(): File not found: "program5.png" at page "テンプレ"

plot.の4行はNSGA2によって出力したパレート解を表示するコードである。
表示されるグラフ↓

#ref(): File not found: "program7.png" at page "テンプレ"

最後の行はres.F,resXを表示している。

#ref(): File not found: "program8.png" at page "テンプレ"

res.Fは、目的関数の値(ここでいうとres.Fはx1^2+xx2^2と(x1-1)^2+x2^2)、res.Xはその時のx1,x2の値を表示している。

補足
最大化したい場合は2つの目的関数の符号を逆にしてください

課題 

問題設定 

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

#ref(): File not found: "pro3.png" at page "テンプレ"

これは目的関数として (x1^2 + x2^2)を最小化かつ、(x1 - 2)^2 + x2^2 を最小化し
制約条件として3(x1 - 0.2)(x1 - 0.8)/0.28 =< 0 、-10(x1 - 0.5)(x1 - 0.7)/3.8 =< 0 を満たしている問題について考えている。

サンプルプログラム 

#ref(): File not found: "pro_sample.py" at page "テンプレ"

以下は目的関数と制約条件を変更したプログラムコードである。

#ref(): File not found: "program11.png" at page "テンプレ"


グラフ、解を表示する部分 

プログラムを実行するとこのようなグラフが表示された

#ref(): File not found: "Figure_1.png" at page "テンプレ"

参考文献 

pymoo公式サイト(日本語訳をして見てね)
https://pymoo.org/algorithms/moo/nsga2.html 
pymooの使い方まとめ
https://yuyumoyuyu.com/2021/07/23/howtousepymoo/


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