亚洲激情专区-91九色丨porny丨老师-久久久久久久女国产乱让韩-国产精品午夜小视频观看

溫馨提示×

溫馨提示×

您好,登錄后才能下訂單哦!

密碼登錄×
登錄注冊×
其他方式登錄
點擊 登錄注冊 即表示同意《億速云用戶服務條款》

詳解Python 實現元胞自動機中的生命游戲(Game of life)

發布時間:2020-08-25 14:48:03 來源:腳本之家 閱讀:234 作者:農大魯迅 欄目:開發技術

簡介

細胞自動機(又稱元胞自動機),名字雖然很深奧,但是它的行為卻是非常美妙的。所有這些怎樣實現的呢?我們可以把計算機中的宇宙想象成是一堆方格子構成的封閉空間,尺寸為N的空間就有NN個格子。而每一個格子都可以看成是一個生命體,每個生命都有生和死兩種狀態,如果該格子生就顯示藍色,死則顯示白色。每一個格子旁邊都有鄰居格子存在,如果我們把33的9個格子構成的正方形看成一個基本單位的話,那么這個正方形中心的格子的鄰居就是它旁邊的8個格子。

每個格子的生死遵循下面的原則:

1. 如果一個細胞周圍有3個細胞為生(一個細胞周圍共有8個細胞),則該細胞為生(即該細胞若原先為死,則轉為生,若原先為生,則保持不變) 。

2. 如果一個細胞周圍有2個細胞為生,則該細胞的生死狀態保持不變;

3. 在其它情況下,該細胞為死(即該細胞若原先為生,則轉為死,若原先為死,則保持不變)

設定圖像中每個像素的初始狀態后依據上述的游戲規則演繹生命的變化,由于初始狀態和迭代次數不同,將會得到令人嘆服的優美圖案。

代碼

"""
元胞自動機 Python 實現
"""
import numpy as np
import matplotlib.pyplot as plt


class GameOfLife(object):

  def __init__(self, cells_shape):
    """
    Parameters
    ----------
    cells_shape : 一個元組,表示畫布的大小。

    Examples
    --------
    建立一個高20,寬30的畫布
    game = GameOfLife((20, 30))
    
    """

    # 矩陣的四周不參與運算
    self.cells = np.zeros(cells_shape)

    real_width = cells_shape[0] - 2
    real_height = cells_shape[1] - 2
    
    self.cells[1:-1, 1:-1] = np.random.randint(2, size=(real_width, real_height))
    self.timer = 0
    self.mask = np.ones(9)
    self.mask[4] = 0
  
  def update_state(self):
    """更新一次狀態"""
    buf = np.zeros(self.cells.shape)
    cells = self.cells
    for i in range(1, cells.shape[0] - 1):
      for j in range(1, cells.shape[0] - 1):
        # 計算該細胞周圍的存活細胞數
        neighbor = cells[i-1:i+2, j-1:j+2].reshape((-1, ))
        neighbor_num = np.convolve(self.mask, neighbor, 'valid')[0]
        if neighbor_num == 3:
          buf[i, j] = 1
        elif neighbor_num == 2:
          buf[i, j] = cells[i, j]
        else:
          buf[i, j] = 0
    self.cells = buf
    self.timer += 1
  
  def plot_state(self):
    """畫出當前的狀態"""
    plt.title('Iter :{}'.format(self.timer))
    plt.imshow(self.cells)
    plt.show()

  def update_and_plot(self, n_iter):
    """更新狀態并畫圖
    Parameters
    ----------
    n_iter : 更新的輪數
    """
    plt.ion()
    for _ in range(n_iter):
      plt.title('Iter :{}'.format(self.timer))
      plt.imshow(self.cells)
      self.update_state()
      plt.pause(0.2)
    plt.ioff()
          

if __name__ == '__main__':
  game = GameOfLife(cells_shape=(60, 60))
  game.update_and_plot(200)

效果圖

詳解Python 實現元胞自動機中的生命游戲(Game of life)

以上就是本文的全部內容,希望對大家的學習有所幫助,也希望大家多多支持億速云。

向AI問一下細節

免責聲明:本站發布的內容(圖片、視頻和文字)以原創、轉載和分享為主,文章觀點不代表本網站立場,如果涉及侵權請聯系站長郵箱:is@yisu.com進行舉報,并提供相關證據,一經查實,將立刻刪除涉嫌侵權內容。

AI

库伦旗| 怀远县| 和硕县| 雷州市| 天门市| 遂昌县| 瓮安县| 永嘉县| 墨脱县| 泰兴市| 织金县| 铁岭市| 通山县| 电白县| 湘阴县| 博湖县| 容城县| 中江县| 奈曼旗| 阿拉善左旗| 永兴县| 荣昌县| 错那县| 吴堡县| 新源县| 金阳县| 德安县| 滁州市| 建平县| 景洪市| 长宁县| 平和县| 潞城市| 得荣县| 扎兰屯市| 常州市| 客服| 周口市| 五台县| 涪陵区| 桃园县|