Upgrade to Pro
— share decks privately, control downloads, hide ads and more …
Speaker Deck
Features
Speaker Deck
PRO
Sign in
Sign up for free
Search
Search
遺伝的アルゴリズムを実装する
Search
NearMeの技術発表資料です
PRO
August 26, 2024
1
60
遺伝的アルゴリズムを実装する
NearMeの技術発表資料です
PRO
August 26, 2024
Tweet
Share
More Decks by NearMeの技術発表資料です
See All by NearMeの技術発表資料です
ESLintをもっと有効活用しよう
nearme_tech
PRO
0
4
リファクタリングのための第一歩
nearme_tech
PRO
0
26
ガウス過程回帰とベイズ最適化
nearme_tech
PRO
1
70
確率的プログラミング入門
nearme_tech
PRO
2
60
Observability and OpenTelemetry
nearme_tech
PRO
2
34
観察研究における因果推論
nearme_tech
PRO
1
90
React
nearme_tech
PRO
2
40
Architecture Decision Record (ADR)
nearme_tech
PRO
1
850
Fractional Derivative!
nearme_tech
PRO
1
44
Featured
See All Featured
Unsuck your backbone
ammeep
669
57k
Let's Do A Bunch of Simple Stuff to Make Websites Faster
chriscoyier
507
140k
Gamification - CAS2011
davidbonilla
80
5.1k
The Pragmatic Product Professional
lauravandoore
32
6.3k
Producing Creativity
orderedlist
PRO
341
39k
Why Our Code Smells
bkeepers
PRO
335
57k
RailsConf & Balkan Ruby 2019: The Past, Present, and Future of Rails at GitHub
eileencodes
132
33k
Designing Experiences People Love
moore
138
23k
jQuery: Nuts, Bolts and Bling
dougneiner
61
7.5k
Bash Introduction
62gerente
608
210k
Building Better People: How to give real-time feedback that sticks.
wjessup
365
19k
Bootstrapping a Software Product
garrettdimon
PRO
305
110k
Transcript
0 遺伝的アルゴリズムを実装する 2024-08-23 第102回NearMe技術勉強会 Takuma KAKINOUE
1 遺伝的アルゴリズム(GA)について • そもそもGAとは? ◦ 近似解の探索のためのヒューリスティックな⼿法 ▪ 探索⼿法は、⽣物の進化から着想を得ている • 選択、交叉、突然変異
◦ 多⽬的最適化にも有効 ▪ 解集団を⽤いた多点局所探索というアプローチのため • GAで解ける問題の例 ◦ ナップザック問題 ◦ 巡回セールスマン問題 ◦ 機械学習モデルのハイパーパラメータのチューニング
2 選択(Selection)の⼿法 • エリート(elite)⽅式 ◦ 適応度の⾼いn個の個体を残す⽅式 • ルーレット(roullet)⽅式 ◦ SoftMax関数を使って適応度に応じて確率的に個体を選択する⽅式
• トーナメント(tournament)⽅式 ◦ 解集団をn個のグループに分割し、各グループの中で ⼀番適応度の⾼い個体のみ残す⽅式
3 交叉(Crossover)の⼿法 • ⼀点(one-point)交叉 ◦ 染⾊体内のある1箇所で分割して、交叉させる⽅法 • ⼆点(two-point)交叉 ◦ 染⾊体内のある2箇所で分割して、交叉させる⽅法
• ⼀様(uniform)交叉 ◦ 染⾊体に含まれる遺伝⼦の⻑さと同じ⻑さのmaskを⽣成し、 maskが1の部分の遺伝⼦を⼊れ替える⽅法
4 ⼀点交叉のコード 区切りのindexをランダムで 指定して、両親の遺伝⼦を 区切ってコピーしたものを 結合し、⼦の遺伝⼦としている。
5 GAの⼿法 ※どちらも親集団μ個から個集団λ個が⽣成される • ( μ, λ ) - ES
◦ ⼦集団λ個の中から上位μ個を選択して次世代の親とする⽅法 • ( μ + λ ) - ES ◦ 親集団μ個と⼦集団λ個の和集合の中から上位μ個を選択して次世代の親とする ⽅法 ◦ ⼤域的最適解を得られやすい
6 アルゴリズムのフローチャート 1. 個体(Individual)をランダムに⽣成して、初期の解集団(Population)を構築 2. 以下をn世代繰り返す a. 解集団の各個体に対して適合度(Fitness)を算出する b. 解集団から適合度が⾼い個体を上位μ個抽出(selection)する
c. bで抽出された個体同⼠を交叉(Crossover)させて、新たな個体をλ個⽣成する d. cで新たに⽣成された各個体に対して突然変異(Mutation)を⾏う e. 解集団を以下の個体に置き換える i. ( μ, λ )の場合、”cで⽣成されたλ個の個体” ii. ( μ + λ )の場合、”bで抽出されたμ個の個体”と”cで⽣成されたλ個の個体” 3. 解集団からパレート解を抽出し、出⼒する(多⽬的最適化の場合)
7 実装する上で⼯夫した点 • インターフェース部分 ◦ 各⼿法をクロージャ(Closure)を使って実装
8 コードを動かしてみる • git ◦ https://github.com/kakky-hacker/algorithm_sandbox • command ◦ cd
genetic_algorithm ◦ python sample/knapsack.py ▪ 以下のナップザック問題を解く • 値段 = [100, 200, 650, 1100, 2100, 3300] • 嬉しさ = [2, 5, 16, 32, 64, 105] • 所持⾦ = 40000
9 PythonのGAフレームワーク • DEAP ◦ スター数がこの3つの中で⼀番多い(2024/08/23時点) ◦ https://github.com/DEAP/deap • Platypus
◦ 前に使ったことがあったので久しぶりに覗いたら最後のcommitが6年前だった.. ◦ https://github.com/andyrimmer/Platypus • pymoo ◦ 多⽬的最適化に特化しているらしい ◦ https://github.com/anyoptimization/pymoo
10 Thank you