æ¨æ¥ã®è¨äºã§ã¡ãã£ã¨åºã¦ãããVOCã«ã¤ãã¦ã1å¹´ååã«ãããªè¨äºãæ¸ããã
VOC(Vision Oriented Communication)ãåãã¦ç´¹ä»ããè¨äºã ãããã以æ¥VOCã«ã¤ãã¦ãã¾ã«èãã¦ãã¦ããããããããã説æãæãã¤ãããã¨ã¨ãIoTã¸ã®å¿ç¨ãè¦æ®ããåå®ç¾©ãè¡ãããã®ã§ããã®è¨äºããã£ã¦VOCã®å®ç¾©ãæ¹è¨ããã
ã¡ãã»ã¼ã¸ã¯æ³¢ã§ãããå®å ã¯æããªã
é»è©±ãã¡ã¼ã«ã¨è¨ã£ããã¯ããã¸ã¼ã®å©ãããªãããªããã£ããªä¸çã§ã¯ãçã«1対1ã®ã³ãã¥ãã±ã¼ã·ã§ã³ã¯(æ¥è§¦ä»¥å¤ã«)ããå¾ãªãã
- ç¼ã¯ããã¾ãã«400nm~800nmã®æ³¢é·ã®é»ç£æ³¢ãåä¿¡ãã¦æ¤æ³¢ãããé»ç£æ³¢ã¯æ³¢ã§ãããããç¨åº¦ã®æåæ§ããæããããã¦ãç¹å®ã®å®å ãæã¤ãã®ã§ã¯ãªãã
- è³ãé³æ³¢ã«ã¤ãã¦åæ§ã§ããã
- å£ã¯AM+FMå¤èª¿ããé³æ³¢ãéä¿¡ããã
- 身æ¯ãã¯å¯è¦å ç·ãåå°ãããã¿ã¼ã³ãå¤ãããã¨ã§ãæ å ±ãå ã«ã¨ã³ã³ã¼ãããã
åã«ãè¨ã£ãå©ãã ã¨ãä¿¡å·ãè»ã®brakeã¡ã½ãããå¼ã¶ãããããªãã¦ããã©ã¤ãã¼ãä¿¡å·ãè¦ã¦ãã¬ã¼ããè¸ããå¦ãå¤æããã
å®å ãæã£ãã¡ãã»ã¼ã¸ãé»è©±ãªããå®å ãæããªãã¡ãã»ã¼ã¸ã¯ã¢ããã¥ã¢ç¡ç·ã ã
空éã¯å ´ã
æ³¢ã¯å ´ãä¼ãããå ´ã¯å ¨ã¦ã®å°ç¹ã«ãªãããã®å¤ãå²ãæ¯ãããã°ãªããã¨èãããå ´ã¯ãé³å ´ãé»ç£å ´çèªç¶ç±æ¥ã®å ´ã使ã£ã¦ãããããã·ãã¥ã¬ã¼ã·ã§ã³ã§ããããä¾ãã°æååãå¤ã¨ãªãå ´ããã£ãã£ã¦è¯ãããé³å ´ã«æ¹åã追å ãã¦ãã¯ãã«ã«ããã£ã¦ãããå ´ãã³ãã¥ãã±ã¼ã·ã§ã³ã®åªä½ã¨ãã¦ä½¿ããã·ãã¥ã¬ã¼ãããæ¹æ³ã¯åããªãã
åä¿¡ -> è¨ç® -> ããã¼ããã£ã¹ã -> å帰
1å¹´ååã®è¨äºã§ã¯VOCã®ã³ã³ã»ããã¨ããã®å®è£ ã®ä¸ä¾ãä¸ã¤ã®è¨äºã«ã¾ã¨ãã¦ãã¾ã£ã¦ãããããã§ã¯æ¹ãã¦ã³ã³ã»ããã ãã説æããã
AI
VOCãå®è£ ããã¢ãã¯ãREPLã®äºç¨®REBLãå®è£ ãããREPLã¯Read Eval Print Loopã§ãé常Rã¯æ¨æºå ¥åãPã¯æ¨æºåºåãæ¨æºã¨ã©ã¼ã¨ãéå®ãããã¹ããªã¼ã ã«å¯¾ããèªã¿æ¸ããæãããVOCã§ã¯Readã¨Printãæ¡å¼µããå¤å¯¾å¤ã®ã³ãã¥ãã±ã¼ã·ã§ã³ã®ãããããããReceiveã¨Broadcastã¨ããã
Receive Eval Broadcast Loopã§REBLã ã
Receive (åä¿¡)
èªåãæã¤ããããã»ã³ãµã¼ããããã«ã¤ãã¦å¤ã解æããã
ã·ãã¥ã¬ã¼ã·ã§ã³ã®å ´åã¯èªåã®å¨ãã®å ´ã®å¤ãèªãã
Eval (è©ä¾¡)
åä¿¡ããæ å ±ã¨ãèªåã®ç¶æ ãããèªåã®æ¬¡ã®ç¶æ ãè¨ç®ããã
Broadcast (ããã¼ããã£ã¹ã)
Evalãããèªåã®æ¬¡ã®ç¶æ ã«å¿ãã¦ãå½±é¿ãä¸ããå ´ãæ¯åãããããå ´ãæ¯åããããã£ã¦ãã£ã¦ãããã»ã©é£ããèããªããã¨ãããããã«è¿ãã®èª°ã«ã§ãåãåããã¡ãã»ã¼ã¸ãéãåºãã£ã¦ãã¨ã ãæ¬æã«å®åã¯å ¥ã£ã¦ãããããä»ã®ã¢ããè¦ãã®ã妨ãããã¨ã¯ãªãã
Loop (å帰)
ã¾ãåä¿¡å¾ æ©ã«æ»ãã
ã¢ã¯ã¿ã¼ã¨ã®éã
VOCã¯å®éErlangã®ã¢ã¯ã¿ã¼ã«ããä¼¼ã¦ãããéãã¯ã¡ã¼ã«ããã¯ã¹ã®ä»£ããã«å ´ãèªã¿ãã¡ãã»ã¼ã¸ãç¹å®ã®ããã»ã¹ã«éã代ããã«ç¹å®ã®å ´ãæ¯åãããã¨ãã2ç¹ã ã
å ´ã®ã·ãã¥ã¬ã¼ã·ã§ã³ã«ã¤ãã¦
å®éã®ã¨ãããå ´ã®ã·ãã¥ã¬ã¼ã·ã§ã³ã¯æç´ã«ããã¨ç¡é§ãå¤ãã¨æãã®ã§ãå®è£ æ¹æ³ã¯å¦çç³»ã«ä¸ä»»ãããã¢ããããå ´æã®å¤ã ãè¨ç®ããã°ãããæé(å é度ãé³é)ã«ã¤ãã¦ãã·ãã¥ã¬ã¼ãããã®ãçæ³ã ããªãã¦å°ããªããªããããªãã
Pseudo Code
æ¹è¨çVOCã®å®è£ ã¯ã¾ã ãªãã®ã§ããã¤ã¼ããªçä¼¼ã³ã¼ãã
100âã®å¤ªé½ã¨ç«2å¹ã®ä¸ç
;;æ°æ¸©ãã¡ããã©è¯ãã¨ãã£ã¼ã¨é³´ã(é³å ´ãæºãã)ç« (defn cat-with-no-mass [fields cat] (let [temp (read-field :temperature (:address @cat) fields)] (vibrate-field fields :sound (:address @cat) inverse-square (cond (> temp 30) "too hot meow!" (< temp 15) "too cold meow!" :else "warm and nice meow"))) ;;æ¸©åº¦å ´ãç §ããå¤ªé½ (defn sun [fields sun] (vibrate-field fields :temperature (:address @sun) inverse-square (:intensity @sun))) ;;æ¸è¡°æ²ç·ã使ã£ã¦å ´ãè¨ç®ãã (defn vibrate-field [fields layer address decay val] ;; ...omitted... fields) ;;ã¡ã¤ã³ã«ã¼ã -- ã¨ããããç¸å¯¾è«ã¯ç¡è¦ãã¦çµ¶å¯¾æé (defn run-space [things] (loop [fields] (recur (merge-fields (pmap #((:ai %) fields (:property %)) things)))) ;;åæè¨å® (run-space #{{:ai cat-with-no-mass :property (atom {:address [0 0 0]}) {:ai cat-with-no-mass :property (atom {:address [100 100 100]}) {:ai sun :property (atom {:address [10 10 10] :intensity 100})}}} #{:temperature [[[...]]] :sound [[[...]]]})
ã·ãã¥ã¬ã¼ã·ã§ã³ã¨ãIoTããã¤ã¹ã®ãããã¯ã¼ã¯ä¸¡æ¹ã«åãã³ã¼ãã使ããã¨ã¢ããã
æ¬å½ã¯ã¢ãã¬ã¹ã¨ãã°ãã¼ãã«ãªå ´ããªãããããå ´ã®ãã±ããªã¬ã¼(ç¸äºä½ç¨ãããã¼ã«ã«ãªå ´)ã¨ããããã¤ãæ¡ã¯ããã
ã¨ãããã以ä¸ã§ãã