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
対戦ゲームに学ぶ、フレームワークの設計技法とAIのアルゴリズム入門 / game model
Search
qsona
August 30, 2019
2
7.8k
対戦ゲームに学ぶ、フレームワークの設計技法とAIのアルゴリズム入門 / game model
builderscon tokyo 2019 / 補足はこちら
https://note.mu/qsona/n/n137733801fd0
qsona
August 30, 2019
Tweet
Share
More Decks by qsona
See All by qsona
サーバー間 GraphQL と webmock-graphql の話 / server-to-server graphql and webmock-graphql
qsona
4
340
Backend エンジニア視点からの GraphQL / GraphQL from a perspective of backend engineer
qsona
28
8k
3 Practices about Service-to-Service GraphQL Ruby Client
qsona
1
820
いかにして GraphQL を組織に導入するか (新規開発編) / how we introduce GraphQL on scratch development
qsona
6
3.9k
Well-organized Transaction Script - リファクタリングの妥協的手法 -
qsona
4
1.3k
GraphQL と Prisma から考える次のN年を見据えた技術選定 / Architecture decision for the next N years at StudySapuri
qsona
25
13k
最高のマスターデータ管理手法考察 & VSCode Extension を活用した話 / developing masterdata management tool by using vscode extension
qsona
9
6.1k
GraphQL を活用したスキーマ駆動開発の実践 / schema-driven development with GraphQL
qsona
6
5k
GraphQL を利用したアーキテクチャの勘所 / Architecture practices with GraphQL
qsona
37
15k
Featured
See All Featured
Building Better People: How to give real-time feedback that sticks.
wjessup
363
19k
Designing Experiences People Love
moore
138
23k
JavaScript: Past, Present, and Future - NDC Porto 2020
reverentgeek
47
5k
Making the Leap to Tech Lead
cromwellryan
132
8.9k
Six Lessons from altMBA
skipperchong
26
3.4k
Navigating Team Friction
lara
183
14k
Done Done
chrislema
181
16k
Designing for humans not robots
tammielis
249
25k
Creating an realtime collaboration tool: Agile Flush - .NET Oxford
marcduiker
25
1.8k
A Tale of Four Properties
chriscoyier
156
23k
Fashionably flexible responsive web design (full day workshop)
malarkey
404
65k
Learning to Love Humans: Emotional Interface Design
aarron
272
40k
Transcript
ରઓήʔϜʹֶͿ ϑϨʔϜϫʔΫͷઃܭٕ๏ ͱAIͷΞϧΰϦζϜೖ builderscon tokyo 2019 (2019-08-30) @qsona
whoami • @qsona • ιϑτΣΞΤϯδχΞ • ରઓήʔϜ͖ • কعΞϚνϡΞ࢛ʙޒஈ͘Β͍ •
ήʔϜAIΛ͔ͬͨ͜͡ͱ͋Γ
ࠓͷ • ରઓήʔϜָ͍ͧ͠ • ରઓήʔϜʹؔ࿈͢Δٕज़ͷΛ͢Δ • ॳڃऀ͚ • ٕज़ͱ࣮ੈքͷήʔϜͱͷܨ͕ΓΛײͯ͡ Β͑ͨΒخ͍͠
ࠓͷࡐओʹ͜ΕΒͰ͢ • ࢦͷήʔϜ / কع / ຑ / ΑΑ /
ਓ ͦΕͧΕҧ͏ੑ࣭Λ࣋ͭήʔϜ • ରઓήʔϜΛϞσϦϯά͢Δ͜ͱͰɺ ήʔϜͷੑ࣭Λଊ͑ͯΈΔ • ϞσϦϯάΛੜ͔͠ɺήʔϜͷϓϩάϥϛϯά AIΞϧΰϦζϜΛߟ͑Δ
Agenda • 1. ରઓήʔϜͷϞσϦϯά • 2. ରઓήʔϜAIͷΞϧΰϦζϜೖ • 3. boardgame.io
ʹֶͿ ϑϨʔϜϫʔΫઃܭͷצॴ
1. ରઓήʔϜͷϞσϦϯά • 3ͭͷ؍ͰϞσϦϯά͢Δ • ήʔϜͷϧʔϧ • ήʔϜͷछྨͷྨ • ήʔϜͷঢ়ଶͷਐߦ
(ήʔϜ) • ͦΕͧΕͷ؍ͰͷϞσϧͱɺ ࣮ੈքʹ͓͚Δਓؒͷଊ͑ํͱͷؔ࿈Λߟ͑Δ
ରઓήʔϜͷϧʔϧͷఆࣜԽ • ήʔϜͷঢ়ଶͷू߹, ॳظঢ়ଶ • Move • ϓϨΠϠʔ͕ήʔϜΛਐΊΔखஈ • ঢ়ଶ͔Βঢ়ଶͷભҠ
• ऴྃ݅ͱ݁Ռ
࣮ੈքͰͷఆࣜԽ ྫ: কعͷϧʔϧ • ࣮ࡍͷήʔϜͷϧʔϧɺ ͦͷ3ͭͰߏ͞Ε͍ͯΔͷ? • কعΨΠυϒοΫ (ຊকع࿈ໍ, 2003)
ΛಡΈղ͍ͯݕূ͢Δ • ϧʔϧ17߲ʹ͔Ε͍ͯΔ
• 1. ରہ • 2. ରہऀ • 3. ۨΛॳܕʹஔ •
4. ۨͷଘࡏͱͦͷۭؒ • 5. ֤ۭؒͷۨͷଘࡏ • 6. ۨͷಈ͖ͱੑ࣭ • 7. ࢦ͠ख • 8. ࢦ͠खͷछྨ • 9. औΔ • 10. Δ • 11. ۨͷؼଐ • 12. ࢦ͠खͷྃ • 13. ہ໘ͷఆٛ • 14. ൫্ͷۨͱ࣋ͪۨͷؔ • 15. Ԧखͱ٧Έ • 16. ಛʹܾΊΒΕͨېࢭࣄ߲ • 17. ऴہ
• 1. ରہ • 2. ରہऀ • 3. ۨΛॳܕʹஔ •
4. ۨͷଘࡏͱͦͷۭؒ • 5. ֤ۭؒͷۨͷଘࡏ • 6. ۨͷಈ͖ͱੑ࣭ • 7. ࢦ͠ख • 8. ࢦ͠खͷछྨ • 9. औΔ • 10. Δ • 11. ۨͷؼଐ • 12. ࢦ͠खͷྃ • 13. ہ໘ͷఆٛ • 14. ൫্ͷۨͱ࣋ͪۨͷؔ • 15. Ԧखͱ٧Έ • 16. ಛʹܾΊΒΕͨېࢭࣄ߲ • 17. ऴہ (1) ήʔϜͷঢ়ଶ(ہ໘)ͷ ू߹, ॳظঢ়ଶ
ہ໘ (≒ήʔϜͷঢ়ଶͷू߹) • কع൫ = 9x9 • ֤Ϛεʹɺઌख·ͨޙखͷ͕ۨ ࠷େ1ͭೖΔ •
ۨɾ࣋ۨ • ઌखɾޙख1ͭͣͭ
ہ໘ (≒ήʔϜͷঢ়ଶͷू߹) • ൫໘ (൫্+ۨ), ࣋ۨ (ۨ+ۨ), ख൪ Λ߹Θͤ ͯʮہ໘ʯͱఆٛ͞Ε͍ͯΔ
• ہ໘ɺকعʹ͓͚ΔήʔϜͷঢ়ଶ • ਖ਼֬ʹɺہ໘୯ମ͚ͩͰήʔϜͷঢ়ଶΛ දͤͳ͍ (ઍख: ϧʔϓΛఆͰ͖ͳ͍)
ॳܗ (ॳظঢ়ଶ)
• 1. ରہ • 2. ରہऀ • 3. ۨΛॳܕʹஔ •
4. ۨͷଘࡏͱͦͷۭؒ • 5. ֤ۭؒͷۨͷଘࡏ • 6. ۨͷಈ͖ͱੑ࣭ • 7. ࢦ͠ख • 8. ࢦ͠खͷछྨ • 9. औΔ • 10. Δ • 11. ۨͷؼଐ • 12. ࢦ͠खͷྃ • 13. ہ໘ͷఆٛ • 14. ൫্ͷۨͱ࣋ͪۨͷؔ • 15. Ԧखͱ٧Έ • 16. ಛʹܾΊΒΕͨېࢭࣄ߲ • 17. ऴہ (2) Move (ࢦ͠ख)
ࢦ͠ख (Move) • ൫্ͷۨΛಈ͔͢ or ۨͷۨΛ൫্ʹଧͭ • ൫্ͷۨΛಈ͔͢߹ɺ͞Βʹ࣍ͷಈ࡞͕Մ ೳͳ߹͕͋Δ •
(૬खͷۨΛ) औΔ • Δ (ۨΛཪฦ͢)
߹๏खͱې͡ख • কعͷࢦ͠खʹɺ߹๏ख (Valid Move)ͱ ې͡ख (Invalid Move) ͕͋Δ •
ې͡खࢦ͠खͷू߹ʹؚ·ΕΔ͕ɺ ͦΕΛࢦ͢ͱʮଇʯͷऴྃ݅ʹΑΓ ήʔϜ͕ऴྃ͢Δ
ې͡खͷྫ • ਖ਼͘͠ͳ͍ۨͷಈ͔͠ํ • ೋา, ଧͪา٧Ί, etc... • ԦΛ૬खʹऔΒΕͯ͠·͏ঢ়ଶʹ͢Δ •
※ԦΛ࣮ࡍʹऔΔ͜ͱى͜Βͳ͍ɻ औΕΔ࣌Ͱ૬ख͕ଇෛ͚
• 1. ରہ • 2. ରہऀ • 3. ۨΛॳܕʹஔ •
4. ۨͷଘࡏͱͦͷۭؒ • 5. ֤ۭؒͷۨͷଘࡏ • 6. ۨͷಈ͖ͱੑ࣭ • 7. ࢦ͠ख • 8. ࢦ͠खͷछྨ • 9. औΔ • 10. Δ • 11. ۨͷؼଐ • 12. ࢦ͠खͷྃ • 13. ہ໘ͷఆٛ • 14. ൫্ͷۨͱ࣋ͪۨͷؔ • 15. Ԧखͱ٧Έ • 16. ಛʹܾΊΒΕͨېࢭࣄ߲ • 17. ऴہ (3) ऴྃ݅ͱ݁Ռ
ऴہ (ऴྃ݅ͱ݁Ռ) • ԦΛ٧·͢ (٧·ͤͨํ͕উͪ) • ྃ (ྃΛએݴͨ͠ํ͕ෛ͚) • ૬ೖۄ
(Ͱউഊ͕ܾ·Δ) • ઍख (Ҿ͖͚) • ଇ (ېࢭࣄ߲ɻଇΛͨ͠΄͏͕ෛ͚)
Ԧखͱ٧Έ • ࣍ʹ૬खͷԦΛऔΕΔঢ় ଶ͕ʮԦखʯ • ԦखͰ͋Γɺ͞Βʹ૬ख ͕Ͳ͏ͬͯ࣍ʹԦΛ औΕΔঢ়ଶ͕ʮ٧Έʯ • ٧Έͷ߹ɺԦखΛ͔͚
͍ͯΔଆ͕উͪ
ଧͪา٧Ί • ଇͷҰछɻ าΛଧͬͯʮ٧Έʯʹ͍͚ͯ͠ͳ͍
"ଧͪา٧Ί" ϝλతϧʔϧ • "٧Έ" = Ԧख͕͔͔͓ͬͯΓɺ͔ͭ૬खʹ Valid Move ͕ଘࡏ͠ͳ͍ঢ়ଶ •
าΛଧͬͯԦख͢Δ ͱ͍͏ Move ɺ ͦͷޙ૬खʹ Valid Move ͕ଘࡏ͠ͳ͍ͱ͖ Invalid Move Ͱ͋Δ
ઍख • 4ճಉ͡ہ໘͕ൃੜ͢Δ͜ͱ • Ҿ͖͚ • ҰൠతʹઌखͱޙखΛೖΕସ͑ͯΓ͢ • ͨͩ͠ɺ͜ͷؒยํͷԦख͕ଓ͍͍ͯΔ ʮ࿈ଓԦखͷઍखʯɺ
ԦखΛ͔͚͍ͯΔํ͕ଇෛ͚
ʮ࠷ޙͷ৹ʯ(1997) • ๓ాޫ࢘ ࢯʹΑΔ ٧কع • ٧কع ... Ԧखͷ࿈ଓ Ͱ૬खͷԦ༷Λ٧Ί
Δύζϧ • কعͷϧʔϧͷໃ६Λ ಥ͍ͨ࡞
None
None
None
தུ
None
None
None
None
3ճ܁Γฦ͢
None
None
None
࿈ଓԦखͷઍख • ઍख ... 4ճಉ͡ہ໘͕ൃੜ͢Δ͜ͱ • ͜ͷہ໘ʮ࿈ଓԦखͷઍखʯʹΑΓ ઌख(ԦखΛ͔͚͍ͯΔํ)͕ଇෛ͚ • ͱ͍͏͜ͱɺઌख͕ҧ͏खΛࢦ͞ͳ͚Ε
ͳΒͳ͍?
None
ଞʹख͕ͳ͍ • าͰԦख͕͔͔͍ͬͯΔ • ֯ͰऔΔҎ֎ͷબࢶ͕ͳ͍ • ͔͠͠ɺ֯Ͱऔͬͯଇෛ͚ • ͭ·Γ͜ͷہ໘ "٧Έ"
Ͱ......?
าͷԦखͰ٧Μͩ • ͱ͍͏͜ͱ͜ͷہ໘ʮଧͪา٧Ίʯ • (࠶ܝ) าΛଧͬͯԦख͢Δ ͱ͍͏ Move ɺ ͦͷޙ૬खʹ
Valid Move ͕ଘࡏ͠ͳ͍ͱ͖ Invalid Move Ͱ͋Δ • ͭ·Γ͜ͷาଧͯͳ͍ɺͱ͍͏ओு
None
͜ͷ٧কعཱ͢Δ͔? • ͜ͷาଧͪʮଧͪา٧Ίʯͳͷ͔Ͳ͏͔ • ײʹ͔ͳΓ͢Δɻ • ٧Έͱ͍͑ී௨ ʮͲ͏ࢦͯ࣍͠ʹԦ͕औΒΕΔʯ͜ͱ • ͜Μͳ͜ͱ͕ى͖Δ͜ͱ୭ߟ͑ͳ͔ͬͨ
͜ͷ٧কعཱ͢Δ͔? • ݱߦͷϧʔϧͰɺউͪෛ͚͕ʮෆఆʯ ͱ͍͏ͷ͕ఆઆ • ϧʔϧ͕ᐆດɺਖ਼͘͠ఆࣜԽͰ͖͍ͯͳ͍ • ࢲݟ: কعΨΠυϒοΫ (2003)
Λਫ਼ಡ͢Δͱ... • ଓ͖WebͰ
ྫ: ਓ • ਓͷϧʔϧΛͦͷ··ద༻͢Δͱɺࣗવݴޠղੳ͕ඞཁ ʹͳΓɺղੳ͕͍͠ • ʮਓϓϩτίϧʯ... ֤ϓϨΠϠʔͷൃݴΛఆࣜԽ (ࣄ࣮ ҙਤͷද໌,
ཁͳͲ) • ྫ: REQUEST [◦͞Μ] (DIVINATION [×͞Μ]) →ʮ◦͞Μɺ×͞ΜΛ͍·͠ΐ͏ʯ • ͜ΕʹΑΓݚڀରʹ͘͢͠ͳΔ
ϧʔϧΛఆࣜԽ͢Δͱ • ʮ࠷ޙͷ৹ʯͷΑ͏ͳέʔεΛਖ਼͘͠ఆͨ͠Γɺ ໃ६Λൃݟͨ͠ΓͰ͖Δ (ͣ) • ήʔϜ AI ͳͲͷݚڀରʹͰ͖Δ •
ಛʹ General Game Playing ... ະͷήʔϜΛ͏· ͘ϓϨΠͰ͖Δ൚༻ AI ͷରʹ • ήʔϜࣗମͷੑ࣭ͷཧղʹܨ͕Δ
2. ରઓήʔϜͷྨ
جຊͷྨ߲ • ϓϨΠਓ (2ਓʙ) • རಘͷ߹ܭҰఆ(θϩ)͔ • ঢ়ଶ͕ແݶʹଘࡏ͢Δ͔ • ϥϯμϜωε(ཚ)ଘࡏ͢Δ͔
• ͯ͢ͷใ͕શһʹ։ࣔ͞Ε͍ͯΔ͔
ೋਓྵ༗ݶ֬ఆશใήʔϜ • কع, ғޟ, Φηϩ, νΣε, ... ͳͲ • ήʔϜAIݚڀͰجຊͱͳΔΫϥελ
ਓ ਓ ঢ়ଶ ༗ݶݸ ϥϯμϜωε ͳ͠ ใ શͯ։ࣔ
ྫ: ຑ • ଟਓ, ϥϯμϜωε͋Γ, ෆશใ ਓ ਓ ঢ়ଶ ༗ݶݸ
ϥϯμϜωε ͋Γ ہ͝ͱͷॳظঢ়ଶϥϯμϜ ใ ࣗͷखṛ )BOE ͚ࣗͩʹ։ࣔ ࢁṛ %FDL શһʹඇ։ࣔ
ྫ: ΑΑ • ϓϨΠϠʔҙͷλΠϛϯάͰૢ࡞Մೳͳ ͷͰɺ࿈ଓແݶͷہ໘͕͋Δ͕ɺ࣮࣭తʹ ࢄεςοϓͱଊ͑Δ͜ͱ͕Մೳ ਓ ਓ ঢ়ଶ ࿈ଓແݶ࣮࣭తʹ༗ݶ
ϥϯμϜωε ͋Γ ใ ΄΅શใ खઌҎ্ͷΑදࣔ͞Εͳ͍
ྫ: ਓ • ྨ্͔ͳΓಛघͳήʔϜͱݴ͑Δ ਓ ଟਓɾνʔϜ ঢ়ଶ ࿈ଓແݶϓϩτίϧͷ੍ݶʹΑΓ༗ݶ ϥϯμϜωε ॳظঢ়ଶҎ֎΄΅ͳ͠
ใ ෆશใ
ଟਓͷ͠͞ • ࣗͷߦಈ͕ଞਓͷউഊʹӨڹͯ͠͠·͏͜ ͱ͕͋Δ • શһ͕ेʹϨϕϧ͕ߴ͘ɺͦΕͧΕ͕ࣗ ͷউͪͷͨΊʹߦಈ͢ΔͱԾఆͯ͠Α͍ͷͩ Ζ͏͔?
ϥϯμϜωεͷ͠͞ • ࠷ऴ݁Ռ͚͔ͩΒֶश͠Α͏ͱ͢Δͱ ऩଋʹ͔͔࣌ؒΓ͗͢Δ • ≒ ݁ՌʹҰتҰ༕͢Δਓڧ͘ͳΒͳ͍ • ֬Ͱߟ͑Δඞཁ͕͋Δ •
ྫ: "ṛޮ" ... ΞΨΕΔ͕֬ߴ͍ํ๏Λ୳͢
ෆશใͷ͠͞ • ͖݅֬Λߟ͑Δඞཁ͕͋Δ • ྫ: ࣺͯṛ͔Β૬खͷͪΛਪଌ͢Δ • ૬खʹखͷΛಡ·Εͳ͍Α͏ɺ ࠞ߹ઓུ͕ඞཁʹͳΔ߹͕͋Δ
θϩରઓήʔϜͷྨ·ͱΊ • ೋਓɾ༗ݶɾ֬ఆɾશใ͕ ͬͱجຊͷΫϥελ • ͦΕͧΕҳ͢Δͱ৽ͨͳෳࡶ͕͞ੜ·ΕΔ
3. ήʔϜ (ήʔϜͷਐߦͷϞσϦϯά)
ήʔϜͷਐߦͱߏ • ॳظঢ়ଶ͔ΒɺMoveʹΑͬͯήʔϜͷঢ়ଶ͕ ॱʑʹҠΓมΘ͍ͬͯ͘ • ঢ়ଶ = ϊʔυ Move =
ࢬ ͱΈͳͨ͠ߏͰදͤΔ
ઌख ޙख ઌख ޙख
ήʔϜͷϊʔυͷ • ೋਓήʔϜͷ߹ • ࣗͷख൪ => max(ࢠϊʔυͷ) • ૬खͷख൪ =>
min(ࢠϊʔυͷ)
ઌख ޙख ઌख ޙख উͪ ෛ͚ Ҿ ෛ͚ ઌखࢹ ͷউഊ
ઌख ޙख ઌख ޙख উͪ ෛ͚ Ҿ ෛ͚ ઌखࢹ ͷউഊ
Ҿ উͪ
ઌख ޙख ઌख ޙख উͪ ෛ͚ Ҿ ෛ͚ ઌखࢹ ͷউഊ
Ҿ উͪ Ҿ Ҿ
ήʔϜͱήʔϜͷੑ࣭ • ήʔϜ͕Ͳ͏ͳ͍ͬͯΔ͔ɺਓؒͷײ͡ ํͱϦϯΫ͍ͯ͠Δͣ • ྫ͑ ਓ͕ؒʮ໘ന͍ʯͱײ͡ΔήʔϜΛɺ ήʔϜͷঢ়ଶͰදͤͳ͍ͩΖ͏͔?
ࢲݟ: ໘ന͍ήʔϜ • ϧʔϧ͕γϯϓϧ • ਂΈ͕͋Δ • ۓுײ͕࣋ଓ͢Δ (దʹٯస͕ى͜Γ͍͢)
ήʔϜ ઌख
ফԽࢼ߹ͷήʔϜ ෛ͚ ෛ͚ ෛ͚ উͪ উͪ উͪ উͪ উͪ ઌख
ফԽࢼ߹ͷήʔϜ • ͕ࣗͲΕΛબΜͰউͭ • ฆΕ͕গͳ͍
࠷ޙ·Ͱ͍ࢼ߹ͷήʔϜ ෛ͚ ෛ͚ ෛ͚উͪ ෛ͚ উͪ ෛ͚ উͪ উͪ ઌख
࠷ޙ·Ͱ͍ࢼ߹ͷήʔϜ • ͕ࣗબΜͰউͯΔखҰ͚ͭͩ • উͪͷہ໘͕ଟ͍͕ɺ ૬ख͕ਖ਼֬ʹΔͱෛ͚Δख͕͋Δ • ٯసͷՄೳੑ͕͋Δ
ήʔϜͷ໘ന͞ͷఆࣜԽ • ଞʹ໘ന͞ͷई͋Δ͕ɺଟ͘ ήʔϜͷঢ়ଶͰදݱͰ͖ͦ͏ • ໘ന͞ΛఆࣜԽͰ͖Ε ʮࣗಈήʔϜ࡞AIʯΛ࡞ΕΔ͔͠Εͳ͍
1ষ·ͱΊ • ରઓήʔϜΛ3ͭͷ؍ͰϞσϦϯάͨ͠ • ͦΕͧΕɺ࣮ੈքʹ͓͚Δ֓೦ͱͷؔΛࣔ ͨ͠ • ࣍ͷষ͔Β͜ͷϞσϧΛ AIήʔϜϑϨʔϜϫʔΫʹద༻͍ͯ͘͠
2. ରઓήʔϜͷղੳͱ AIͷΞϧΰϦζϜೖ
ରઓήʔϜAIͷྺ࢙ • ݚڀ1950͝Ζ͔Βଘࡏ • von Neumann (ϑΥϯɾϊΠϚϯ) • C. E.
Shannon (γϟϊϯ) • Alan Turing (νϡʔϦϯά) • ߽՚
ରઓήʔϜAIͷྺ࢙ • 1993 6x6Φηϩͷશղੳ(ޙखউͪɺ16-20) • 1997 νΣεͰੈքνϟϯϐΦϯʹউར • 2007 νΣοΧʔͷશղੳ(Ҿ͖͚)
• 2013 কعͰτοϓϨϕϧͷϓϩع࢜ʹউར • 2016 ғޟͰτοϓϨϕϧͷϓϩع࢜ʹউར
ରઓήʔϜAIͷجຊ • ήʔϜΛϕʔεʹ୳ࡧ͢Δ • ϛχϚοΫε๏, ࢬמΓ (α-β๏) • ϞϯςΧϧϩ୳ࡧ •
ධՁؔΛ࡞Δ • ήʔϜͷঢ়ଶΛείΞͰදؔ͢
ࢀߟ: কعʹ͓͚Δਓؒͷઓུ ͱͷൺֱ • ήʔϜΛϕʔεʹ୳ࡧ͢Δ (ಡΈ) • ͋Γ͑ͦ͏ͳࢦ͠खΛ͍͔ͭ͘બΜͰಡΉ (બత୳ࡧ) •
AI Ͱશ෯୳ࡧ͕ओྲྀ
ࢀߟ: কعʹ͓͚Δਓؒͷઓུ ͱͷൺֱ • ධՁؔ (ܗஅ, େہ؍) • ඇৗʹ͘͠ɺτοϓϓϩಉ࢜Ͱҙݟ͕ ৯͍ҧ͏
• ७ਮͳධՁؔ(੩తͳہ໘ͷධՁ)Ͱ ਓؒ > AI
୳ࡧ(1) ϛχϚοΫε๏ / ࢬמΓ(α-β๏) • ήʔϜͷͱ͜ΖͰઆ໌ͨ͠ͷ͕ ϛχϚοΫε๏ • ࢬמΓ ...
ಡ·ͳͯ͘ྑ͍ࢬΛΧοτ͢Δ • ྫ: ͋ΔMoveͰ10औΕΔͷ͕֬ఆ͍ͯ͠Δɻ => 10ҎԼ͕֬ఆͨ͠ࢬಡ·ͳͯ͘Α͍
ࢬמΓͷྫ ઌख
ࢬמΓͷྫ ઌख ? ಡ·ͳͯ͘ྑ͍
୳ࡧ (2) ϞϯςΧϧϩ୳ࡧ • ͱΓ͋͑ͣɺήʔϜऴྃ·ͰͬͯΈΔͷΛ Կճ܁Γฦ͢ • উ͕ߴ͍खΛબͿ • ͨͩ͠ɺ୯ʹϥϯμϜʹબͿ͚ͩͩͱऑ͍ͷ
ͰɺΛ͢Δ
ϞϯςΧϧϩ୳ࡧͷվྑ • Multi-Armed Bandit Problem ʹର͢ΔΞϧΰϦ ζϜΛԠ༻͢Δ (UCB1 ΞϧΰϦζϜͳͲ) •
ͲΕ͘Β͍ͨΔ͔ෆ໌ͳεϩοτϚγϯ͕ͨ ͘͞Μ͋Δͱ͖ɺͲ͏͍͏ઓུͰΔͱྑ͍͔
ධՁؔ • ྫ: ΦηϩͰ۱ΛऔΔͱධՁ͕ߴ͍ • ػցֶशΛ͏ͷ͕ओྲྀ • ಛྔͷநग़ਓ͕ؒߦ͏ • General
Game Playing ʹ͓͍ͯɺಛྔ ͢Β AI ͕ࣗͰநग़͢Δ
͔͜͜Β࣮ࡍͷήʔϜͰͷྫ
ྫ: ࢦͷήʔϜ • ہ໘͕গͳ͍ • ͔͔ͨͩ 5^4 * 2 =
1250 ௨Γ • ରশੑΛߟ͑ͯ (5+4+3+2+1) * 2 - 1 = 224௨Γ • ͦͷ͏ͪ14௨Γऴྃہ໘ • શղੳ͕Մೳ
ૉͳղੳํ๏ • ॳظঢ়ଶ͔ΒήʔϜΛల։͠ͳ͕Βܭࢉ • ϛχϚοΫε๏ • ಈతܭը๏ ... Ұܭࢉͨ͠ہ໘ͷ݁ՌΛอ ଘ͓͖ͯ͠ɺ࠶ར༻͢Δ
• : ήʔϜʹϧʔϓ͕ଘࡏ͢Δ
ޙୀղੳ • ऴྃͷہ໘͔Βٯࢉ͠ɺউͪ/ෛ͚ͷہ໘Λ֬ఆ͍ͤͯ͘͞ • ෛ͚ہ໘͔Β1खͬͨہ໘উͪہ໘ • উͪہ໘͔Β1खͬͨہ໘͔ΒɺࢬΛফ͢ɻࢬ͕0ຊʹ ͳ͍ͬͯͨΒͦͷہ໘ෛ͚ہ໘ • ֬ఆ͍ͯ͠Δہ໘͕૿͑ͳ͘ͳͬͨΒɺ
Γͷہ໘Ҿ͖͚
ྫ: কع • શղੳෆՄೳ • ہ໘͕ଟ͗͢Δ (10^68 ఔͱਪଌ͞ΕΔ) • ήʔϜͰҰఆͷਂ͞·Ͱ୳ࡧ͠ɺ
ہ໘ΛධՁؔͰධՁ͢Δ • ධՁ͕ؔॏཁ
কعͷධՁؔ • ੲϧʔϧϕʔεͩͬͨ • ։ൃऀͷྗͷ݁থ... • عྗΞϚνϡΞ༗ஈϨϕϧ (12ࡀͷqsonaͱಉఔ. ϓϩ·ͣෛ͚ͳ͍) •
͜ͷධՁؔʹϒϨΠΫεϧʔ͕ى͖Δ
Ϙφϯβϝιου • Bonanza (2005, อਔ ࢯ) • ϓϩع࢜ͷعේΛڭࢣσʔλͱͯ͠ɺ ػցֶशʹΑΓධՁؔΛ࡞ •
ύϥϝʔλɺۨͷՁɺ 3ۨͷҐஔؔͳͲ
কعͷධՁؔͦͷޙ • ࣗಉ࢜Λରઓֶͤͯ͞श͢Δ (ڧԽֶश) • ϓϩͷعේΛશ͘Θͣɺθϩ͔ΒࣗݾରઓͰ ڧ͘͢ΔࢼΈ͋Δ • AlphaZero ͕༗໊
• ͜ͷํ๏ͰਓؒΛ͑ΔϨϕϧʹͳ͍ͬͯΔ
ͪͳΈʹ: શղੳͱධՁؔ • શղੳʹ͓͍ͯධՁؔॏཁ • (݁ہશ෦ಡΉͳΒɺঢ়ଶΛධՁ͢Δඞཁ͕ͳͦ͞͏ʹࢥ͑Δ͕...) • ྑͦ͞͏ͳMove͔ΒಡΉ͜ͱͰ ୳ࡧ͢Δہ໘ΛݮΒͤΔ •
શہ໘ n => ୳ࡧہ໘ √n
ྫ: ғޟ • ғޟͷAI͠Βͣͬ͘ͱऑ͔ͬͨ • 2006, ϞϯςΧϧϩ୳ࡧ + UCB1 ͷొʹ
ΑΓɺಥવΞϚνϡΞߴஈҐϨϕϧʹ • ΊͪΌͪ͘Ό͔Γ͍͢ࢀߟࢿྉ͕͋ΔͷͰ ஔ͍͓͖ͯ·͢
ྫ: ΑΑ • ࣮ػͰਓؒʹউͬͨྫ͋Γ • (࣮ը໘Λը૾ೝࣝ) • AI ಉ࢜ͷରઓେձͷه͋Δ •
ϨΪϡϨʔγϣϯ͕͍͠ • ൛ݖͷ, ϓϥοτϑΥʔϜ͕ͳ͍ • ਓؒͷೝࣝೳྗͷݶք (কعʹൺͯAIѹత༗ར)
ྫ: ਓ • ʮਓೳϓϩδΣΫτʯ • ਓϓϩτίϧͷͱͰAIಉ࢜ରઓ͢Δ ϓϥοτϑΥʔϜ͕ଘࡏ͢Δ • ৽͍͠λΠϓͷήʔϜɻ ͜Ε͔Βݚڀ͕ൃల͍ͯ͘͠
ରઓήʔϜAIͷ͜Ε͔Β • ݚڀʹ͓͍ͯɺ͋ΔಛఆͷήʔϜAIΛݚڀ͢Δ͜ ͱͰଞͷʹߩݙ͢Δ͜ͱ͕͋ΔఔٻΊΒΕΔ • ೋਓɾશใήʔϜ͔ͳΓݚڀ͠ਚ͘͞Ε͖ͯ ͍ͯΔ • ଟਓɺෆશใήʔϜɺGeneral Game
Playingʹؔ৺͕ҠΓͭͭ͋Δ
ରઓήʔϜAIͷ͜Ε͔Β (ࢲݟ) • झຯͱͯ͠ͷήʔϜAIϓϩάϥϛϯάΛ ͬͱؾܰʹָ͠ΊΔੈքʹͳΔͱ͍͍ • దͳ੍ΛͬͨϓϥοτϑΥʔϜ͕͋Δͱ ྑ͍? (ܭࢉͷεςοϓΛ੍ݶ͢Δͱ͔) •
ࠃͰ e-sports AtCoder ͳͲؔ࿈͕ Γ্͕͍ͬͯΔͷͰɺػӡ͋Δ
3. boardgame.io ʹֶͿɺ ϑϨʔϜϫʔΫઃܭͷצॴ
boardgame.io ͱ • λʔϯ(ख൪)ϕʔεͷήʔϜΛ࡞ΔͨΊͷ ϑϨʔϜϫʔΫ • JavaScript, Node.js, (React, React
Native) • TypeScript ରԠਐߦத
boardgame.io ͷػೳ (ެࣜΑΓ) • State Management • Multiplayer • AI
• Game Phases • Prototyping • Logs • View-Layer Agnostic • Component Toolkit • Extendable
ϑϨʔϜϫʔΫͱԿ͔ • A structure that forms a support or frame
for something • (Collins English Dictionary ΑΓ) • Կ͔ʹର͢Δࢧ࣋ΈΛܗ͢Δߏ
ϑϨʔϜϫʔΫͷྫ • Ruby on Rails • Angular
ࢲݟ: ྑ͍ϑϨʔϜϫʔΫ • ରͱ͢Δൣғ͕͍͕ɺ͗͢ͳ͍ • ରͷߏΛదʹଊ͍͑ͯͯɺ ؤ݈ੑ͕͋Δ • ଞͷٕज़ͱྑ͍ܨ͕Γ͕͋Δ (ΤίγεςϜ)
boardgame.io ͷର • λʔϯ੍ (Turn-Based) ͷήʔϜ • ͍͕ɺ͗͢ͳ͍దͳநԽ • ϦΞϧλΠϜͰಈ࡞͢ΔήʔϜΛؚΊΔͱ༨
ܭͳػೳ͕૿͑ɺҰํͰ݁ہΘΕͳͦ͏
(࠶ܝ) ରઓήʔϜͷϧʔϧ • ήʔϜͷঢ়ଶͷू߹, ॳظঢ়ଶ • Move • ϓϨΠϠʔ͕ήʔϜΛਐΊΔखஈ •
ঢ়ଶ͔Βঢ়ଶͷભҠ • ऴྃ݅ͱ݁Ռ
boardgame.io ʹΑΔଊ͑ํ (1) • G ... ։ൃऀ͕ ཧ͢ΔήʔϜ ͷঢ়ଶ •
ctx ... ϑϨʔϜ ϫʔΫଆͰ ཧ͢Δঢ়ଶ
ଊ͑ํ͕ద • ྫ: কع • ʮہ໘ʯ(൫໘ɾۨͷঢ়ଶ) Λঢ়ଶ(G)ͱͯ͠ཧ͍ͨ͠ • ࣮ࡍʹࢦ͠खͷཤྺήʔϜͷঢ়ଶʹؚ·ΕΔ •
ཤྺ͕ͳ͍ͱઍखͷఆ͕Ͱ͖ͳ͍... • ͦΕΒϑϨʔϜϫʔΫ͕ཧͯ͘͠ΕΔͷͰɺ։ൃऀ͕ҙ ࣝ͠ͳ͍Ͱ͑Δ (͍͍ͪͪࣗͰཤྺཧ͠ͳ͍͍ͯ͘)
boardgame.io ʹΑΔଊ͑ํ (2)
ଊ͑ํ͕ద • Move Λ G => G ͷ७ਮؔͱͯ͠ଊ͍͑ͯΔ • ෭࡞༻ͳ͠
• ϝϦοτ͕ଟ͍ • ཤྺͱͯ͠ѻ͍͍͢ • React ͳͲ View ଆͷϑϨʔϜϫʔΫͱ૬ੑ͕͍͍
boardgame.io ʹΑΔଊ͑ํ (3) • Phase ͱ͍͏֓೦Λಋೖ • Move ͨ͠ޙ Phase
ΛભҠͰ͖Δ • Phase ʹΑͬͯɺऔΓ͏Δ Move ͷछྨ͕ มΘΔ
ଊ͑ํ͕ద • Phase ཧతʹήʔϜͷঢ়ଶʹؚ·ΕΔ • ͔͠͠ɺଟ͘ͷήʔϜʹϚον͢Δ֓೦ • ਓ ... னͱͷ2ϑΣʔζͷ܁Γฦ͠
• னશһ͕ձ͠ɺਓ͚͕ͩձ͢ Δ
ϞσϦϯάͷؤ݈ੑ • ྑ͍ϞσϦϯά͕ग़དྷΔͱɺਵͯ͠ ͞·͟·ͳศརػೳΛ͚ͭΒΕΔ • "1ཻͰN͓͍͍͠"
࠶ܝ: boardgame.io ͷػೳ • State Management • Multiplayer • AI
• Game Phases • Prototyping • Logs • View-Layer Agnostic • Component Toolkit • Extendable
Multiplayer • ෳਓͰͷಉ࣌ରઓ͕Մೳ • multiplayer: { server: 'localhost:8000' } ͷΑ͏ʹઃఆ͢Δ͚ͩ
• transport ͕நԽ͞Ε͍ͯΔઃܭ • socket.io, firebase ͕͑ΔͬΆ͍
Multiplayer - ෆશใ • ෆશใήʔϜͷ߹ɺϓϨΠϠʔʹݟ ͑ͳ͍ήʔϜͷใ͕͋Δ • ௨৴͍ͨΒݟΕΔͱ͔μϝ • ήʔϜͷঢ়ଶ
=> PlayerView ͷ ७ਮؔͱͯ͠දݱ͢Δ͚ͩͰྑ͍
Logs • Move ͷݺͼग़͠Λཤྺͱͯ͠ѻ͑Δ • Undo, Redo ͕Ͱ͖Δ • عේͷอଘͱ͔͕؆୯ʹͰ͖Δ
Prototyping • ૢ࡞ը໘Λ࡞Βͳͯ͘ɺdebugը໘͕ࣗಈ Ͱ࡞ΒΕΔ • ήʔϜͷਐߦΛ؆୯ʹςετͰ͖Δ (Move ΛςΩετͰॻ͍ͯήʔϜΛਐΊΔ)
View-Layer Agnostic • PDS(ϓϨθϯςʔγϣϯͱυϝΠϯͷ)͕ શʹ͞Ε͍ͯΔ • React Ͱը໘ͷ࣮͕͙͢ʹ࢝ΊΒΕΔ • ΤίγεςϜ
(Component Toolkit ͳͲ) Λ ࣗવͱ࡞Δ͜ͱ͕Ͱ͖Δ
AI • ϞϯςΧϧϩ୳ࡧϕʔεͷAIΛࣗಈͰੜͰ ͖Δ • ϞϯςΧϧϩ୳ࡧήʔϜࣗମͷࣝΛඞ ཁͱ͠ͳ͍ɻ • ֤ঢ়ଶʹ͓͍ͯ Valid
Move ͷू߹Λฦؔ͢ Λ࡞Δ͚ͩͰɺ؆қతͳAI͕࡞ΕΔ...!
AI (ิ) • ϞϯςΧϧϩ୳ࡧ͕୯७ʹ͑Δͷɺϥ ϯμϜʹਐΊΕඞͣऴہ͢ΔήʔϜʹݶΔ • TicTacToe(◦×), ғޟ, Φηϩ, etc...
• ෆશใήʔϜ͍͠
ίʔυͷDEMO ͠Α͏ͱࢥ͕ͬͨ......
• ࣗͷίʔυ͕Ԛ͗ͯ͢ݟͤΒΕͳ͍... • PDS (ݟͨͱυϝΠϯͷ)શʹ͞Εͯ ͍ΔɻͦͷͰ࠷ѱͰͳ͍ • ͔͠͠ɺͦΕͧΕͷPͱDͷίʔυΘΓͱ ͻͲ͍ঢ়ଶʹͳ͍ͬͯΔ
ϑϨʔϜϫʔΫͷରͱݶք • ϑϨʔϜϫʔΫۜͷؙͰͳ͍ • ։ൃऀɺϑϨʔϜϫʔΫ͕ରͱ͍ͯ͠Δ ྖҬΛݟۃΊΔඞཁ͕͋Δ • ରͱ͍ͯ͠ͳ͍ྖҬʹ͍ͭͯɺࣗͷ಄Ͱ ߟ͑ͳ͚ΕͳΒͳ͍
ଟ͜ͷʹܨ͕Δ
·ͱΊ • ྑ͍ϑϨʔϜϫʔΫɺղܾ͢Δରͷ͞ ΛదʹͱΓɺͦΕΛਖ਼͘͠ଊ͍͑ͯΔɻ • ։ൃऀͦΕΛཧղ͠ɺϑϨʔϜϫʔΫ͕α ϙʔτ͠ͳ͍෦ʹ͍ͭͯࣗͰߟ͑Δඞཁ ͕͋Δɻ
·ͱΊͱࠓޙ
·ͱΊ • ϧʔϧɾήʔϜɾྨͷ3ͭͷ؍Ͱରઓ ήʔϜΛϞσϦϯά͠ɺͦΕͧΕ࣮ࡍͷରઓ ήʔϜͷੈքͱͷܨ͕ΓΛΈͨ • ϞσϦϯάɺ AI ͷΞϧΰϦζϜϑϨʔϜ ϫʔΫΛ࡞Δͱ͖ʹ׆͔͞ΕΔ
• ରઓήʔϜ໘ന͍ΑͶ!!
ࠓޙ • ෆશใήʔϜ൚༻AIͳͲͷݚڀ͕ࠓޙ͞Βʹ Γ্͕͍ͬͯ͘ͷͰɺ͍͖͍ͬͯͨ • ࣗಈήʔϜੜAI͋Γ͏Δͷ͔...? • ΈΜͳ͕͖ʹήʔϜΛ࡞ͬͨΓ༡ΜͩΓAIΛ࡞ͬ ͨΓͯ͠ൃදͰ͖ͯɺָ͍͠͠ݚڀʹͭͳ͕ΔΑ ͏ͳϓϥοτϑΥʔϜ͕Ͱ͖ͯ·Δͱ͍͍ͳʙ
ิ, ࢀߟࢿྉͳͲ • https://note.mu/qsona/n/n137733801fd0 ʹͯ͢·ͱΊͯ͋Γ·͢