ã©ãã¶ã¤ããããå人
ã©ãã¶ã¤ãããã AI ãä½ãã¾ããã絶対ã«åã¦ã¾ãããç¡åæãå³ãã£ã¦ãã ããã
ref: http://mame.github.io/dobutsu-shogi-master
ã©ãã¶ã¤ããããã¨ã¯
3 ãã¹ x 4 ãã¹ã®åç´åãããå°æ£ã§ããã©ã¤ãªã³ï¼çç¸å½ï¼ãããï¼1 ãã¹ããé²ããªãè§è¡ï¼ãããªã³ï¼1 ãã¹ããé²ããªãé£è»ï¼ãã²ããï¼æ©ç¸å½ãã«ãã¨ãã«æã£ããéç¸å½ï¼ã® 4 種é¡ã®é§ãåããã¦ãç¸æã®ã©ã¤ãªã³ãåããããã©ã¤ï¼ã©ã¤ãªã³ãä¸çªå¥¥ã®è¡ã¾ã§éã¶ããã ãç´å¾ã«åãããå ´åã¯ã ãï¼ã«æåããã°åã¡ã§ãã詳ãã㯠Wikipedia の記事ãè¦ã¦ãã ããã
ã©ãã¶ã¤ããããã¯å¾æå¿
åã§ãããã¨ãç¥ããã¦ãã¾ãï¼研究報告ï¼ãã¤ã¾ããå¾æãæ£ãããã¬ã¤ããéããå
æã¯çµ¶å¯¾ã«åã¦ã¾ãããã©ãã¶ã¤ããããå人ã¯å¸¸ã«æ£ãããã¬ã¤ããã®ã§ãå
æã®ããªãã¯çµ¶å¯¾ã«åã¦ã¾ããã
ãªãã§ä½ã£ãã®ã
å°æ£ã® AI ãä½ãã¨è©±é¡ã«ãªãè¿ä»ã§ãããã¼ãã¯ãããããã«åã¦ããã©ããã«ã¯ããã¾ãèå³ãããã¾ãããèªåããå¼·ããã¨ã¯ç¢ºå®ã ãã
ãããªãã¨ãããå
æå¿
åãªã®ãå¾æå¿
åãªã®ãã¨ããäºå®ã®æ¹ãé¢ç½ãã§ããããã©ãã¶ã¤ããããã¯ãã§ã«å®å
¨è§£æããã¦ããã®ã§ããããä½æãã¦ã¿ããã¨æã£ãã®ã§ä½ãã¾ããããã£ã¦ã¿ãã¨ãç´ äººã®ç´æã§ã¯ä¸å©ãããªæãã®æãä¸çªçã延ã³ãæã ã£ãããã¦ãæå¤ã«æ¥½ããã£ãã§ãã
ï¼ãã¨ãいらすとやã®äººå·¥ç¥è½ã¤ã©ã¹ãã使ã£ã¦ã¿ããã£ãã¨ããã®ãï¼
å®è£ ã®æ¦è¦
AI ã¨ã¯åã°ããã§ãå¾æç¤é¢ãã¨ã«æãã¹ãæãäºåè¨ç®ãã¦ããã¾ããããªã¼ãã ãã¨ããæãã§ãããåç´ãã㨠2 ååã®ç¤é¢ãè¦ããªãã¨ãããªããåç´ã«ä½ãã¨ãæã®é¸æã®ãã³ã«ãµã¼ãã«åãåããããã¨ã«ãªãã¾ãããããã¯ãªãã¨ãªãå«ã ã£ãï¼ãããã¯ã¼ã¯ããªãã¦ãåãæ¹ããã£ãããæããï¼ã®ã§ãã¡ãã£ã¨å·¥å¤«ãã¦ããã¾ãã
æãã¹ãæã®äºåè¨ç®
ã¾ããåè¿°ã®ç ç©¶å ±åã®è§£æãåç¾ãã¾ãããåæç¤é¢ããå°éå¯è½ãªç¤é¢ãå
¨åæãã¾ãããããããæ«ç«¯å±é¢ããéã«ãã©ã£ã¦ï¼å¾é解æï¼ãåç¤é¢ã®æ·±ãï¼ããããçµå±ã¾ã§ã«ãããæçææ°ï¼ãæ±ãã¾ããã
8 å¹´åã®ç ç©¶å ±åã§ã¯ç¤é¢åæã« 19 åãå¾é解æã« 5.5 æéããã£ãããã§ãããã¡ãã£ã¨ãã工夫*1ã§ããã¼ã PC ã§ããããã 5 åã15 åå¼±ã§ã§ãã¾ãããç¤é¢æ°ãªã©ãè«æã¨ä¸è´ããã®ã§ããã°ã£ã¦ã¯ãªãã¨æãã¾ãã*2
æçåå©æé ãã¼ã¿ãã¼ã¹ã®çæ
åæç¤é¢ããå°éå¯è½ãªå
¨ç¤é¢ã®æ·±ãã決ã¾ãã¾ããããã®æç¹ã§ã¯ãå¾æå¿
åã®ç¤é¢ã ãã§ç´ 2 ååããã¾ã*3ãããããå
¨é¨ãã¼ã¿ãã¼ã¹ã«å
¥ããå¿
è¦ã¯ããã¾ãããã¨ããã®ããå¾æï¼AIï¼ã¯å¸¸ã«æåæï¼æçã§çµå±ã«åããæï¼ãé¸ã¶ã®ã§ãçè«ä¸å°éå¯è½ã§ãå®éã«ã¯å°éããªããªãç¤é¢ãåºã¦ããããã§ãã
ã¨ãããã¨ã§ããå
æã¯ä»»æã®æãé¸ã¶ãå¾æã¯æåæãé¸ã¶ãã¨ããã«ã¼ã«ã§åæç¤é¢ãã辿ããªããã¦ãè¦ããã¹ãç¤é¢ãçµãè¾¼ãã§ããã¾ãã*4
ãã®ã¨ããæåæãè¤æ°ããï¼ã©ã£ã¡ãé¸ãã§ãçµå±ã¾ã§ã®ææ°ãåãï¼å ´åãããã¾ããã©ããé¸ãã§ãããã®ã§ãããè¦ããç¤é¢æ°ã«å½±é¿ãããã¾ããè¦ããç¤é¢æ°ãæå°åããæåæãé¸ã¶ã®ã¯ãåç´ãª 0-1 æ´æ°è¨ç»åé¡ã«ç´ãã¾ã*5ããã㯠NP å°é£ã§ããã人é¡ã®è±ç¥ãçµéããã½ã«ãï¼CPLEX 殿ã¨ã Gurobi 殿ã¨ãï¼ã使ãã°ãããã¨ããè¿ä¼¼è§£ãå¾ããã¾ãã
CPLEX èªä½ã¯æåãªã®ã§ãCPLEX ããªã³ã©ã¤ã³ã§ç¡åã§ä½¿ããã¦ããã NEOS サーバã使ãã¾ããæ稿ç¨ã® LP ファイルãçæãã¾ãããããNEOS ãµã¼ãã¯åé¡ãµã¤ãºã 16 MB ã¾ã§ã¨ããå¶éããã£ãã®ã§ãLP ãã¡ã¤ã«ã´ã«ãããã¾ãã*6ãã®ãªã®ãª 16 MB ãä¸åããã¨ãã§ããã®ã§æ稿ãã¦ã¿ãã¨ãCPLEX ã¯ããã«ã¡ã¢ãªä¸è¶³ã§æ¢ã¾ãã®ã§ä½¿ããªãåã ã£ãã®ã§ãããSCIP ã¨ããã½ã«ããããããã®è¿ä¼¼è§£ãåºãã¦ããã¾ããã
ãããå
ã«ãã¼ã¿ãã¼ã¹ãä½ã£ãããããã 10 ä¸ç¤é¢ç¨åº¦ãè¦ããã°ãããã¨ã«ãªãã¾ããã2 å件ã 10 ä¸ä»¶ã«ã
ãã¼ã¿ãã¼ã¹ã®å§ç¸®
10 ä¸ä»¶ãªããã¤ããªã§ 1 MB ç¨åº¦ãªã®ã§ãã©ã¦ã¶ã§ãæ±ãã¾ãããã ãããã¾ããã£ããããªãæ°ãããã®ã§ãå®å
¨ããã·ã¥é¢æ°ãå®è£
ãã¾ããï¼有名な論文ï¼ãããã§ãã¤ããªã§ 200 KB ç¨åº¦ã
ãã®ããããªãã¡ã¢ãªã«è¼ãã¦ããããã©ãéä¿¡éçã¯ããã¡ãã£ã¨é å¼µãããï¼ãã¨ã§ããã° ajax 使ããããªãï¼ã¨æã£ãã®ã§ãRange coder ã§å§ç¸®ãã¤ã¤ããã¹ãå½¢å¼ã«ãã¾ãã*7ãããã§ãããã¹ã㧠170 KB ç¨åº¦ã«ãªãã¾ããããã¨ã¯ãã®æååã JavaScript ã«åãè¾¼ãã§ãå®è¡æã«è§£åããã ãã
å®è£ ã«ä½¿ã£ãè¨èª
主ã«äºåè¨ç®ã¨ Web ã¯ã©ã¤ã¢ã³ãã®éçºãªã®ã§ãã©ã¡ãã Ruby ã«ã¯åãã¦ãã¾ããããã£ããã®æ©ä¼ãªã®ã§ã使ã£ããã¨ããªãè¨èªã使ã£ã¦ã¿ãããã«ãã¾ããã
Rust
äºåè¨ç®ã¯æããã«å®è¡é度ãéè¦ã ã£ãã®ã§ãRust ã§æ¸ããã¨ã«ãã¾ãããããåã·ã¹ãã ãç
©ãããã¦ãããããªãã®ã§ã一旦 C で書いて動作確認してから Rust に移植しましたãããã¦ãå½ç¶ãªãã C ããé
ãã¨ãã*8ããã¼ããä¸æ¯ã
LP ãã¡ã¤ã«ã´ã«ãã®æ¹ã Rust ã§ããããã£ãã®ã§ãããã©ãã Rust ã§ã°ã©ãæ§é ãæ±ãã®ã¯é¬¼éãªããã§*9ãå¾åã¯ãããã㦠Ruby ã§æ¸ãã¾ããã
Rust ãã©ããªãã§ããããã(1) å®è¡é度éè¦ã(2) ã¡ã¢ãªç®¡çéè¦ã(3) é«åº¦ãªã¢ã«ã´ãªãºã ã¯ééè¦*10ããªã¦ã¼ã¹ã±ã¼ã¹ã«ã¯åãã¦ããã®ããªãã§ããOCaml ã«æ¯ã¹ãã¨ããããã®äººããã§ã«ä½¿ã£ã¦ãããããªã®ã§ãã¿ããªè³¢ããªãããããªããã¨ããå°è±¡ã
TypeScript
ã¯ã©ã¤ã¢ã³ãå´ã®å®è£
ã«ã¯ TypeScript ã使ã£ã¦ã¿ã¾ãããJavaScript ã®ã¹ã¼ãã¼ã»ããã¨ãããã¨ã§ããããã妥åã®ç£ç©ã¨ããæãã§ããåã·ã¹ãã ãé©å½ãªã®ã§ããéã£ããå®å¿ãã¨ãããããã®ãã®ã§ã¯ãªãã§ã*11ãããã§ããJavaScript ãç´æ¥ä½¿ãããã¯ã ãã¶å¹¸ãã§ããã
ãã ãåãã§ãã¯ã«æ°ç§ç¨åº¦ããããã®ã¯ã¤ãããvim ãä¿åæã«æ¯ååºã¾ããUI ã®ããã® JavaScript ã¯ã¡ãã£ã¨ããå¤æ´ãç¹°ãè¿ããã®ãªã®ã§ãå¿èåãå¿
è¦ã§ããã³ã¼ããµã¤ãºã«å¿ãã¦é
ããªã£ã¦ããï¼ãã¾ã¯ 1000 è¡å¼±ï¼ã®ã§ã大è¦æ¨¡ãªãã®ãæ¸ãã®ã¯å³ããããã
ãªããnpm ãä¸å¿ã¨ããã¨ã³ã·ã¹ãã ã¯ç«æ´¾ã ãªãã¨æãã¾ããï¼å°ä¸¦æï¼ãæµè¡ã£ã¦ãããã ã£ãã®ã§ webpack ã使ã£ã¦ã¿ã¾ããããä¸å¹´å¾ã«ã¯ã©ããªã£ã¦ããã®ã§ããããã
ã¾ã¨ã
ã©ãã¶ã¤ãããããå¾æå¿ åã§ãããã¨ãå®æã§ãããã¢ã§ãããå°æ£ AI ã人éã«åã¤ãã©ããã¨ãããä¸ä¿çãªãã¨ããããªã»ããå¾æå¿ åãªã®ãã©ããã®ãããªçè«ä¸ã®ãã¨ã«ã¿ããªèå³ãæã¤ã¨ãããªã¨æãã¾ãã
ä»å¾ã®èª²é¡ã¨ãã¦ã¯ã人éãå¾æãåã£ãã¨ãã§ãæãã¦ãããããã«ããããªã¨æã£ã¦ãã¾ããè¦ããªãã¨ãããªãç¯å²ãä¸æ°ã«åºããã®ã§ããµã¼ãåãåãããå¿ è¦ãªãã§ãããããµã¼ãæã£ã¦ãªãã®ã§ããã«ã¯ã§ããªãã
*1:å¾é解æã§ã¯ãæ·±ã n ã®ç¤é¢ããæ·±ã n+1 ã®ç¤é¢ãç¹å®ãã¦ããã¾ããå ·ä½çã«ã¯ãåç´ã«æ·±ã n ã®ç¤é¢ããç´åã®ç¤é¢ãéè¨ç®ããã¢ããã¼ãã¨ãæ·±ãæªæ±ºå®ã®ç¤é¢ã®ãã¡ã§æ·±ã n ã®ç¤é¢ã«é²ãããã®ãçµãè¾¼ãã¢ããã¼ããããã¾ããæ·±ã n ã®ç¤é¢æ°ã¨ãæ·±ãæªæ±ºå®ã®ç¤é¢æ°ãæ¯ã¹ã¦ãæ©ãããªã¢ããã¼ããé¸æãããã¨ã§ãå¤§å¹ ã«é«éåã§ãã¾ããã
*2:å®ã¯ãã°ã§åç¾ããã®ã«çµæ§æéåã£ããã§ãããããããã®ã£ã¦åãã¦ç 究ãã人ã¯ã©ããã£ã¦è§£æã®æ£ããã«ç¢ºä¿¡ãæã¤ãã ããã
*3:å·¦å³å転ãã¦åä¸ã«ãªãç¤é¢ã¯å«ãã§ãã¾ããã
*4:ãã¨ãæ·±ã 3 以ä¸ã®ç¤é¢ã¯è¦ããªããã¨ã«ãã¾ãããJavaScript ã§ãå®è¡æã«ä¸ç¬ã§æ¢ç´¢ã§ããæ·±ããªã®ã§ã
*5:ããç¤é¢ x ãè¦ãããã©ãããå¤æ° x ã§è¡¨ããã¨ã«ãã¾ãï¼x 㯠0 ã¾ã㯠1ï¼ãå¾æç¤é¢ w ããå æç¤é¢ b1, b2, ..., bn ã«é·ç§»å¯è½ãªã¨ããb1+b2+...+bn >= w ã¨ããå¶ç´ãä¸ãã¾ãï¼w ãè¦ãããªã b1 ãã bn ã®ã©ãããè¦ããªãã¦ã¯ãªããªãï¼ãã¾ããå æç¤é¢ b ããå¾æç¤é¢ w1, w2, ..., wn ã«é·ç§»å¯è½ãªã¨ããw1+w2+...+wn >= n*b ã¨ããå¶ç´ãä¸ãã¾ãï¼b ãè¦ãããªã w1 ãã wn ã®ãã¹ã¦ãè¦ããªãã¦ã¯ãªããªãï¼ããããã®å¶ç´ã®ä¸ã§ããã¹ã¦ã®å¾æç¤é¢ w ã®åè¨ï¼Î£wï¼ãç®çé¢æ°ã¨ãããããæå°åããå¤æ°å²å½ãæ±ãã¾ãã
*6:ãã£ãã®ã¯ã(0) ç°¡åãªå®é¨ã§æããã«æã¿ããªããããªæãã¢ãããã¯ã«åãã(1) è¦ãããã¨ã確å®ãã¦ããç¤é¢ã«é¢ããå¶ç´ãé¤å»ããã(2) ç®çé¢æ°ã«å¯ä¸ããªãå¶ç´ãé¤å»ããã(3) ä¸æ¬éã«ãªã£ã¦ããæé ããã¼ã¸ããã(4) å¤æ°åãã´ã«ãçã«å§ç¸®ãããç°¡åãªã°ã©ãå¦çã¨æååå¦çã§ãã
*7:表示å¯è½æå 95 æåããããã«ã¯ã©ã¼ãã¨ããã¯ã¹ã©ãã·ã¥ãé¤ãã 93 é²æ°ã§åºåããã
*8:主ã«éãã®ã¯ HashSet ã®èªã¿æ¸ãã§ããããããã©ã«ãã SipHash ã ããé ããã¨è¨ãã®ã¯ããè¦ãããã®ã§ãããFnvHash ã«ãã¦ãé ãã£ããHashSet ã®å®è£ èªä½ãé ãããããªãã ãããããã¼ã u64 éå®ã¨ãã¦ãkhash.h ãåèã«åå®è£ ããã C ã® 2 åãããã«ãªãã¾ããããã®å¾ããã¾ãã¾èª¿æ´ããã 1.5 åãããã«ã¯ãªã£ãããã§ãã
*9:unsafe でない双方向リンクリストが話題になるãããã
*10:ã¨ãã£ã¦ãä»ã©ãã°ã©ããæ°è»½ã«æ±ããªãã®ã§ã¯ãOS ããã©ã¦ã¶ã®ãããªã·ã¹ãã ããã°ã©ãã³ã°ã«ãå³ããã®ã§ã¯ãªããããã®ã¸ãã¯ã¨ã¦ãè³¢ã人ãæ¸ããã©ã¤ãã©ãªã使ããã¨ããã®ã§ã©ãã«ããªãï¼
*11:ãã®ç¹ Rust ã¯ãåã·ã¹ãã ãéãã°å®å¿ããã¨æããããåã·ã¹ãã ãéãããã«åç §ãé¿ãã¦é åï¼ã¤ã³ããã¯ã¹çªå·ã«ããã¤ã³ã»ã³ãã£ããåãã®ã§ãindex out of bounds ééçãé«ã¾ãã¨ããããããã¯ãããããåãæªããã¨ãã声ãèããã¦ãããã§ãããã°ã©ãæ§é ã®å®è£ ã§ã¯ãã¢ãªã¼ããã¨ããã£ã¦ã¾ãã«åæ§ã®ææ³ï¼ãã¼ããéããã§ã£ããé åãç¨æãã¦ãåç §ã®ãããã«ã¤ã³ããã¯ã¹çªå·ã使ãï¼ãææ¡ãã¦ãã人ãçµæ§ããããã§ããããã¤ã³ã¿ããªã N88-BASIC ã¿ãããªä¸çã