Upgrade to Pro
— share decks privately, control downloads, hide ads and more …
Speaker Deck
Speaker Deck
PRO
Sign in
Sign up
for free
Go言語でシミュレーション用のシンプルなフレームワークStageをつくった/Fukuokago Stage
monochromegane
July 14, 2020
Technology
0
180
Go言語でシミュレーション用のシンプルなフレームワークStageをつくった/Fukuokago Stage
Fukuoka.go#16 (オンライン開催)
https://fukuokago.connpass.com/event/180414/
monochromegane
July 14, 2020
Tweet
Share
More Decks by monochromegane
See All by monochromegane
monochromegane
0
190
monochromegane
0
680
monochromegane
0
130
monochromegane
0
1.2k
monochromegane
0
3.4k
monochromegane
0
3.5k
monochromegane
0
3.5k
monochromegane
0
250
monochromegane
0
1.3k
Other Decks in Technology
See All in Technology
supership
0
140
line_developers
PRO
2
370
tsuyo
0
470
noriyukitakei
0
1.1k
yuhta28
0
130
chomado
0
270
finengine
0
140
rnakamuramartiny
0
980
waka
0
130
sat
1
240
ocise
0
110
kawaguti
0
160
Featured
See All Featured
paulrobertlloyd
72
1.5k
lara
590
61k
revolveconf
200
9.7k
robhawkes
52
2.9k
cromwellryan
104
6.3k
lara
16
2.8k
lara
172
9.7k
akmur
252
19k
colly
66
3k
cassininazir
347
20k
jensimmons
208
10k
bkeepers
PRO
322
53k
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