builderscon tokyo 2019 / 補足はこちら https://note.mu/qsona/n/n137733801fd0
ରઓήʔϜʹֶͿ ϑϨʔϜϫʔΫͷઃܭٕ๏ͱAIͷΞϧΰϦζϜೖbuilderscon tokyo 2019 (2019-08-30)@qsona
View Slide
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)• ๓ాޫ࢘ ࢯʹΑΔ ٧কع• ٧কع ... Ԧखͷ࿈ଓͰ૬खͷԦ༷Λ٧ΊΔύζϧ• কعͷϧʔϧͷໃ६Λಥ͍ͨ࡞
தུ
3ճ܁Γฦ͢
࿈ଓԦखͷઍख• ઍख ... 4ճಉ͡ہ໘͕ൃੜ͢Δ͜ͱ• ͜ͷہ໘ʮ࿈ଓԦखͷઍखʯʹΑΓ ઌख(ԦखΛ͔͚͍ͯΔํ)͕ଇෛ͚• ͱ͍͏͜ͱɺઌख͕ҧ͏खΛࢦ͞ͳ͚ΕͳΒͳ͍?
ଞʹख͕ͳ͍• าͰԦख͕͔͔͍ͬͯΔ• ֯ͰऔΔҎ֎ͷબࢶ͕ͳ͍• ͔͠͠ɺ֯Ͱऔͬͯଇෛ͚• ͭ·Γ͜ͷہ໘ "٧Έ" Ͱ......?
าͷԦखͰ٧Μͩ• ͱ͍͏͜ͱ͜ͷہ໘ʮଧͪา٧Ίʯ• (࠶ܝ) าΛଧͬͯԦख͢Δ ͱ͍͏ Move ɺ ͦͷޙ૬खʹ Valid Move ͕ଘࡏ͠ͳ͍ͱ͖ Invalid Move Ͱ͋Δ• ͭ·Γ͜ͷาଧͯͳ͍ɺͱ͍͏ओு
͜ͷ٧কعཱ͢Δ͔?• ͜ͷาଧͪʮଧͪา٧Ίʯͳͷ͔Ͳ͏͔• ײʹ͔ͳΓ͢Δɻ• ٧Έͱ͍͑ී௨ ʮͲ͏ࢦͯ࣍͠ʹԦ͕औΒΕΔʯ͜ͱ• ͜Μͳ͜ͱ͕ى͖Δ͜ͱ୭ߟ͑ͳ͔ͬͨ
͜ͷ٧কعཱ͢Δ͔?• ݱߦͷϧʔϧͰɺউͪෛ͚͕ʮෆఆʯ ͱ͍͏ͷ͕ఆઆ• ϧʔϧ͕ᐆດɺਖ਼͘͠ఆࣜԽͰ͖͍ͯͳ͍• ࢲݟ: কعΨΠυϒοΫ (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 GamePlayingʹؔ৺͕ҠΓͭͭ͋Δ
ରઓήʔϜ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 ʹͯ͢·ͱΊͯ͋Γ·͢