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
Goでつくる進化計算パッケージ
Search
Sponsored
·
Ship Features Fearlessly
Turn features on and off without deploys. Used by thousands of Ruby developers.
→
tsurubee
July 13, 2019
Technology
3.3k
1
Share
Embed
Copy iframe code
Copy JS code
Copy link
Start on current slide
Goでつくる進化計算パッケージ
tsurubee
July 13, 2019
More Decks by tsurubee
See All by tsurubee
大規模言語モデルにおけるData-Centric AIと合成データの活用 / Data-Centric AI and Synthetic Data in Large Language Models
tsurubee
1
600
言語モデルによるAI創薬の進展 / Advancements in AI-Driven Drug Discovery Using Language Models
tsurubee
2
630
AIトップカンファレンスからみるData-Centric AIの研究動向 / Research Trends in Data-Centric AI: Insights from Top AI Conferences
tsurubee
3
3.4k
DeepCrysTet: A Deep Learning Approach Using Tetrahedral Mesh for Predicting Properties of Crystalline Materials
tsurubee
0
1.3k
3次元メッシュで表現した結晶構造を用いた材料物性の予測に向けた深層学習モデルの設計 / Design of Deep Learning Model for Predicting Material Properties Using Crystal Structure Represented by Three-Dimensional Mesh
tsurubee
1
2.6k
分散システムの性能異常に対する機械学習の解釈性に基づく原因診断手法 / A Method for Diagnosing the Causes of Performance Issues in Distributed Systems Based on the Interpretability of Machine Learning
tsurubee
0
1.7k
機械学習の解釈性に関する研究動向とシステム運用への応用 / A Survey on Interpretable Machine Learning and Its Application for System Operation
tsurubee
0
390
機械学習モデルの局所的な解釈に着目したシステムにおける異常の原因診断手法の構想
tsurubee
0
8.1k
アニーリングマシンを活用したエッジAIにおける 生成モデルの学習効率化のためのアーキテクチャ
tsurubee
0
1.7k
Other Decks in Technology
See All in Technology
論語・武士道・産業革命から見る かわるもの、かわらないもの
ichimichi
8
2.2k
PLaMo 3.0 Primeの構造化出力サポート
pfn
PRO
0
170
信頼できるテスティングAIをどう育てるか?
odan611
0
190
【CEDEC2026】次世代デジタルカードゲームのサーバー設計と運用 〜『Shadowverse: Worlds Beyond』の舞台裏~
cygames
PRO
0
510
現場で使える AWS DevOps Agent 活用ノウハウ - Release Management 機能の検証結果を添えて / AWS DevOps Agent Release Management and Know-How
kinunori
5
920
AI駆動開発は個人技からチーム戦へ:組織でAIを使いこなすための実践設計
moongift
PRO
0
420
運用を犠牲にせずコストを制御し事業成長を支える B2B SaaS ID管理基盤におけるS3 Tableのログストレージ活用
kaminashi
1
150
もう一度考える SRE チームの作り方・育て方 / Rethinking SRE #1: Building and Growing SRE Teams
rrreeeyyy
5
910
QAと開発の両側から進める AI活用 -QAプロセスAI支援ツールキットと Inner Loop / Outer Loopの取り組み-
legalontechnologies
PRO
2
420
AIエージェントを前提としたプラットフォーム エンジニアリング:GKEで作るAgent-Ready Golden Path
legalontechnologies
PRO
1
110
AIが自社のTableauを操作する世界へ:Tableau MCP超入門
tbtykk
0
110
クラウドセキュリティ入門 ~安全なクラウド利用のための基礎知識~
lhazy
8
7.3k
Featured
See All Featured
AI Search: Where Are We & What Can We Do About It?
aleyda
0
7.8k
職位にかかわらず全員がリーダーシップを発揮するチーム作り / Building a team where everyone can demonstrate leadership regardless of position
madoxten
64
56k
Music & Morning Musume
bryan
47
7.3k
How to make the Groovebox
asonas
2
2.3k
Sam Torres - BigQuery for SEOs
techseoconnect
PRO
0
450
A Soul's Torment
seathinner
6
3.2k
Neural Spatial Audio Processing for Sound Field Analysis and Control
skoyamalab
0
390
The Myth of the Modular Monolith - Day 2 Keynote - Rails World 2024
eileencodes
28
3.6k
Hiding What from Whom? A Critical Review of the History of Programming languages for Music
tomoyanonymous
3
1.1k
GraphQLとの向き合い方2022年版
quramy
50
15k
How to optimise 3,500 product descriptions for ecommerce in one day using ChatGPT
katarinadahlin
PRO
2
3.7k
Building Adaptive Systems
keathley
44
3.2k
Transcript
GoConference’19 GoͰͭ͘ΔਐԽܭࢉύοέʔδ @tsurubee 2019.07.13 Go Conference '19 Summer in Fukuoka
GoConference’19 ా തจ (@tsurubee) GMOϖύϘגࣜձࣾ ϗεςΟϯάࣄۀ෦ ΠϯϑϥνʔϜ 2
GoConference’19 ࠓ͢͜ͱ wਐԽܭࢉͱҨతΞϧΰϦζϜͱ wҨతΞϧΰϦζϜͷΈ w(PݴޠʹΑΔҨతΞϧΰϦζϜͷ࣮ wࠓͷ͓ʢ࠷దԽʣΛղ͍ͯΈΔ 3
GoConference’19 ਐԽܭࢉͱ wੜͷਐԽৼΔ͍Λ฿ͨ͠࠷దԽख๏ͷ૯শ wϝλώϡʔϦεςΟοΫͳख๏Ͱ͋Γɺෳࡶͳߏͷಉఆ͕ ࠔͳʹ༗ޮͳ࠷దԽख๏ͱͯ͠ظ͞Ε͍ͯΔ 4
GoConference’19 ਐԽܭࢉͱ wੜͷਐԽৼΔ͍Λ฿ͨ͠࠷దԽख๏ͷ૯শ wϝλώϡʔϦεςΟοΫͳख๏Ͱ͋Γɺෳࡶͳߏͷಉఆ͕ ࠔͳʹ༗ޮͳ࠷దԽख๏ͱͯ͠ظ͞Ε͍ͯΔ 5 NFUBIFVSJTUJDBMHPSJUIN ಛఆͷͷΈΛରͱ͢ΔͷͰͳ͘ɺ ༷ʑͳʹରͯ͠ɺൺֱత࣌ؒͰ ۙࣅղΛޮΑ͘ٻΊΔղ๏
GoConference’19 ਐԽܭࢉύοέʔδ eago wཻࢠ܈࠷దԽ wҨతΞϧΰϦζϜ 6 IUUQTHJUIVCDPNUTVSVCFFFBHP &WPMVUJPOBSZ"MHPSJUINJNQMFNFOUFEJO(P ࣮ΞϧΰϦζϜ
GoConference’19 ਐԽܭࢉύοέʔδ eago wཻࢠ܈࠷దԽ wҨతΞϧΰϦζϜ 7 IUUQTHJUIVCDPNUTVSVCFFFBHP &WPMVUJPOBSZ"MHPSJUINJNQMFNFOUFEJO(P ࣮ΞϧΰϦζϜ ࠓճͪ͜Βʹ͍ͭͯհʂ
GoConference’19 ҨతΞϧΰϦζϜ(GA)ͱ w ूஂͷதͰڥʹదԠͨ͠ݸମ͕ΑΓߴ͍֬Ͱ ੜ͖Γɺ࣍ੈʹࢠΛ͢ʢࣗવ౫ଡઆʣΈ ΛιϑτΣΞతʹ͢͜ͱͰෳࡶͳʹର͢Δ ࠷దղΛ୳ࡧ͢Δख๏ w ͷղΛੜͷݸମʹݟཱͯͯɺͦͷݸମͷूஂʹ ରͯ͠ɺબʢ4FMFDUJPOʣަࠥʢ$SPTTPWFSʣಥવ
มҟʢ.VUBUJPOʣΛద༻͢Δ 8 ܦY5&$)৽ܕ৽װઢʮ/ܥʯͷlإz ΛੜΜͩʮҨతΞϧΰϦζϜʯͷൿີ IUUQTXXXTMJEFTIBSFOFUL[PLNHFOFUJDBMHPSJUIN IUUQTUFDIOJLLFJCQDPKQJUBSUJDMF$0-6./
GoConference’19 9 GAͷྲྀΕ
GoConference’19 10 GAͷྲྀΕ ූ߸Խ
GoConference’19 11 దԠ GAͷྲྀΕ ූ߸Խ
GoConference’19 12 GAͷྲྀΕ దԠ બ ූ߸Խ
GoConference’19 13 దԠ બ ަࠥ ಥવมҟ GAͷྲྀΕ ූ߸Խ
GoConference’19 ࠓͷ͓ 14
GoConference’19 Gopherͷը૾Λੜͯ͠ΈΑ͏ʂ 15 ූ߸Խʢ&ODPEJOHʣ దԠʢ'JUOFTTʣ બʢ4FMFDUJPOʣ
ަࠥʢ$SPTTPWFSʣ ಥવมҟʢ.VUBUJPOʣ ҎԼͷεςοϓʹԊͬͯղઆ͍͖ͯ͠·͢ʂ
GoConference’19 1. ූ߸ԽʢEncodingʣ 16 ʹର͢ΔղΛݸମͷછ৭ମɺղͷߏཁૉΛҨࢠͱͯ͠දݱ͢Δ છ৭ମɺʷʷ ࣍ݩϕΫτϧ 'MBUUFOJOH ɾɾɾɾ ʷ
<>VJOUܕ 3(#"ը૾
GoConference’19 ʹର͢Δղʢݸମʣͷྑ͞ΛධՁ 2. దԠʢFitnessʣ 17 ը૾ؒڑʢྨࣅʣϐΫηϧؒڑͷ૯ͷฏํࠜ ը૾ؒڑ͕θϩʹ͍ۙ΄Ͳɺ༏ΕͨղͰ͋Δ ը૾ؒڑ ϐΫηϧؒڑ ϢʔΫϦουڑ
GoConference’19 3. બʢSelectionʣ ڥʹదԠͰ͖Δݸମ΄Ͳ࣍ੈʹࣗͷҨࢠΛͤΔΑ͏ʹ͢ΔͨΊʹɺ ݸମͷదԠʹԠͯ͡ੜ͖ΔݸମΛબ͢Δ 18 τʔφϝϯτબʢUPVSOBNFOUTFMFDUJPOʣ ϥϯμϜʹநग़ͨ͠4ݸͷݸମͷ͏ͪɺ ࠷దԠ͕ߴ͍ݸମΛબ "
# $ % దԠ $ func Select(indi Individuals) (Individuals, error) { if len(indi) < t.NContestants { return nil, errors.New("NContestants is too large") } selected := make(Individuals, len(indi)) for i := range selected { winner := indi[rand.Intn(len(indi))] for j := 0; j < t.NContestants; j++ { next := indi[rand.Intn(len(indi))] if winner.Fitness > next.Fitness { winner = next } } selected[i] = winner } return selected, nil }
GoConference’19 4. ަ伹ʢCrossoverʣ 19 બ͞ΕͨͭͷݸମΛަࠥ͠ɺࢠݸମΛੜ͢Δ Ұަࠥ
ަࠥ ݸମ̍ ݸମ̎ ࢠݸମ̍ ࢠݸମ̎ ަࠥΛڥʹޓ͍ʹཁૉΛަ͢Δૢ࡞Λߦ͏
GoConference’19 5. ಥવมҟʢMutationʣ 20 ͍ͣΕͷ͍࣋ͬͯͳ͍ҨࢠΛࢠʹ࣋ͨͤΔ͜ͱͰଟ༷ੑͷҡ࣋͢Δ func (I Image) Mutation() {
mutationRate := 0.0005 rand.Seed(time.Now().UnixNano()) for i := 0; i < len(I.Pix); i++ { if rand.Float64() < mutationRate { I.Pix[i] = uint8(rand.Intn(255)) } } } ɾɾɾɾ ɾɾɾɾ Ұఆͷ֬ͰཁૉͷΛϥϯμϜʹมߋ͢Δ
GoConference’19 Ҏ্ͷεςοϓΛ܁Γฦͯ͠ ਐԽΛॏͶ͍͖ͯ·͢ʂ 21
GoConference’19 ͳͥGoݴޠͰॻ͍ͨͷ͔ʁ 22
GoConference’19 GAͷ՝ɿܭࢉ࣌ؒͷॖ w ("ɺେͳܭࢉྔΛཁ͢ΔͨΊɺ࣮༻࣌ؒͰྑͳղΛಘΔͨΊʹ ܭࢉॲཧΛߴԽ͢Δ͜ͱ͕·Ε͍ͯΔ 23 w ("ɺෳͷղީิΛ༻͍ͨଟ୳ࡧͷΞϧΰϦζϜͰ͋ΔͨΊɺຊ࣭త ʹฒྻԽͱੑ͕ߴ͍ w
ܭࢉ࣌ؒॖΛతͱͯ͠ɺ༷ʑͳ("ͷฒྻԽख๏͕ఏҊ͞Ε͍ͯΔ
GoConference’19 24 GAॲཧΛฒྻԽ͍͢͠ GoݴޠฒྻԽॲཧ͕ॻ͖͍͢ GoݴޠΛ͏ͱ༷ʑͳGAͷฒྻԽϞσϧ ΛαΫοͱ࣮Ͱ͖ͯ࠷ߴͳͷͰʁ
GoConference’19 ฒྻԽϞσϧɿϚελʔεϨʔϒํࣜ 25 4MBWF .BTUFS 4MBWF 4MBWF ɾɾɾ ϚελʔεϨʔϒํࣜ w
("ͷ࠷୯७ͳฒྻԽϞσϧͰ͋ΓɺదԠܭࢉΛฒྻԽ͢Δ w શମͷ੍ޚ͓ΑͼҨతૢ࡞Λߦ͏ϚελʔͱɺదԠܭࢉΛߦ͏ෳͷεϨʔϒ͔ Βߏ͞ΕΔ ͜͜ΛฒྻԽ͢Δʂ
GoConference’19 goroutineʹΑΔGAͷฒྻԽ w ͦΕͧΕͷݸମͷదԠܭࢉಠཱͯ͠ߦ͑ΔͨΊɺదԠܭࢉΛ͢ΔͨΊͷεϨʔϒͱͯ͠ HPSPVUJOFΛ্ཱͪ͛ͯɺฒྻͰܭࢉΛߦ͏ 26 func (indis Individuals) Evaluate(parallel
bool) { var wg sync.WaitGroup for i := range indis { wg.Add(1) go func(i int) { defer wg.Done() indis[i].Evaluate() //దԠܭࢉॲཧ }(i) } wg.Wait() } w TZOD8BJU(SPVQΛ༻͍ͯɺಠཱͨ͠ෳͷλεΫΛฏߦͰॲཧͯ͠ɺͦΕΒશͯͷऴྃΛͪ ߹ΘͤΔॲཧ͕γϯϓϧͳهड़Ͱ࣮Ͱ͖Δ
GoConference’19 Demo 27
GoConference’19 GAʹΑΔը૾ੜ 28 (PQIFSͷ͕࢟ʜʂ ʻ݅ʼ 1PQVMBUJPO4J[F $SPTTPWFS3BUF .VUBUJPO3BUF 5PVSOBNFOU4J[F ੈ
ੈ ඪ ੈ
GoConference’19 ฒྻԽͷ༗ޮੑ 29 దԠܭࢉͷฒྻԽ͕ॲཧ࣌ؒͷॖʹد༩͍ͯ͠Δ Ϛγϯɿ.BD#PPL1SP ϓϩηοαɿ()[*OUFM$PSFJ ϝϞϦɿ(#
GoConference’19 ·ͱΊ w("Λ࢝Ίͱͨ͠ਐԽܭࢉɺෳࡶͳߏͷಉఆ͕ࠔͳ ʹ༗ޮͳ࠷దԽख๏ͱͯ͠ظ͞Ε͍ͯΔ w("ଟ୳ࡧΞϧΰϦζϜͰ͋ΔͨΊɺฒྻԽͱੑ͕ߴ͍ wHPSPVUJOFΛ༻͍ΔͱαΫοͱ("ͷฒྻԽॲཧ͕ॻ͚Δ w("ͰԿͱ͔(PQIFSͷ໘Ө͕ݟ͑Δը૾͕࡞Εͨ 30
GoConference’19 ͝ਗ਼ௌ͋Γ͕ͱ͏͍͟͝·ͨ͠ʂ 31