ã»ã«ãªã¼ãããã³
ãã®å®å®ãã天å½ã«ãããã®ãããããã«ã¼ã®ã³ã³ãã¥ã¼ã¿ã§åãã¦ããã»ã«ãªã¼ãããã³ã§ã§ãã¦ããªãã¨ãã証æ ã¯ãªã
ã¨ããç 究è
ä»åãããã°ããã»ã«ãªã¼ãããã³ã®ä¸æè°ãªä¸çããµãã¤ãã¦ã¿ããã¨æã£ã¦ã¾ããã»ã«ãªã¼ãããã³ã¯ããã®ååã®ã¨ããã»ã«ï¼æ ¼åï¼ããæ§æããããªã¼ãããã³ï¼èªåæ©æ¢°ï¼ã§ãã確çã¨ã¯ç¡ç¸ã®æ±ºå®è«çä¸çã§ãã¹ã¦ã¯ã«ã¼ã«ã«å³å¯ã«ãããã£ã¦åä½ãã¾ã*1ããã以ä¸ã説æãé£ããã®ã§å®ä¾ããåã«ãJavaï¼2004/12/25ï¼ãPythonï¼2008/9/14ï¼ã§ä½ã£ããã¨ãããã©ã¤ãã²ã¼ã ã¯ãäºæ¬¡å ã»ã«ãªã¼ãããã³ã®ä¸ç¨®ã§ãã
ã©ã¤ãã²ã¼ã ã®åã»ã«ã¯ãçã¨æ»ï¼ONãOFFã§ãããã§ããã©ï¼ã®2ã¤ã®ç¶æ ãåãããã£ã3ã¤ã®ã«ã¼ã«ã«ãããã£ã¦åä½ãã¾ãã
- çãã¦ããã»ã«ã®å¨å²ã«2ã¤ã¾ãã¯3ã¤ã®çãã¦ããã»ã«ãããã°ãã®ã»ã«ã¯æ¬¡ã®ä¸ä»£ãçãã¦ãã
- æ»ãã§ããã»ã«ã®å¨å²ã«3ã¤ã®çãã¦ããã»ã«ãããã°ãã®ã»ã«ã¯æ¬¡ã®ä¸ä»£ã§çãè¿ã
- ãã以å¤ã®å ´åã«ã¯æ¬¡ã®ä¸ä»£ã§æ»ã¬
ãã£ãããã ãã®ã«ã¼ã«ã§ãããã®æ¯ãèãã¯ãã®ãããè¤éã§é常ã«é©ãããã¾ãããã®æ ¼åã®ä¸çã«çå½ã®ç§å¯ãæ½ãã§ããã¨ä¿¡ãã¦ãã人ããã¾ããç¥ããªã人ã¯ãã²åããã¦ã¿ã¦ããåèæç®ã®åç»ãããããï¼
ã©ã¤ãã²ã¼ã ã®ç¶æ ã¨ã«ã¼ã«ã¯ãã®ãããåç´ã§ããããã®æ¯ãèãã¯é常ã«è¤éãªã®ã§åæããããé£ããããããªããã§スティーブン・ウルフラムï¼Stephen Wolframï¼ã¨ãã人*2ãããã«åç´ãªä¸æ¬¡å ã»ã«ãªã¼ãããã³ã¨ããã®ãèæ¡ãã詳ããåæãã¾ãããä»åã¯ããã®ä¸æ¬¡å ã»ã«ãªã¼ãããã³ã試ãã¦ã¿ããã¨æãã¾ãã
ä¸æ¬¡å ã»ã«ãªã¼ãããã³
ä»å試ãã®ã¯ãäºç¶æ ã»ä¸è¿åã»ä¸æ¬¡å ã»ã«ãªã¼ãããã³ã¨ãããã£ã¨ãç°¡åãªãã®ã§ããååã®ã¨ããã横ä¸åã«ã»ã«ã並ã¶ä¸çã§åã»ã«ã¯çã¨æ»ã®äºç¶æ ãåãã¾ããã«ã¼ã«ãã©ã¤ãã²ã¼ã ãããã£ã¨ç°¡åã§èªåã¨å·¦å³ã®ä¸ã¤ã®ã»ã«ã®çµã¿åãããã次ã®ä¸ä»£ã®ç¶æ ã決ã¾ãã¾ãã
ä¸ã¤ã®ã»ã«ã®çµã¿åããã¯ãä¸ã®å³ã®P0ããP8ã®8ãã¿ã¼ã³ï¼2^3ï¼ããããã¾ãããä¸æ¹ã§ã次ã®ä¸ä»£ã®ç¶æ ã¯ãã£ã¨ãã¿ã¼ã³ãå¤ããªãã¾ãããã¨ãã°ãä¸ã®ä¾ã§ã¯ãP1ãP2ãP3ãP4ã®ã¨ã次ã®ä¸ä»£ããçãã«ããP0ãP5ãP6ãP7ã®ã¨ã次ã®ä¸ä»£ããæ»ãã¨ããã«ã¼ã«ã«ãªãã¾ãããã®ã«ã¼ã«ã¯ããçãã1ããæ»ãã0ã§ããããã¨00011110ã«ãªãã®ã§Rule30ã¨å¼ã°ãã¦ãã¾ãããã®ãããªã«ã¼ã«ã¯ã8ãããã§ãããããæ°ã ãããã®ã§å ¨é¨ã§256種é¡ãRule0ããRule255ã¾ã§ããã¾ãã
ã§ãããããé¢ç½ãã¨ãããã©ã¤ãã²ã¼ã ã®å ´åã¯ãä¸ä»£çµéãè¦ãã«ã¯ãã¢ãã¡ã¼ã·ã§ã³ã®ããã«åããããããã¾ããã§ãããã§ãããä¸æ¬¡å ãªã¼ãããã³ã®å ´åã¯ãåãªãç·ãªã®ã§æ¬¡ä¸ä»£ãä¸æ¹åã«ä¸¦ã¹ã¦ããã°æéçµéãä¸æã®ç»åã¨ãã¦è¦ããã¾ããå®éã«ã第ä¸ä¸ä»£ãçãä¸ã®ä¸ç¹ã®ã¿ãçãã§æ®ãããæ»ãã«ããç¶æ ããä¸ã®Rule30ãç¹°ãè¿ãé©ç¨ãã¦æ¬¡ä¸ä»£ãä¸æ¹åã«éãã¦ããã¨ä¸ã®ãããªç»åãã§ãã¾ãã
ä¸è¦ãã©ã³ãã ãªãã¤ãºã«è¦ãããã©ã¨ããã©ããããããªä¸è§å½¢ãè¦ãã¦ã«ãªã¹ã£ã½ãã§ãã次ã¯ãRule90ï¼01011010ï¼ã試ãã¨ãããªãã¾ãã
ãããããããã¯æåãªãã©ã¯ã¿ã«ãシェルピンスキーのギャスケットã§ã¯ãªããï¼æ¬æ¥ã¯ã¾ã£ããéãä½ãæ¹ãªã®ã ãã©ä¸æ¬¡å ã»ã«ãªã¼ãããã³ã®ã«ã¼ã«ã§ãä½ããã®ãã»ã»ã»ããã¯ãããã次ã¯ãRule161ã試ãã¾ãã
åã«ç½é»å転ããã£ã½ããã©ãããç·ã太ãããªï¼ã«ã¼ã«ãå°ãå¤ããã ãã§äºæ³å¤ã®ç»åãåºã¦ãã¦é¢ç½ãã
ãã®ãããªå³ãæãPythonã¹ã¯ãªããã¯ä¸ã®ããã«ãªãã¾ããPythonã®ç»åå¦çã©ã¤ãã©ãªã®PILã使ã£ã¦ãã¾ãã
#coding:utf-8 import Image, ImageDraw, ImageFont OFF, ON = 0, 1 def dec2bin(n): """10é²æ°ã2é²æ°ã®01ãªã¹ãã«å¤æ ä¸ä½ãããããé çªã«ä¸¦ã¹ã""" bit_list = [] for i in range(8): bit_list.append(n % 2) n /= 2 return bit_list def ca(width, height, rulenum): """1次å ã»ã«ãªã¼ãããã³ã®å³ãæç»""" results = [] # åæç¶æ ï¼ä¸å¤®ã®ã»ã«ã ãONï¼ first_row = [0] * width first_row[width / 2] = ON results.append(first_row) # ã«ã¼ã«ã®çªå·ãã次ã®ç¶æ ã®ãããåãå¾ã rule = dec2bin(rulenum) for i in range(height - 1): old_row = results[-1] new_row = [] for j in range(width): # widthã®å°ä½ãåãã®ã¯ã端å士ãã¤ãªãã£ã¦ãããã n = 4 * old_row[(j-1)%width] + 2 * old_row[j] + old_row[(j+1)%width] new_row.append(rule[n]) results.append(new_row) return results def render(results, width, height, filename="ca.png"): """ã»ã«ãªã¼ãããã³ãæç»""" img = Image.new("RGB", (width, height), (255,255,255)) draw = ImageDraw.Draw(img) for y in range(height): for x in range(width): if results[y][x] == ON: draw.point((x, y), (0, 0, 0)) img.save(filename, "PNG") if __name__ == "__main__": width, height = 300, 150 rulenum = 30 results = ca(width, height, rulenum) render(results, width, height)
å ¨256ã«ã¼ã«ããã¹ã¦æç»ãã¦ã¿ã
ä¸ã®ã¹ã¯ãªããã§1ã¤ãã¤ã«ã¼ã«ãå¤ãã¦ç»åãçæãã¦ãããã®ã ããã©ãããé¢åãªã®ã§èªååãã¦å ¨é¨æãã¦ã¿ã¾ãããå·¦ä¸ã®èµ¤ãæ°åãRuleåã§ãã
ãã¼ãããããããªãã¿ã¼ã³ãããã®ããããã¾ãããããæ»æ» ãã¦çã£ç½ã«ãªã£ãããç¹æ®ãããã¦çã£é»ã«ãªãã«ã¼ã«ãããã¾ãã縦ãæãã«ä¸ç´ç·ãããã¾ãããçæ»ãå転ãããã¾ããä¾ã®ã«ãªã¹ã£ã½ã模æ§ãããããªã·ã§ã«ãã³ã¹ãã¼ã®ã®ã£ã¹ã±ãããã½ã¤ã½ã¤è¦ãã¾ããåºç¾ã«ä½ãè¦åæ§ã¯ããã®ããªï¼ã«ã¼ã«ããããåã§èããã¨ä½ãè¦ãã¦ããã®ããã
ä»åã¯åæå¤ãçãä¸1ç¹ã ãé»ã«ãã¾ãããã©ã³ãã ã«ããã¨ãã£ã¨ããããªãã¿ã¼ã³ãåºã¦ãã¾ãããã®ä¸ã§ç©è°ããããã¦ããã«ã¼ã«ã110çªã§ãããããããã¾ããããä¸è½ãã¥ã¼ãªã³ã°ãã·ã³ã§ãããã¨ã証æããã¦ãã¾ãï¼ã¬ã¤ããã¢ã¼è¤éç³»ã®ä¸ç p.258ï¼ã
ä»åã¯ã2ç¶æ ã»3è¿åã¨ãããã£ã¨ãåç´ãªã»ã«ãªã¼ãããã³ã§ããããããå°ãæ¡å¼µãã¦ããããã¨æãã¾ãã次åã¯ãã¶ããã©ã³ã°ãã³ã®Î»ãã©ã¡ã¼ã¿ã¨ã«ãªã¹ã®ç¸ã®å®é¨ã§ãã
åè
- ライフゲームの世界 - ã©ã¤ãã²ã¼ã ã解説ããé³¥èãã®ã®åç»ã§ãï¼ãã®ä¸çã¯ç¥æ§ã®ã©ã¤ãã²ã¼ã ã ã£ãã®ãã»ã»ã»ã¨æã£ã¡ããããï¼ç¬ï¼
- åèæç®ãå å®ãã¦ãã¦ã¨ã£ãããã«ããï¼
è¤éç³»å ¥éâç¥ã®ããã³ãã£ã¢ã¸ã®åéº
- ä½è : äºåºå´,ç¦å義ä¹
- åºç社/ã¡ã¼ã«ã¼: NTTåºç
- çºå£²æ¥: 1998/06
- ã¡ãã£ã¢: åè¡æ¬
- è³¼å ¥: 4人 ã¯ãªãã¯: 60å
- ãã®ååãå«ãããã° (26件) ãè¦ã
- æåãªä¸è¬æ¸ã2ç« ãã»ã«ãªã¼ãããã³ã§ããåé ã®å¼ç¨ã¯ããããã
人工çå½âãã¸ã¿ã«çç©ã®åµé è ãã¡
- ä½è : ã¹ãã£ã¼ãã³ã¬ãã¼,Steven Levy,æé¨æ¡
- åºç社/ã¡ã¼ã«ã¼: ææ¥æ°è社
- çºå£²æ¥: 1996/03
- ã¡ãã£ã¢: åè¡æ¬
- è³¼å ¥: 3人 ã¯ãªãã¯: 52å
- ãã®ååãå«ãããã° (5件) ãè¦ã
- Stephen Wolfram: Articles on Cellular Automata - Stephen Wolframã®ã»ã«ãªã¼ãããã³é¢ä¿ã®è«æéãåèè«æãèªãã§ã¿ãäºå®ã天æãã©ãããè«æã®æ¸ãæ¹ããã¦ããã®ãæ°ã«ãªãã
- Cellular Automata - ãã®ããã°è¨äºã§ãå ¨256種é¡ã®ã«ã¼ã«ãå ¨é¨æç»ãã¦ãã¾ããã¾ããã¦ã¿ã¾ããï¼ç¬ï¼
- セル・オートマトン(Wikipedia)
- Cellular automaton (Wikipedia)
- Wolfram-style cellular automata (Python recipe) - ä¸æ¬¡å ã»ã«ãªã¼ãããã³ã®Pythonã³ã¼ãããããåèã«ãã¾ããããã®ãµã¤ãã¯çµæ§ãã¤ãã¼ãªã¬ã·ãããã£ã¦è¦ã¦ãã¨é¢ç½ããªãããã å®è£ ãã¨ã¬ã¬ã³ãããã¦ããã«ç解ã§ããªãï¼ç¬ï¼
- 世界のモデルで遊ぼう - æ¥æ¬èªã«ããã»ã«ãªã¼ãããã³ã®è§£èª¬ãããããããã
- ä½è : Joel L. Schiff,æ¢ å°¾åå¸,Ferdinand Peper,足ç«é²,ç¤å·æ次é,ä»äºå æ¢,å°æ¾å´ä¿å½¦,æä½³
- åºç社/ã¡ã¼ã«ã¼: å ±ç«åºç
- çºå£²æ¥: 2011/12/22
- ã¡ãã£ã¢: åè¡æ¬
- ã¯ãªãã¯: 54å
- ãã®ååãå«ãããã° (2件) ãè¦ã
*1:確ççã»ã«ãªã¼ãããã³ã¨ããã®ãããã¿ããã ãã©
*2:ã¡ãªã¿ã«ã¹ãã£ã¼ã´ã³ã»ã¦ã«ãã©ã ã¯ãMathematicaãWolfram Alphaãä½ã£ã人ã¨åä¸äººç©ã§ãã