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言語でシミュレーション用のシンプルなフレームワークStageをつくった/Fukuokago...
Search
monochromegane
July 14, 2020
Technology
750
0
Share
Embed
Copy iframe code
Copy JS code
Copy link
Start on current slide
Go言語でシミュレーション用のシンプルなフレームワークStageをつくった/Fukuokago Stage
Fukuoka.go#16 (オンライン開催)
https://fukuokago.connpass.com/event/180414/
monochromegane
July 14, 2020
More Decks by monochromegane
See All by monochromegane
適応的スパムフィルタのための軽量な類似メッセージカウンタ / jsai2026-adaptive-spam-filter
monochromegane
0
4.2k
ベクトル検索のフィルタを用いた機械学習モデルとの統合 / python-meetup-fukuoka-06-vector-attr
monochromegane
3
800
Claude Codeセッション現状確認 2026福岡 / fukuoka-aicoding-00-beacon
monochromegane
4
580
Go言語での実装を通して学ぶLLMファインチューニングの仕組み / fukuokago22-llm-peft
monochromegane
0
260
不確実性下における目的と手段の統合的探索に向けた連続腕バンディットの応用 / iot70_gp_rff_mab
monochromegane
2
410
なめらかなシステムと運用維持の終わらぬ未来 / dicomo2025_coherently_fittable_system
monochromegane
0
25k
ベクトル検索システムの気持ち
monochromegane
38
13k
Go言語での実装を通して学ぶ、高速なベクトル検索を支えるクラスタリング技術/fukuokago-kmeans
monochromegane
1
310
Go言語でターミナルフレンドリーなAIコマンド、afaを作った/fukuokago20_afa
monochromegane
2
370
Other Decks in Technology
See All in Technology
SRE依存からの脱却 運用を開 発チームへ移す、 フルサイ クル開 発体制の実践
joooee0000
0
670
“全部コピーしない”ファイルデータの活用 : — FSx for ONTAP × S3 Tables × Icebergで作るメタデータカタログ
yoshiki0705
0
510
ポストモーテム! DDoSからサイトは守れた。 でもビジネスは守れなかった。
bengo4com
0
560
AIと共生する開発者プラットフォーム:バクラクのモノレポ×マイクロサービス基盤
sakajunquality
1
870
Mastraエージェント、どのクラウドにデプロイする?
minorun365
PRO
2
170
SRE Lounge Hiroshimaへの招待
grimoh
0
310
AI時代のエンジニアキャリアについて今一度考える
sakamoto_582
1
1.2k
フルカイテン株式会社 エンジニア向け採用資料
fullkaiten
0
11k
“ID沼入口” - 基本とセキュリティから始める、考え続けるためのID管理技術勉強会 告知&イントロ
ritou
0
430
Amazon EVS で VCF 9.0 / 9.1 のサポート開始まとめ
mtoyoda
0
270
記録をかんたんに、提案をパーソナルに ── AIであすけんが目指すもの
oprstchn
0
160
証券システムを10年Scalaで作り続けるということ - 関数型まつり2026
krrrr38
3
690
Featured
See All Featured
Lightning talk: Run Django tests with GitHub Actions
sabderemane
0
220
30 Presentation Tips
portentint
PRO
1
340
Jess Joyce - The Pitfalls of Following Frameworks
techseoconnect
PRO
1
180
Responsive Adventures: Dirty Tricks From The Dark Corners of Front-End
smashingmag
254
22k
Building AI with AI
inesmontani
PRO
1
1.1k
Deep Space Network (abreviated)
tonyrice
0
220
Let's Do A Bunch of Simple Stuff to Make Websites Faster
chriscoyier
508
140k
Sam Torres - BigQuery for SEOs
techseoconnect
PRO
0
300
Optimizing for Happiness
mojombo
378
71k
Evolution of real-time – Irina Nazarova, EuRuKo, 2024
irinanazarova
9
1.4k
Technical Leadership for Architectural Decision Making
baasie
3
430
[RailsConf 2023] Rails as a piece of cake
palkan
59
6.7k
Transcript
ࡾ༔հ / Pepabo R&D Institute, GMO Pepabo, Inc. 2020.07.14 Fukuoka.go#16
GoݴޠͰγϛϡϨʔγϣϯ༻ͷ γϯϓϧͳϑϨʔϜϫʔΫ StageΛͭͬͨ͘
1SJODJQBMFOHJOFFS :VTVLF.*:",&!NPOPDISPNFHBOF 1FQBCP3%*OTUJUVUF (.01FQBCP *OD IUUQTCMPHNPOPDISPNFHBOFDPN
1. ͡Ίʹ 2. ίϯϐϡʔλγϛϡϨʔγϣϯ ϑϨʔϜϫʔΫStage 3. ·ͱΊ 4. ͓·͚ 3
࣍
1. ͡Ίʹ
• ঢ়گʹԠͨ͡ΫϦοΫͷ࠷େԽมԽݕग़ͷΑ͏ͳɺγεςϜͷదԠతͳ ৼΔ͍Λݕূ͢ΔͨΊʹɺ࣌ܥྻʹର͢ΔίϯϐϡʔλγϛϡϨʔγϣϯΛ ߦ͏͜ͱ͕͋Δɻ • → ֬తͳৼΔ͍ɺ࣮ڥͰൃੜ͢ΔϥϯμϜͳޡࠩΛදݱ͢Δ ߹ɺཚΛ༻͍ͨγϛϡϨʔγϣϯٕ๏Ͱ͋ΔϞϯςΧϧϩ๏ར༻͢Δ 5 ίϯϐϡʔλγϛϡϨʔγϣϯ
6 ίϯϐϡʔλγϛϡϨʔγϣϯ Arm0 Arm1 Arm2 User(s) System ͪߦྻ ଟόϯσ Οοτ
౸ணաఔʹϙΞιϯɺαʔϏεաఔʹࢦ Λద༻ͨͪ͠ߦྻϞσϧͷγϛϡϨʔ γϣϯ ར༻ऀͷᅂ͔ΒΔʹର͢ΔԠʢใ ुʣΛ͋Δ֬ʹݟཱͯɺظؒதͷྦྷੵใ ुΛ࠷େԽ͢ΔํࡦΛ୳ΔγϛϡϨʔγϣϯ
• γϛϡϨʔγϣϯରຖճҟͳΔ͕ɺࣅͨΑ͏ͳॲཧຖճ࣮͍ͯ͠Δ • Ұ࿈ͷॲཧʢධՁରͷɺ͋Δےॻ͖ʹର͢ΔৼΔ͍Λෳճ؍ଌʣ • γϛϡϨʔγϣϯͷฒྻԽ • ਐḿͷࢹʢϓϩάϨεόʔʣ • ϩάग़ྗ
• ཚγʔυͷཧ • →จࠪಡϓϩηεʹ͓͍ͯ࠶࣮ߦͯ͠ಉ݁͡Ռ͕ಘΒΕΔڥॏཁ • ݁ՌͷՄࢹԽ 7 ίϯϐϡʔλγϛϡϨʔγϣϯ࣮ͷ՝
2. Stage
• ཚΛ༻͍ͨίϯϐϡʔλγϛϡϨʔγϣϯʹ͏Ұ࿈͔ͭࡶͳॲཧΛ։ൃ ऀ͔ΒӅṭ͢ΔγϯϓϧͳϑϨʔϜϫʔΫ • Goݴޠ 9 monochromegane/stage https://github.com/monochromegane/stage
• ཚΛ༻͍ͨίϯϐϡʔλγϛϡϨʔγϣϯʹ͏Ұ࿈͔ͭࡶͳॲཧΛ։ൃ ऀ͔ΒӅṭ͢ΔγϯϓϧͳϑϨʔϜϫʔΫ 10 monochromegane/stage • Ұ࿈ͷॲཧʢධՁରͷɺ͋Δےॻ͖ʹର͢ΔৼΔ͍Λෳճ؍ଌʣ • γϛϡϨʔγϣϯͷฒྻԽ •
ਐḿͷࢹʢϓϩάϨεόʔʣ • ϩάग़ྗ • ཚγʔυͷཧ • ݁ՌͷՄࢹԽ 4UBHF͕ରͱ͢Δൣғ ˎҟͳΔɺධՁରͱےॻ͖ͷΈ Λ࣮͢Δ 4UBHF͕ରͱ͠ͳ͍ൣғ ˎγϛϡϨʔγϣϯʹΑͬͯޮՌతͳՄࢹԽ͕ҟͳΔͷͰϩάग़ྗҎ࣮͕߱ྑ͍ͱஅ
11 γφϦΦͱΞΫλʔ • StageͰγϛϡϨʔγϣϯΛܶʹྫ͑ͨϝλϑΝʔΛ࠾༻ • Stage = ܶɺScenario = ຊʢγφϦΦʣɺActor
= ԋऀ • ։ൃऀɺҰճͷγϛϡϨʔγϣϯͷڥͷมԽΛγφϦΦͱɺͦͷڥʹԠ ͨ͡ԋऀͷৼΔ͍ΛίʔυͰ࣮͢Δ
12 StageϑϨʔϜϫʔΫͷϝΠϯॲཧʢٙࣅίʔυʣ γφϦΦ͔ΒηϦϑΛಡΈग़͢ ԋऀ͕ηϦϑʹै͍ԋٕ ԋٕͷ݁ՌΛॻ͖ग़͢
13 StageϑϨʔϜϫʔΫͷϝΠϯॲཧʢٙࣅίʔυʣ ܶͰ͕ܶԿ։࠵͞ΕΔɻ HPSPVUJOFͰͰ͖Δ͚ͩಉ্࣌өʹʂ
• Scenarioͷ࣮ 14 StageͰίϯϐϡʔλγϛϡϨʔγϣϯʢ1/3ʣ γφϦΦΛಡΈਐΊΔɻ ΧϯλΛΠϯΫϦϝϯτ͢ΔॲཧͳͲΛ࣮ Χϯλ࣌ͰͷڥใΛ-JOFͰฦ͢
• Scenarioͷ࣮ 15 StageͰίϯϐϡʔλγϛϡϨʔγϣϯʢ1/3ʣ γφϦΦΛಡΈਐΊΔɻ ΧϯλΛΠϯΫϦϝϯτ͢ΔॲཧͳͲΛ࣮ Χϯλ࣌ͰͷڥใΛ-JOFͰฦ͢ ·͋ͰJOUFSGBDF\^Ͳ͏͔ͳ͋ɻ จࣈྻΛѻ͏ͱܾΊͯ4DBOOFS͕ ͦͷ··͑ΔΑ͏ʹͨ͠΄͏͕ศར͔
• ActorͱActionͷ࣮ 16 StageͰίϯϐϡʔλγϛϡϨʔγϣϯʢ2/3ʣ "DUJPOͷ4USJOH ͕ϩάʹग़ྗ͞ΕΔ -JOFʹର͢ΔৼΔ͍Λ࣮ɻ ԋٕͷ݁ՌΛ"DUJPOͱͯ͠ฦ͢
• ࣮ߦ 17 StageͰίϯϐϡʔλγϛϡϨʔγϣϯʢ3/3ʣ ࣮ߦճͱฒྻɺॳظ ཚγʔυΛࢦఆ ։࢝࣌ࠁ୯ҐͰ࣮ߦ͝ͱͷϩάͱཚγʔυΛه
• ΠςϨʔγϣϯྃ͝ͱʹݺΕΔίʔϧόοΫͷΈΛ༻ҙͯ͠㽂 18 StageͰίϯϐϡʔλγϛϡϨʔγϣϯʢਐḿࢹʣ
ෳͷγφϦΦΛ࣋ͭ γϛϡϨʔγϣϯͷྫ
γϛϡϨʔγϣϯͷྫ 20 • มԽݕग़ͷΞϧΰϦζϜʢADWINʣʹର͢ΔγϛϡϨʔγϣϯ • ࣌ܥྻͷมԽͷ߹͍ʢٸܹɺΏͬ͘Γʣʹରͯ͠ΞϧΰϦζϜΛධՁ γφϦΦͰهड़ γφϦΦʹର͢Δԋٕ
γϛϡϨʔγϣϯͷྫ 21 Scenario (Abrupt change) Scenario (Gradual change) Actor (ADWIN)
Action ({x, mu, sum, W}) • มԽݕग़ͷΞϧΰϦζϜʢADWINʣʹର͢ΔγϛϡϨʔγϣϯ • ࣌ܥྻͷมԽͷ߹͍ʢٸܹɺΏͬ͘Γʣʹରͯ͠ΞϧΰϦζϜΛධՁ
γϛϡϨʔγϣϯͷྫ 22 Scenario (Abrupt change) Scenario (Gradual change)
γϛϡϨʔγϣϯͷྫʢΞϧΰϦζϜͷՃʣ 23 Scenario (Abrupt change) Scenario (Gradual change) Actor (ADWIN)
Actor (ADWIN2) Action ({x, mu, sum, W}) • มԽݕग़ͷΞϧΰϦζϜʢADWINʣʹର͢ΔγϛϡϨʔγϣϯ • ࣌ܥྻͷมԽͷ߹͍ʢٸܹɺΏͬ͘Γʣʹରͯ͠ΞϧΰϦζϜΛධՁ
3. ·ͱΊ
• ࣌ܥྻΛѻ͏ίϯϐϡʔλγϛϡϨʔγϣϯ༻ͷγϯϓϧͳϑϨʔϜϫʔΫ StageΛGoݴޠͰ࣮ͨ͠ • ֤γϛϡϨʔγϣϯʹ͓͍ͯγφϦΦͱΞΫλʔͱ͍͏ཁૉͷΈΛҙࣝ͢Ε Α͘ͳΓ࣮ͷޮ͕֨ஈʹ্͕Γίʔυͷݟ௨͠Α͘ͳͬͨ • GoݴޠΛ͏͜ͱͰฒྻԽ͕༰қʹ࣮Ͱ͖γϯϓϧͳϑϨʔϜϫʔΫͰ͋ Γͳ͕Βेʹ҆ఆͯ͠ߴԽΛୡͰ͖ͨ •
Ճతͳརͱͯ͠ɺϩάߏͳͲ͕౷Ұ͞Εͨ͜ͱͰޙஈͷղੳάϥϑԽ ͷεΫϦϓτڞ௨Խ͕ਐΜͰ͍Δ 25 ·ͱΊ
4. ͓·͚
• γφϦΦɺΞΫλʔ͚࣮ͩͯͦ͠ΕΛΓସ͑ΔίϚϯυϥΠϯΦϓγϣ ϯΛॻ͍ͯɺՄࢹԽ༻ͷεΫϦϓτʹΦϓγϣϯՃͯ͠ɺͦΕΛ·ͱΊΔ γΣϧεΫϦϓτʹΦϓγϣϯͤΔΑ͏ʹͯ͠… 27 ίϚϯυϥΠϯΦϓγϣϯʹΑΔڍಈมߋͷ࣮ ֤ݴޠͰͷίϚϯυϥΠϯύʔαʔͷॻ֮ࣜ͑ͯͳ͍
• Fukuoka.go#14Ͱհͨ͠ • ίϚϯυϥΠϯΦϓγϣϯΛύʔε͢ΔίʔυΛίϚϯυϥΠϯΦϓγϣϯ͔ Βੜ͢Δπʔϧ 28 monochromegane/flagen https://github.com/monochromegane/flagen
Example of Go (preset template) 29 $ flagen go --dist
erlang -e k/l --lambda 1.5 -k 1 -v var ( dist string e string lambda float64 k int v bool ) func init() { flag.StringVar(&dist, "dist", "erlang", "usage of dist") flag.StringVar(&e, "e", "k/l", "usage of e") flag.Float64Var(&lambda, "lambda", 1.5, "usage of lambda") flag.IntVar(&k, "k", 1, "usage of k") flag.BoolVar(&v, "v", false, "usage of v") } ίϚϯυϥΠϯΦϓγϣϯ໊͔Βม໊Λੜ ίϚϯυϥΠϯΦϓγϣϯ͔ΒܕΛਪଌ ࣮ࡍʹ༻͢ΔίϚϯυϥΠϯΦϓγϣϯ͔Β ίϚϯυϥΠϯͷղੳॲཧΛੜ
Example of Python (preset template) 30 $ flagen py --dist
erlang -e k/l --lambda 1.5 -k 1 -v import argparse parser = argparse.ArgumentParser() parser.add_argument("--dist", default="erlang", help="Help of dist") parser.add_argument("-e", default="k/l", help="Help of e") parser.add_argument("--lambda", type=float, default=1.5, help="Help of lambda") parser.add_argument("-k", type=int, default=1, help="Help of k") parser.add_argument("-v", action="store_false", help="Help of v") args = parser.parse_args() ϋϚΓ͕ͪͳ1ZUIPOͷCPPMͷσϑΥϧτͷઃఆ ϘΠϥʔςϯϓϨʔτͳͷͰେৎ
Example of Ruby (preset template) 31 $ flagen rb --dist
erlang -e k/l --lambda 1.5 -k 1 -v require 'optparse' opts = { dist: 'erlang', e: 'k/l', lambda: 1.5, k: 1, v: false, } OptionParser.new do |op| op.on('--dist [VALUE]', 'Desc of dist') {|v| opts[:dist] = v } op.on('-e [VALUE]', 'Desc of e') {|v| opts[:e] = v } op.on('--lambda [VALUE]', 'Desc of lambda') {|v| opts[:lambda] = v.to_f } op.on('-k [VALUE]', 'Desc of k') {|v| opts[:k] = v.to_i } op.on('-v', 'Desc of v') {|v| opts[:v] = v } op.parse!(ARGV) end
Example of Shell (preset template) 32 $ flagen sh --dist
erlang -e k/l --lambda 1.5 -k 1 -v E="k/l" K="1" V="FALSE" while getopts e:k:v OPT do case $OPT in "e" ) E="$OPTARG";; "k" ) K="$OPTARG";; "v" ) V="TRUE";; esac done shift `expr $OPTIND - 1` HFUPQUTҰจࣈͷҾ͚ͩѻ͑ΔͷͰ͍Φϓγϣϯແࢹ
• flagenΛΤσΟλͱ࿈ܞ͢Δ • ྫ͑VimͰҎԼʹΑΓɺΧʔιϧҐஔʹ݁ՌΛૠೖ͢Δ͜ͱ͕Ͱ͖Δɻ ʢಈతͳίʔυεχϖοτͱͯ͠ͷར༻ʣ 33 Collaboration :r!flagen YOUR_TEMPLATE YOUR_COMMAND_LINE_OPTIONS...
None