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.9k
対戦ゲームに学ぶ、フレームワークの設計技法と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
410
Backend エンジニア視点からの GraphQL / GraphQL from a perspective of backend engineer
qsona
27
8.3k
3 Practices about Service-to-Service GraphQL Ruby Client
qsona
1
900
いかにして 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
14k
最高のマスターデータ管理手法考察 & VSCode Extension を活用した話 / developing masterdata management tool by using vscode extension
qsona
9
6.3k
GraphQL を活用したスキーマ駆動開発の実践 / schema-driven development with GraphQL
qsona
6
5.2k
GraphQL を利用したアーキテクチャの勘所 / Architecture practices with GraphQL
qsona
37
15k
Featured
See All Featured
Helping Users Find Their Own Way: Creating Modern Search Experiences
danielanewman
29
2.4k
Visualizing Your Data: Incorporating Mongo into Loggly Infrastructure
mongodb
45
9.4k
How to Ace a Technical Interview
jacobian
276
23k
Designing Experiences People Love
moore
140
23k
Building a Scalable Design System with Sketch
lauravandoore
461
33k
CoffeeScript is Beautiful & I Never Want to Write Plain JavaScript Again
sstephenson
160
15k
Optimising Largest Contentful Paint
csswizardry
34
3.1k
Automating Front-end Workflow
addyosmani
1368
200k
Rebuilding a faster, lazier Slack
samanthasiow
80
8.8k
Cheating the UX When There Is Nothing More to Optimize - PixelPioneers
stephaniewalter
280
13k
Documentation Writing (for coders)
carmenintech
67
4.6k
The Illustrated Children's Guide to Kubernetes
chrisshort
48
49k
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 ʹͯ͢·ͱΊͯ͋Γ·͢