絶対ã«åã¦ãªã6x6ãªãã¼ã·ãä½ãã¾ãããããªãã¯é»çªãAIãç½çªã§ãã
絶対ã«åã¦ãªã6x6ãªãã¼ã·ãä½ãã¾ããï¼ ãã²ææ¦ãã¦ã¿ã¦ãã ããhttps://t.co/Ul5n3q9jMp
— Yusuke Endoh (@mametter) December 30, 2021
ããã¯ä½ï¼
6x6ã®ç¤é¢ã®ãªãã¼ã·ã¯å¾æå¿ å *1 ã§ãããã¨ãç¥ããã¦ãã¾ãã ãã®AIã¯ç½çªï¼å¾æï¼ã§å®ç§ã«ãã¬ã¤ãã¾ããã¤ã¾ãé»çªã®ããªãã¯çµ¶å¯¾ã«åã¦ã¾ãããç¡åæã楽ããã§ãã ããã
æè¡çãªè©±
ãã®AIã¯WebAssemblyã«ãªã£ã¦ããã®ã§ãå ¨é¨ããªãã®ãã©ã¦ã¶ã®ä¸ã§åãã¦ã¾ããçã®ãµã¼ãã¼ã¬ã¹ã§ãã
AIã®ã½ã¼ã¹ã³ã¼ãã¯Rustã§æ¸ãã¾ãããããã¨å å®ãªã²ã¼ã æ¨æ¢ç´¢ã«ãªã£ã¦ã¾ããUIã¯æ®éã«TypeScriptã¨three.jsã§å®è£ ãã¾ããã
ä½ã£ãé ã«èª¬æãã¾ãã
ç¤é¢ã®è¡¨ç¾
ãªã«ã¯ã¨ããããç¤é¢ã表ããã¼ã¿æ§é ãä½ãã¾ããï¼src/bitboard.rsï¼ã
ãã¡ã¤ã«åã®éããããããã¼ãã§ãã
Rustã®u64
ï¼64ãããæ´æ°ï¼ã2ã¤ä½¿ã£ã¦1ã¤ã®ç¤é¢ã表ç¾ãã¾ãï¼1ã¤ãé»ç³ã®ä½ç½®ããã1ã¤ãç½ç³ã®ä½ç½®ï¼ã
çæå¯è½æ°ã®ã«ã¦ã³ããªã©ãã¹ã¦ããããæ¼ç®ãé§ä½¿ãã¦ããã¾ãã ç³ãã²ã£ããè¿ãå¦çã¯æ¢ç´¢æ§è½ã«ç´çµããã®ã§ããã°ã£ã¦ã¾ãã 36ãã¹ãã¹ã¦ã«ç¹åããã³ã¼ãããã¯ãã§çæãã¦ã¾ãï¼src/bitboard/flip.rsï¼ã ãã ããæçµçã«WASMã«ããã®ã§ãã¢ã»ã³ããªãæ¸ããããªãã¨ã¯ãã¦ã¾ããã
ã¡ãªã¿ã«ããããã¼ããé¸ãã çç±ã¯ãããããªãã¨Rustã®æææ¨©ãåç¨ããããé¢åããããã ã£ãããã§ãã
ããããã¼ããªãu64
ã2ã¤ã ããªã®ã§ãéã«Copyãã¬ã¤ããå®è£
ãã¦ã大ä¸å¤«ã
çµç¤ã®ã¢ã«ã´ãªãºã
æåã«æ¸ããæ¢ç´¢ã¢ã«ã´ãªãºã ã¯ãåç´ãªãã¬ããã¯ã¹æ³ã§ãã ããã¯ã²ã¼ã çµç¤ï¼ç©ºããã¹ã11å以ä¸ï¼ã®æ¢ç´¢ã«ä½¿ã£ã¦ãã¾ãã
çµç¤ã®æ¢ç´¢ã¯ãåã£ãã¢ã«ã´ãªãºã ããã宿°ãªã¼ãã®æé©åãããå¹ãã¨ããã§ãã ãã¨ãã°ã空ããã¹ãæ¢ãããã«å ¨ãã¹ããã§ãã¯ããã¨é ãã§ãï¼çµç¤ã®å ´åãå¤ãã®ãã¹ã¯ãã§ã«ç³ãããã®ã§ç¡é§ï¼ã ããã§ãçµç¤ã®æ¢ç´¢ã«å ¥ãåã«ãã¹ã¦ã®ç©ºããã¹ã®ä½ç½®ãåæãã¦é£çµãªã¹ãã§ã¤ãªããå帰ã®ãã³ã«ãã®ãªã¹ãããªããããã«ãã¦ãã¾ãã
æ®å¿µãªãããRustã¯ãªã¹ãæ§é ã®æ±ããæ¥µãã¦ä¸å¾æãªè¨èªã§ã *2 ã
Rustã§ãªã¹ããä½ãã«ã¯ï¼åãã§ãã¯ãéãããã«ï¼ãªãã¡ã¬ã³ã¹ã«ã¦ã³ãã®ã»ã«ã使ãã®ãå®çªã®ããã§ãããä»åã¯ããã©ã¼ãã³ã¹ãéè¦ãªã®ã§unsafe
ã使ãã¾ããã
ããããã¨ãã¯unsafe
ã§è¯ãã¨ããç¥è¦ãããã£ã¦ããã®ã§ã
Programming Rust 以ä¸ã®è¨è¿°ãè¯ãã£ãããã³ã³ããã¯unsafeç¡ãã«å¹ççã«ã¯æ¸ããªãã®ã§unsafeã§è¯ãã ã¾ãããã®ä»¥ä¸ã®è¨è¿°ã¸ã®åçã«ãªã£ã¦ããã https://t.co/r5iunzkpWH pic.twitter.com/e2bk3R5IFE
— Yu SUGAWARA (@gusmachine) May 10, 2017
ä¸ç¤ã®ã¢ã«ã´ãªãºã
次ã«ãåç´ãªãã¬ããã¯ã¹æ³ã§æ·±ãèªããã¨ã¯ã§ããªãã®ã§ã空ããã¹ã12å以ä¸ããã¨ãã®ããã®ããå°ãè³¢ãã¢ã«ã´ãªãºã ãå®è£ ãã¾ããã ç½®æè¡¨ä»ãMTD(f)ï¼è©ä¾¡é¢æ°ã«ããã ã¼ããªã¼ããªã³ã°ã¨ãããã¨ã¦ãæãªããã®æ¹æ³ã§ãï¼src/search/midgame.rsï¼ã
è©ä¾¡é¢æ°ã¯ãæåã§ä½ã£ãç¹å¾´éï¼ããããedge2xã®ãã¿ã¼ã³ã¨ãçæå¯è½æ°ï¼ãå ¥åã¨ããåã¡ãããè² ãããããäºæ¸¬ãã¾ãã ããã®å¦ç¿ã®ããã«ãä¸ç¤ã®ç¤é¢ãæ°åä¸ã»ã©ã©ã³ãã çæããããããã«å¯¾ãã¦çµç¤æ¢ç´¢ã®ã¢ã«ã´ãªãºã ã使ã£ã¦å®éã®åæãå¤å®ãã¾ããã ããã¦å®éã®åæãæå¸«ãã¼ã¿ã¨ãã¦ç¼ããªã¾ãæ³ã¨ææ¥é䏿³ãé©å½ã«ä½¿ã£ã¦éã¿ã決ãã¾ããï¼src/learn.rsï¼ã å¦ç¿ããéã¿ã¯æµ®åå°æ°ç¹æ°ã3000åã¡ãã£ã¨ãªã®ã§ãRustã®é åã¨ãã¦ã³ã¼ãã«ç´æ¥åãè¾¼ãã§ããã¾ãï¼data/weight.rsï¼ã
ãã¨ãããããã¼ãã®edge2xãã¿ã¼ã³ããé«éã«ä¿æ°ãç®åºããããã«ãå®å ¨ããã·ã¥ãç¨æãã¾ããã
è£è¶³ ãã®ãã¥ã¼ãªã¹ãã£ãã¯ãªè©ä¾¡é¢æ°ã¯ããã¾ã§ã ã¼ããªã¼ããªã³ã°ï¼è¯ããããªæããå ã«èª¿ã¹ããã¨ã§æåããå¢ãããã¯ããã¯ï¼ã®ããã«ä½¿ã£ã¦ããã ãã§ããã¡ã¤ã³ã®æ¢ç´¢ã§ã¯ã空ããã¹ã11åã®ã¨ããã¾ã§èªãã ãçµç¤æ¢ç´¢ã¢ã«ã´ãªãºã èªä½ãè©ä¾¡é¢æ°ã¨ãã¦ä½¿ãã¾ãããªã®ã§ãå ¨ä½ã¨ãã¦ã¯è¿ä¼¼è§£æ³ã§ã¯ãªãå®å ¨æ¢ç´¢ã«ãªãã¾ãã
åºç¤ã®ã¢ã«ã´ãªãºã
6x6ã®ãªãã¼ã·ã¯1993å¹´ã«å¾æå¿ åã§ãããã¨ã示ãããããã§ãã 彿ã®ã¯ã¼ã¯ã¹ãã¼ã·ã§ã³ã§æ°é±éãããããã¦æ¢ç´¢ãããããã§ããããããªè¨ç®ãç¾ä»£ã§ã¯ä¸ç¬â¦â¦ãã¨æã£ãã®ã§ãããããã¾ã§ã§ä½ã£ãã¢ã«ã´ãªãºã ã§åæç¤é¢ããã®æ¢ç´¢ãããã¨ã1åå¼·ãããã¾ããããã£ã¼ãã©ã¼ãã³ã°ã§è©ä¾¡é¢æ°ä½ã£ã¦ã ã¼ããªã¼ããªã³ã°ããã¨ãã£ã¨éããªãã®ããªãï¼
ããã§ãªã¢ã«ã¿ã¤ã ã«æ¢ç´¢ããã®ã¯å³ããã®ã§ãåºç¤ã®16æããããããè¨ç®ãã¦ãã¾ããã¨ã«ãã¾ããã é»ãä»»æã®æãé¸ã¶ã®ã«å¯¾ããç½ã®æã¯1ã¤ã ãè¦ããã°ããã®ã§ãæ·±ã8ã®ããªã¼ãä½ãã¾ãã ç½ã¯æåæï¼æã大ããç³å·®ã§åã¤æï¼ã®ãã¡ãé»ã®çæå¯è½æ°ãå°ãããªãæãé¸ã¶ããã«ãããã¨ã§ããªãã¹ãè¦ããæ°ãæ¸ããã¾ããã çµæçã«ãããã10ä¸ç¤é¢ç¨åº¦ãè¦ãããã¨ã«ãªãã¾ããã
ããªã¼é¨åã¯ç°¡æ½ãã¼ã¿æ§é ã使ã£ãLOUDSã¨ãã表ç¾ã§ã¨ã³ã³ã¼ãããããã700ãããã¤ãã¨ãªã£ã¦ãã¾ã *3 ã
ãããªã«å¤§ãããªãã®ã§ãinclude_bytes!
ãã¯ãã§ãã¤ããªãã¼ã¿ãç´æ¥å®è¡ãã¡ã¤ã«ã«åãè¾¼ã¿ã¾ããã
ããã§AIã¯å®æã§ãã
ãã©ã¦ã¶ã§åãã
ããã¾ã§ã¯ãLinuxã§ã®ãã¤ãã£ãå®è¡ãã¡ã¤ã«ã¨ãã¦ä½ã£ã¦ã¾ããã ä»åã¯æ¢ç´¢ããã©ã¦ã¶ã§åããç®æ¨ã ã£ãã®ã§ãwasm-bindgenã§ãã©ã¦ã¶åãã®APIãç¨æãï¼src/api.rsï¼ãwasm-packã§WebAssemblyï¼ä»¥ä¸wasmï¼ã«ãã¾ããã emscriptenã«æ¯ã¹ãã¨ã³ã£ããããã»ã©ç°¡åã«wasmãã§ããã®ã§ã³ã£ãããã¾ããã
ãã ãåããã¦è¦ãã¨panicã§è½ã¡ã¾ããã
ããã£ã±ãwasmçæã¯å®æåº¦ãããªã«é«ããªãã®ããªã¼ããªã©ã¨ä»äººã®ããã«ãã¤ã¤ãä½ãèµ·ãã¦ããã調ã¹ã¦ã¿ãã¨ãusize
ã§ãªã¼ãã¼ããã¼ãçºçãã¦ã¾ããã
試ãã¦ããã¤ãã£ããã«ãã¯64ããããªã®ã§ãªã¼ãã¼ããã¼ããªãã®ã§ãããwasmã¯32ããããªã®ã§ãªã¼ãã¼ããã¼ãèµ·ããã
è¦ããã«å®å
¨ã«èªåã®ããã§ãããå®æåº¦é«ããªãã
ç´ãããç¡äºã«wasmãWeb workerããåãã¾ããã ãªããpanicã¯èª¿ã¹å§ãã¦ããæ°ååã§ç´ããã®ã«å¯¾ããwasm+Web workerã®webpackã®è¨å®ã«æ°æéã»ã©æ¶è²»ãã¾ãããwebpack許ããªãã
UIé¨å
ããã¾ã§Rustã§éçºãã¦ããã®ã§ãUIãyewã§ï¼ ãªã©ã¨èããªãããªãã£ãã®ã§ããããã®æç¹ã§Rustã¸ã®ãã¤ããæºã¾ãããã¦ããã®ã§TypeScriptã§æ¸ãã¾ããã ããã¼ãã¡ãã£ã¨mapãããã ããªã®ã«iterã ã®collectã ã®æ¸ããªãã¨ãããªãã¨ããéãªã³ã¼ãæ¸ãã¨unwrapã ããã«ãªããâ¦â¦ã
é話ä¼é¡ã
ãã£ãããUIãä½ããããªã£ãã®ã§ãthree.jsã使ããã¨ã«ãã¾ããã æåã¯Reactã§å®è£ ãããã¨ãã¾ããããthree.jsãç¶æ ã®ããã¾ãã§ç¸æ§ææªã ã£ã *4 ã®ã§ãç´ ã§æ¸ãã¾ããã
éæ
å®å ¨è§£æããã¦ããã²ã¼ã ã¯ãã©ããã£ã¦ãåã¦ãªãã¨ãããå®éã«ä½é¨ãããã§ãããã 6x6ãªãã¼ã·ã®ãã¼ãã§ã¯ããã¬ã¤ã®æ£èã¯çºè¦è ã®Joel Feinsteinãæ¸ãããã¥ã¼ã¹ã¬ã¿ã¼ãå§ããããããªã¨ããã§è¦ããã¾ãããã¤ã³ã¿ã©ã¯ãã£ãã«ã§ãããã®ã¯è¦ã¤ãããªãã£ãã®ã§ä½ãã¾ããã
ãã¨ãwasmã§éãã§ã¿ããã£ãã®ãåæ©ã§ãã 6x6ãªãã¼ã·ã¯å ¨ç¤é¢ããã¼ã¿ãã¼ã¹ã«ããã®ã¯æããã«ç¡çãªã®ã§ããã©ã¦ã¶ã§ç¾å®çã«åãããé度ã¨ãã¤ããªãµã¤ãºãå®ç¾ããã«ã¯wasmãããããªã¨ã ã¯ããWebã¢ããªã®ããã³ãã¨ã³ããå ¨é¨wasmã§åãä¸çã«ãªãã¨ãããªãã
ã¾ã¨ã
6x6ã®ãªãã¼ã·ã¯ãã£ã±ãåã¦ã¾ããã§ããã
*1:å¾æãæ£ããæãé¸ã³ç¶ããããå æã絶対ã«åã¦ãªããã¨ã
*2:Rustã¨ãªã¹ãã§æ¤ç´¢ããã¨ããªã¹ãæ§é ã¯å®ç¨ããã°ã©ã ã§ã¯ã»ã¨ãã©ç»å ´ããªããããããã ãã¿ãããªä¸»å¼µã夿°è¦ããã¾ãããã£ã±ãã¶ã©ãï¼
*3:æ£ç¢ºã«è¨ãã¨ãããªã¼æ§é ã®ãã¼ã¿ã¯80ãããã¤ãç¨åº¦ã§ã大åã¯é»ã®æã®ä¾¡å¤ï¼æçµçãªç³å·®ï¼ã¨ç½ãæã¤ã¹ãä½ç½®ã®ãã¼ã¿ã§ãã
*4:æåã¯@react-three/fiberã試ãã¾ããããã¾ã¨ãã«ããã©ã¼ãã³ã¹ãåºãããã«ã¯ã¢ãã¡ã¼ã·ã§ã³ç¶æ ãªã©ãReactããå¥ç®¡çãããããªãããã§ãReactã使ãæå³ãèããã ã£ãã