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
210
遺伝的アルゴリズムを実装する
NearMeの技術発表資料です
PRO
August 26, 2024
Tweet
Share
More Decks by NearMeの技術発表資料です
See All by NearMeの技術発表資料です
AIを用いた PID制御で部屋 の温度制御をしてみた
nearme_tech
PRO
0
25
CopilotKit + AG-UIを学ぶ
nearme_tech
PRO
1
130
Tile38 Overview
nearme_tech
PRO
0
55
Rust 製のコードエディタ “Zed” を使ってみた
nearme_tech
PRO
0
400
実践で使えるtorchのテンソル演算
nearme_tech
PRO
0
32
ローカルLLMを⽤いてコード補完を⾏う VSCode拡張機能を作ってみた
nearme_tech
PRO
0
530
初めてのmarimo (ハンズオン)
nearme_tech
PRO
0
49
ローカルLLM
nearme_tech
PRO
0
81
LlamaIndex Workflow: Build Practical AI Agents Fast
nearme_tech
PRO
0
45
Featured
See All Featured
Agile Leadership in an Agile Organization
kimpetersen
PRO
0
98
Music & Morning Musume
bryan
47
7.1k
10 Git Anti Patterns You Should be Aware of
lemiorhan
PRO
659
61k
Become a Pro
speakerdeck
PRO
31
5.8k
The Impact of AI in SEO - AI Overviews June 2024 Edition
aleyda
5
760
RailsConf & Balkan Ruby 2019: The Past, Present, and Future of Rails at GitHub
eileencodes
141
35k
Building Adaptive Systems
keathley
44
2.9k
Exploring the Power of Turbo Streams & Action Cable | RailsConf2023
kevinliebholz
37
6.3k
Organizational Design Perspectives: An Ontology of Organizational Design Elements
kimpetersen
PRO
1
620
The State of eCommerce SEO: How to Win in Today's Products SERPs - #SEOweek
aleyda
2
9.8k
Designing for Timeless Needs
cassininazir
0
150
Practical Tips for Bootstrapping Information Extraction Pipelines
honnibal
25
1.8k
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