#author("2025-02-26T12:28:04+01:00","","")
#author("2025-02-26T12:29:57+01:00","","")
[[技術資料]]


勾配情報を考慮した粒子群最適化による制約付き多目的最適化問題の解の探索.

*目次 [#e890b3d5]

#CONTENTS

*目的 [#x38aa8d3]
複雑で高次元な最適化問題を解決する

上下制約付き多目的最適化問題に対して,勾配情報を追加した上下制約を有する勾配MOPSOアルゴリズムを提案する.
**使用するソフトウェアのインストール [#ta19c6d2]
主に使用するソフトウェアとして,テキストエディタにVisualStudioCode,仮想環境構築にAnaconda Navigatorがある.

その他入れたいもの(chromeなど)は自分で調べて入れてほしい.

***Anaconda Navigator [#ta19c6d2]
[[参考サイト:https://qiita.com/Z0E/items/d574302747df8f0ee4eb]]

Anaconda公式( https://www.anaconda.com/download )からLinux用のインストーラーをダウンロードする.

青枠で囲んである部分からアクセスできる.
#ref(anaconda.png,,anaconda,50%)




*使うモジュールのインストール [#u1248302]
***使用するモジュール [#ta19c6d2]
|モジュール|version|用途|
|numpy||数値計算を効率的に行うための拡張モジュール|
|matplotlib||グラフ描写の為のライブラリ|
|random||ランダムな値を作成|
モジュールのインストールはコマンドプロンプトでpip install モジュール名

バージョンまで指定する場合はコマンドプロンプトでpip install モジュール名==指定するバージョン
でインストールする

Pythonのバージョンは3.10.14(指定しなくてもいいかもしれない)

↓動作環境(また置き換える)
#ref(動作環境.png,,50%,動作環境(また貼りかえる))
*プログラムの動かし方 [#ob3ca958]

**使用するテキストエディタ [#v2c613db]
テキストエディタはatomを使用する.

ダウンロードはこのページ( https://atom-editor.cc/ )から行う.

atomの設定は各自好きな拡張機能入れてもらえれば

#ref(atom.png,,atom,25%)
**実行の仕方 [#xbcf3848]

Anacondaで仮想環境を構築し,その仮想環境上でプログラムを動かす.

#ref(cd.png,,cd,35%)
cdを使用してプログラムがある階層に移動

#ref(python.png,,python,35%)
python ファイル名.pyで実行
*[理論の解説] [#gb062256]

**[PSOの解説] [#eb3cce83]
PSOは,群の中の粒子が持つ最良の情報とそのグループの最適値から過去の探索から考
慮した確率的最適化手法であり,社会的行動に基づいて開発された並列進化計算技術で
ある.

↓PSOの構造
#ref(画像41.png,,PSO,25%)

PSOは群を成して移動する生物の行動を模範したアルゴリズムである.群をなす生物を
粒子としてモデル化し,粒子は最適化問題における候補解を示している.群の中の粒子が
もつ最良の情報とその集団の最適値から過去の探索を考慮し,さらにその集団の各粒子の
位置および速度を更新することによって計算される.
#ref(画像40.png,,PSO計算,25%)


**[多目的最適化問題の解説] [#eb3cce83]
多目的最適化問題は,複数の目的が相反する関係にあり,これらを同
時に最適化する必要が生じる.
多目的最適化問題を考える上で、重要な概念が「パレート解」と「パ
レートフロント」であり,パレート解とは,最もほかの解を優越する
解であり,パレート解全体の集合をパレートフロントという.

#ref(画像13.png,,多目的最適化問題,25%)



**[MOPSOの解説] [#eb3cce83]

MOPSOは,多目的最適化問題を解くために設計されたアルゴリズムである.これは,単
一の目標を達成する従来のPSOを拡張したものである.MOPSOの目的は,複数の目標を
同時に最適化することによって,解空間上にパレートフロントと呼ばれる非支配解の集合
を得ることである.また,探索途中の優良な解である非劣解を保存するために,アーカイ
ブと呼ばれるレポジトリを有する.そして個体群の中での最良の解gbestをアーカイブ中
の非劣解から選出する.
PSOは群知能を活用した最適化アルゴリズムであり,粒子と呼ばれる仮想エージェント
が解空間内を探索し,最適解を見つける仕組みである.各粒子は自分自身の経験と群全体
の経験をもとに次の位置を決定する.一方,MOPSOでは複数の目的関数を考慮する必要
があるため,グローバルベストの選択やパレートフロントの管理に特化したメカニズムが
追加されている

#ref(画像17.png,,python,35%)

MOPSOのアルゴリズムを以下に示す.
 1. 探索母集団を初期化する.
 2. 各個体の速度を0に初期化する.
 3. 各個体を評価する.
 4. 非劣解をアーカイブに保存する.
 5. 各個体のpbestを初期化する.
 6. gbest を選出する.
 7. 速度を更新する.
 8. 位置を更新する.
 9. 各個体の評価を行う.
 10. アーカイブの内容を更新する.
 11. 現在の位置がpbestよりも良い場合更新する.
 12. ループカウンターに1を加えて6.に戻る.

*プログラムコード内の式説明 [#u1248302]

**非線形変数変換モデル [#t783d7fe]

ベンチマーク関数
#ref(evaluate.png,,evaluate,70%)

上下限制約領域内に問題の変数を変換して
無制約化した新たな変数空間に無制約PSOモデルを適用した「非線形変数変換モデル」
#ref(model.png,,model,70%)

1.初期設定
#ref(para.png,,para,70%)
パラメータ


2.ループ内
#ref(loop.png,,loop,70%)

位置と速度、勾配情報の更新からpbest、gbest、アーカイブの更新まで


3.アーカイブの更新と混雑距離
#ref(archive.png,,archive,70%)
混雑距離と目的関数の合計値を利用して解を削除する(3.3章参照)

4.位置、速度、勾配情報の更新
#ref(koubai.png,,koubai,70%)
速度、位置の更新と前回の粒子の位置と今回の粒子の位置を活用して勾配情報を算出する
~
5.パレートフロントの可視化(単体)
#ref(画像62.png,,Ubuntu1,70%)
~
5.2パレートフロントの可視化(nsga2との比較)
#ref(画像64.png,,Ubuntu1,70%)
**評価指標(優越個体割合:RNI) [#z5d76a15]
RNIは 0 ≤RNI ≤1 の値をとり,2 つの手法で得られた解集合X と
Y の和集合をとりSU とする.次に,SU の中から,どの解にも優越されない解のみを選
び出し,選ばれた解集合をSP とする.そして,SP の各手法の割合をIRNI(X,Y) として導き出すというものである.このため,この割合は最大値の1に近いほど,一方の手法
を優越しており,逆に値が0.5 を下回るほど,もう一方の手法に優越されていることを示
している

#ref(yuuetsu.png,,Ubuntu1,70%)
プログラムコード
#ref(kekka.png,,Ubuntu1,40%)

**評価指標(被覆率:CR) [#t783d7fe]
CRは得られた非劣解を絶対的に評価する方法であり,目的関数空間におけるパ
レート最適解領域において,解集合が均一に分布しているかを評価する方法である.被覆
率は各目的関数のパレート最適解領域をK分割したときの,目的関数iにおいて非劣解が
存在している小領域の数kiの割合により求められる.また,被覆率が1.0に近いほど,解
が全領域に求まっていると評価される.
#ref(hihuku.png,,Ubuntu1,70%)
#ref(siki.png,,Ubuntu1,40%)
#ref(siki.png,,Ubuntu1,100%)
被覆率の数式です.
#ref(kekka2.png,,Ubuntu1,40%)

結果はこんな感じに出ます.1に近いほど優れています.
​

**その他 [#d40a6931]
MOPSOとNSGA2の比較がしたいときは、hikaku.pyを動かしてください.
それぞれ目的関数と世代数、粒子数をそろえるのをお忘れなく
#ref(tool.png,,Ubuntu1,70%)
上のevaluateのところを変えてもらえれば大丈夫です.
#ref(para2.png,,Ubuntu1,40%)
ここがパラメータ

また、その他に入れた3つのプログラムですがそれぞれ勾配の考慮のさせ方が違います.
ただ今回は、Kmopso.pyのもので行っているので重要ではありません.

Kmopso.pyとhikaku.pyを主に動かしてください.

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