復(fù)雜性思維中文第二版 十一裕偿、進(jìn)化

十一、進(jìn)化

原文:Chapter 11 Evolution

譯者:飛龍

協(xié)議:CC BY-NC-SA 4.0

自豪地采用谷歌翻譯

生物學(xué)乃至整個(gè)科學(xué)最重要的思想,是通過自然選擇的進(jìn)化論宗弯,它聲稱由于自然選擇而創(chuàng)造出新的物種并改變現(xiàn)有的物種。自然選擇是個(gè)體間遺傳差異導(dǎo)致生存和繁殖差異的過程搂妻。

在了解生物學(xué)的人中蒙保,進(jìn)化論被廣泛認(rèn)為是一個(gè)事實(shí),也就是它足以接近事實(shí)欲主,如果將來得到糾正邓厕,糾正將使中心思想基本保持完整。

盡管如此扁瓢,許多人并不相信進(jìn)化論详恼。在皮尤研究中心進(jìn)行的一項(xiàng)調(diào)查中,被調(diào)查者被問到引几,以下哪些斷言更貼近他們的觀點(diǎn):

  • 人類和其他生物隨時(shí)間而進(jìn)化昧互。
  • 起初,人類和其他生物就以其現(xiàn)在的形式存在。

約有 34% 的美國(guó)人選擇了第二個(gè)(見 http://www.thearda.com/Archive/Files/Codebooks/RELLAND14_CB.asp)敞掘。

即使在那些認(rèn)為生物已經(jīng)進(jìn)化的人中叽掘,只有一半以上的人認(rèn)為進(jìn)化的原因是自然選擇。 換句話說渐逃,只有三分之一的美國(guó)人相信進(jìn)化論是真實(shí)的够掠。

這怎么可能? 在我看來茄菊,促成因素包括:

  • 有些人認(rèn)為進(jìn)化論與他們的宗教信仰之間有沖突疯潭。 感覺就像他們不得不拒絕一個(gè),他們拒絕了進(jìn)化論面殖。
  • 其他人經(jīng)常被第一組成員積極誤導(dǎo)竖哩,以至于他們對(duì)進(jìn)化論的許多認(rèn)識(shí)都是錯(cuò)誤的。
  • 許多人根本就不了解進(jìn)化脊僚。

對(duì)于第一組相叁,我可能沒有太多可以做的事,但我認(rèn)為我可以幫助其他人辽幌。 經(jīng)驗(yàn)上增淹,進(jìn)化論很難讓人理解。 同時(shí)乌企,它非常簡(jiǎn)單:對(duì)很多人來說虑润,一旦他們了解進(jìn)化論,它似乎既明顯又無可辯駁加酵。

為了幫助人們從困惑轉(zhuǎn)變?yōu)榍逦鳎艺业降淖顝?qiáng)大的工具就是計(jì)算。 我們看到猪腕,理論上很難理解的想法冗澈,在模擬中出現(xiàn)時(shí)很容易理解。 這是本章的目標(biāo)陋葡。

本章的代碼位于chap11.ipynb中亚亲,該書是本書倉庫中的 Jupyter 筆記本。使用此代碼的更多信息腐缤,請(qǐng)參見第朵栖?節(jié)。

11.1 簡(jiǎn)單的進(jìn)化

我將從一個(gè)簡(jiǎn)單的模型開始柴梆,演示一種基本的進(jìn)化形式陨溅。 根據(jù)該理論,以下特征足以產(chǎn)生進(jìn)化:

  • 復(fù)制者:我們需要一批能夠以某種方式復(fù)制的智能體绍在。 我們將以復(fù)制者開始门扇,它們生成它們自己的完美的副本雹有。 稍后我們將添加不完美的副本,即突變臼寄。
  • 突變:我們還需要一些種群中的變化霸奕,也就是個(gè)體之間的差異。
  • 生存和繁殖差異:個(gè)體之間的差異必須影響其生存或繁殖的能力吉拳。

為了模擬這些特征质帅,我們將定義智能體種群,智能體代表個(gè)體留攒。 每個(gè)智能體都有遺傳信息煤惩,稱為基因型,這是智能體繁殖時(shí)復(fù)制的信息炼邀。 在我們的模型中 [1]魄揉,基因型由N個(gè)二進(jìn)制數(shù)字(零和一)的序列表示,其中N是我們選擇的參數(shù)拭宁。

[1] 模型是主要由 Stuart Kauffman 開發(fā)的 NK 模型的變體(參見 https://en.wikipedia.org/wiki/NK_model)洛退。

為了產(chǎn)生突變,我們創(chuàng)建了具有多種基因型的種群杰标;稍后我們將探討創(chuàng)造或增加突變的機(jī)制兵怯。

最后,為了產(chǎn)生生存和繁殖差異腔剂,我們定義了一個(gè)函數(shù)摇零,將每個(gè)基因型映射為一個(gè)適應(yīng)度,其中適應(yīng)度是一個(gè)數(shù)量桶蝎,有關(guān)智能體的生存或繁殖能力。

11.2 適應(yīng)性景觀

將基因型映射為適應(yīng)性函數(shù)谅畅,稱為適應(yīng)性景觀登渣。 在景觀的隱喻中,每個(gè)基因型對(duì)應(yīng)于N維空間中的一個(gè)位置毡泻,并且適應(yīng)性對(duì)應(yīng)于該位置處的景觀的“高度”胜茧。對(duì)于能夠解釋這個(gè)隱喻的可視化,參見 https://en.wikipedia.org/wiki/Fitness_landscape仇味。

在生物學(xué)術(shù)語中呻顽,適應(yīng)性景觀代表一種信息,它是生物體的基因型與其物理形式和能力的關(guān)系丹墨,后者稱為其表現(xiàn)型廊遍,以及表現(xiàn)型如何與其環(huán)境相互作用。

在現(xiàn)實(shí)世界中贩挣,適應(yīng)性景觀很復(fù)雜喉前,但我們不需要建立現(xiàn)實(shí)模型没酣。 為了誘導(dǎo)進(jìn)化,我們需要基因型和適應(yīng)性之間的某種關(guān)系卵迂,但事實(shí)證明它可以是任何關(guān)系裕便。 為了證明它,我們將使用完全隨機(jī)的適應(yīng)性景觀见咒。

這是代表適應(yīng)性景觀的類的定義:

class FitnessLandscape:
    def __init__(self, N):
        self.N = N
        self.one_values = np.random.random(N)
        self.zero_values = np.random.random(N)

    def fitness(self, loc):
        fs = np.where(loc, self.one_values,
                           self.zero_values)
        return fs.mean()

智能體的基因型偿衰,對(duì)應(yīng)其在適應(yīng)性景觀中的位置,由一個(gè) NumPy 的零一數(shù)組來表示改览,稱為loc下翎。 給定基因型的適應(yīng)性,是N個(gè)適應(yīng)性貢獻(xiàn)的平均值恃疯,loc的每個(gè)元素都是一個(gè)漏设。

為了計(jì)算基因型的適應(yīng)性,FitnessLandscape使用兩個(gè)數(shù)組:one_values今妄,其中包含loc的每個(gè)元素都為 1 時(shí)的適應(yīng)性貢獻(xiàn)郑口,以及zero_values,其中包含為 0 時(shí)的適應(yīng)度貢獻(xiàn)盾鳞。

fitness方法使用np.where犬性,如果loc中的值為 1,它從one_values中選擇一個(gè)值腾仅,如果loc中的值為 0乒裆,它從zero_values中選擇一個(gè)值。

例如推励,假設(shè)N=3

one_values =  [0.1, 0.2, 0.3]
zero_values = [0.4, 0.7, 0.9]

這種情況下鹤耍,loc = [0, 1, 0]的適應(yīng)性是[0.4, 0.2, 0.9]的均值,為 0.5验辞。

11.3 智能體

接下來我們需要智能體稿黄,這是類定義:

class Agent:

    def __init__(self, loc, fit_land):
        self.loc = loc
        self.fit_land = fit_land
        self.fitness = fit_land.fitness(self.loc)

    def copy(self):
        return Agent(self.loc, self.fit_land)

智能體的屬性是:

loc:智能體在適應(yīng)性景觀中的位置。
fit_landFitnessLandscape對(duì)象的引用跌造。
fitness:智能體在FitnessLandscape中的適應(yīng)性杆怕,表示為 0 到 1 之間的數(shù)字。
Agent的這個(gè)定義提供了一種簡(jiǎn)單的copy方法壳贪,可以精確復(fù)制基因型陵珍;之后,我們將看到一個(gè)帶有突變的版本违施,但突變對(duì)于進(jìn)化來說不是必需的互纯。

11.4 模擬

現(xiàn)在我們有了智能體和適應(yīng)性景觀,我將定義一個(gè)名為Simulation的類磕蒲,用于模擬智能體的創(chuàng)建伟姐,繁殖和死亡收苏。 為了避免陷入困境,我將在這里提供一個(gè)簡(jiǎn)化版本的代碼愤兵;你可以在本章的筆記本上看到細(xì)節(jié)鹿霸。

這是Simulation的定義:


class Simulation:

    def __init__(self, fit_land, agents):
        self.fit_land = fit_land
        self.agents = agents

Simulation的屬性是:

  • fit_landFitnessLandscape對(duì)象的引用。
  • agentsAgent對(duì)象的數(shù)組秆乳。

Simulation中最重要的函數(shù)是step懦鼠,它模擬了單個(gè)時(shí)間步驟:


# class Simulation:

    def step(self):
        n = len(self.agents)
        fits = self.get_fitnesses()

        # see who dies
        index_dead = self.choose_dead(fits)
        num_dead = len(index_dead)

        # replace the dead with copies of the living
        replacements = self.choose_replacements(num_dead, fits)
        self.agents[index_dead] = replacements

在每個(gè)時(shí)間步驟中,一些智能體死亡屹堰,一些智能體繁殖肛冶。 step使用另外三個(gè)方法:

  • get_fitnesses返回一個(gè)數(shù)組,包含每個(gè)智能體的適應(yīng)性扯键,按照它們?cè)谥悄荏w數(shù)組中出現(xiàn)的順序睦袖。
  • choose_dead決定哪些智能體在此時(shí)間步中死亡,并返回一個(gè)數(shù)組荣刑,包含死亡智能體的索引馅笙。
  • choose_replacements決定哪些智能體在此時(shí)間步中繁殖,在每個(gè)智能體上調(diào)用copy厉亏,并返回一個(gè)新的Agent對(duì)象的數(shù)組董习。

在這個(gè)版本的模擬中,每個(gè)時(shí)間步中新智能體的數(shù)量等于死亡智能體的數(shù)量爱只,所以活動(dòng)智能體的數(shù)量是恒定的皿淋。

11.5 沒有差異

在我們運(yùn)行模擬之前,我們必須指定choose_deadchoose_replacements的行為恬试。 我們將從這些函數(shù)的簡(jiǎn)單版本開始氢伟,它們不依賴于適應(yīng)性:

# class Simulation

     def choose_dead(self, fits):
        n = len(self.agents)
        is_dead = np.random.random(n) < 0.1
        index_dead = np.nonzero(is_dead)[0]
        return index_dead

    def choose_replacements(self, n, fits):
        agents = np.random.choice(self.agents, size=n, replace=True)
        replacements = [agent.copy() for agent in agents]
        return replacements

choose_dead中螟够,n是智能體的數(shù)量矫夯,is_dead是一個(gè)布爾數(shù)組决帖,對(duì)于此時(shí)間步驟內(nèi)死亡的智能體為True砸烦。 在這個(gè)版本中频祝,每個(gè)智能體都有相同的死亡概率:0.1绍填。 choose_dead使用np.nonzero來查找is_dead的非零元素的索引(True被視為非零)喉镰。

choose_replacements中乖阵,n是在此時(shí)間步驟中復(fù)制的智能體數(shù)量宣赔。 它使用np.random.choice帶替換地選擇n個(gè)智能體。 然后它在每個(gè)上調(diào)用copy瞪浸,并返回一個(gè)新的Agent對(duì)象列表儒将。

這些方法不依賴于適應(yīng)性,所以這種模擬沒有生存或繁殖差異对蒲。 因此钩蚊,我們不應(yīng)期待看到進(jìn)化贡翘。 但是,我們?cè)趺幢鎰e呢砰逻?

11.6 進(jìn)化的證據(jù)

進(jìn)化的最具包容性的定義是鸣驱,種群中基因型分布的變化。 進(jìn)化是一種聚合效應(yīng):換句話說蝠咆,個(gè)體不會(huì)進(jìn)化踊东;但種群會(huì)。

在這個(gè)模擬中刚操,基因型是高維空間中的位置闸翅,因此很難將其分布中的變化可視化。 但是菊霜,如果基因型改變坚冀,我們預(yù)計(jì)它們的適應(yīng)性也會(huì)改變。 所以我們將將適應(yīng)性分布的變化用作進(jìn)化的證據(jù)鉴逞。 具體來說记某,我們將看看種群中適應(yīng)性的均值和標(biāo)準(zhǔn)差。

在我們運(yùn)行模擬之前华蜒,我們必須添加一個(gè)Instrument辙纬,它是在每個(gè)時(shí)間步驟后更新的對(duì)象,計(jì)算一個(gè)感興趣的統(tǒng)計(jì)量叭喜,并將結(jié)果存儲(chǔ)在一個(gè)序列中贺拣,我們稍后可以繪制它。

這是所有儀器的父類:

class Instrument:
    def __init__(self):
        self.metrics = []

下面是MeanFitness的定義捂蕴,MeanFitness是一個(gè)儀器譬涡,計(jì)算每個(gè)時(shí)間步的種群平均適應(yīng)性:


class MeanFitness(Instrument):
    def update(self, sim):
        mean = np.nanmean(sim.get_fitnesses())
        self.metrics.append(mean)

現(xiàn)在我們準(zhǔn)備好運(yùn)行模擬了。 為了最小化起始種群中隨機(jī)變化的影響啥辨,我們使用同一組智能體啟動(dòng)每個(gè)模擬涡匀。 為了確保我們探索整個(gè)適應(yīng)性景觀,我們由每個(gè)位置的一個(gè)智能體開始溉知。 以下是創(chuàng)建模擬的代碼:

N = 8
fit_land = FitnessLandscape(N)
agents = make_all_agents(fit_land, Agent)
sim = Simulation(fit_land, agents)

make_all_agents為每個(gè)位置創(chuàng)建一個(gè)智能體陨瘩; 本章的實(shí)現(xiàn)在筆記本中。

現(xiàn)在我們可以創(chuàng)建并添加MeanFitness儀器级乍,運(yùn)行模擬并繪制結(jié)果:

instrument = MeanFitness()
sim.add_instrument(instrument)
sim.run()
sim.plot(0)

模擬維護(hù)了Instrument對(duì)象列表舌劳。 在每個(gè)時(shí)間步之后,它在列表中的每個(gè)儀器上調(diào)用update玫荣。

模擬運(yùn)行后甚淡,我們使用Simulation.plot繪制結(jié)果,它接受索引作為參數(shù)捅厂,使用索引從列表中選擇一個(gè)Instrument并繪制結(jié)果贯卦。 在這個(gè)例子中资柔,只有一個(gè)Instrument,索引為 0撵割。

image

圖 11.1:隨著時(shí)間的推移贿堰,10 次模擬的平均適應(yīng)性,沒有生存或繁殖差異

圖睁枕?顯示了運(yùn)行這個(gè)模擬 10 次的結(jié)果官边。 種群的平均適應(yīng)性隨機(jī)移動(dòng)。 由于適應(yīng)性的分布隨時(shí)間變化外遇,我們推斷表現(xiàn)型的分布也在變化注簿。 按照最具包容性的定義,這種隨機(jī)游走是一種進(jìn)化跳仿。 但它不是一個(gè)特別有趣的類型诡渴。

特別是,這種進(jìn)化并不能解釋生物物種如何隨時(shí)間變化菲语,或者如何出現(xiàn)新的物種妄辩。 進(jìn)化論是強(qiáng)大的,因?yàn)樗忉屃宋覀冊(cè)谧匀唤缈吹降乃坪鯚o法解釋的現(xiàn)象:

  • 適應(yīng)性:物種與其環(huán)境的相互作用似乎太復(fù)雜山上,太巧妙眼耀,并且偶然發(fā)生。 自然系統(tǒng)的許多特征看起來好像是設(shè)計(jì)出來的佩憾。
  • 增加的多樣性:地球上的物種數(shù)量隨時(shí)間而普遍增加(盡管有幾個(gè)時(shí)期的大規(guī)模滅絕)哮伟。
  • 增加的復(fù)雜性:地球上的生命史起始于相對(duì)簡(jiǎn)單的生命形式,后來在地質(zhì)記錄中出現(xiàn)了更復(fù)雜的生物體妄帘。

這些是我們想要解釋的現(xiàn)象楞黄。 到目前為止,我們的模型并沒有完成這個(gè)任務(wù)抡驼。

11.7 生存差異

讓我們?cè)偬砑右环N成分鬼廓,生存差異。 以下是繼承Simulation并覆蓋choose_dead的類的定義:


class SimWithDiffSurvival(Simulation):

    def choose_dead(self, fits):
        n = len(self.agents)
        is_dead = np.random.random(n) > fits
        index_dead = np.nonzero(is_dead)[0]
        return index_dead

現(xiàn)在生存的概率取決于適應(yīng)性致盟;事實(shí)上碎税,在這個(gè)版本中,智能體在每個(gè)時(shí)間步驟中幸存的概率是其適應(yīng)性馏锡。

由于適應(yīng)性低的智能體更有可能死亡雷蹂,因此適應(yīng)性高的智能體更有可能生存足夠長(zhǎng)的時(shí)間來繁殖。 我們預(yù)計(jì)適應(yīng)性低的智能體的數(shù)量會(huì)隨時(shí)間而減少眷篇,適應(yīng)性高的智能體的數(shù)量會(huì)增加萎河。

image

圖 11.2:隨著時(shí)間的推移荔泳,10 次模擬中的適應(yīng)性均值蕉饼,帶有生存差異

圖虐杯?顯示了隨著時(shí)間的推移,10 次模擬中的適應(yīng)性均值昧港,帶有生存差異擎椰。 平均適應(yīng)性起初會(huì)迅速增加,但會(huì)逐漸平穩(wěn)创肥。

你或許可以弄清楚為什么它會(huì)平穩(wěn):如果在特定位置只有一個(gè)智能體并且它死了达舒,它就會(huì)使這個(gè)位置變空。沒有突變叹侄,就沒有辦法讓它再次被占領(lǐng)巩搏。

N = 8的情況下,該模擬以 256 個(gè)智能體開始趾代,它們占用了所有可能位置贯底。 占用位置的數(shù)量隨時(shí)間而減少;如果模擬運(yùn)行時(shí)間足夠長(zhǎng)撒强,最終所有智能體將占用相同的位置禽捆。

所以這個(gè)模擬開始解釋適應(yīng)性:增加的適應(yīng)性意味著,物種在它的環(huán)境中生存得更好飘哨。 但是占用位置的數(shù)量隨時(shí)間而減少胚想,所以這個(gè)模型根本無法解釋增加的多樣性。

在本章的筆記本中芽隆,你將看到差異化繁殖的效果浊服。 正如你所預(yù)料的那樣,差異化繁殖也會(huì)增加平均適應(yīng)性摆马。但沒有突變臼闻,我們?nèi)匀粵]有看到增加的多樣性。

11.8 突變

在目前的模擬中囤采,我們以可能的最大多樣性開始 - 在景觀的每個(gè)位置都有一個(gè)智能體 - 并以可能的最小多樣性結(jié)束述呐,所有智能體都在一個(gè)位置。

這與自然界發(fā)生的情況幾乎相反蕉毯,它顯然以單個(gè)物種開始乓搬,這種物種隨時(shí)間而分化為今天的地球上數(shù)百萬甚至數(shù)十億物種(見 https://en.wikipedia.org/wiki/Global_biodiversity)。

使用我們模型的完美復(fù)制代虾,我們從未看到增加的多樣性进肯。 但是如果我們加上突變,再加上生存和繁殖差異棉磨,我們距離理解自然界的進(jìn)化就更近了一步江掩。

以下是繼承Agent并覆蓋copy的類定義:

class Mutant(Agent):

    prob_mutate = 0.05

    def copy(self):
        if np.random.random() > self.prob_mutate:
            loc = self.loc.copy()
        else:
            direction = np.random.randint(self.fit_land.N)
            loc = self.mutate(direction)
        return Mutant(loc, self.fit_land)

在這種突變模型中,每次我們調(diào)用copy時(shí),都有 5% 的突變機(jī)會(huì)环形。 在突變的情況下策泣,我們從當(dāng)前位置選擇一個(gè)隨機(jī)方向 - 即基因型中的一個(gè)隨機(jī)位 - 并翻轉(zhuǎn)它。 這是mutate

    def mutate(self, direction):
        new_loc = self.loc.copy()
        new_loc[direction] ^= 1
        return new_loc

運(yùn)算符^=計(jì)算“異或”抬吟;操作數(shù) 1 具有翻轉(zhuǎn)一位的效果(請(qǐng)參閱 https://en.wikipedia.org/wiki/Exclusive_or#Bitwise_operation)萨咕。

現(xiàn)在我們有了突變,我們不必在每個(gè)位置都放置一個(gè)智能體火本。 相反危队,我們可以以最小變化開始:所有智能體在同一位置。

image

圖 11.3:隨著時(shí)間的推移钙畔,10 次模擬中的適應(yīng)性均值茫陆,帶有突變、生存繁殖差異

圖擎析?顯示了 10 次模擬的結(jié)果盅弛,帶有突變和生存繁殖差異。 在任何情況下叔锐,種群都會(huì)向最大適應(yīng)性的位置進(jìn)化挪鹏。

image

圖 11.4:隨著時(shí)間的推移,10 次模擬的占用位置的數(shù)量愉烙,帶有突變和生存繁殖差異讨盒。

為了測(cè)量種群的多樣性,我們可以繪制每個(gè)時(shí)間步后占用位置的數(shù)量步责。 圖返顺?展示了結(jié)果。 我們以同一地點(diǎn)的 100 個(gè)智能體開始蔓肯。 隨著突變的發(fā)生遂鹊,占用位置的數(shù)量迅速增加。

當(dāng)智能體發(fā)現(xiàn)適應(yīng)性高的位置時(shí)蔗包,它更有可能生存和繁殖秉扑。 適應(yīng)性較低的位置上的智能體最終消失。 種群在整個(gè)景觀中隨時(shí)間而移動(dòng)调限,直到大多數(shù)智能體處于適合性最高的位置舟陆。

此時(shí),系統(tǒng)達(dá)到平衡耻矮,突變以相同的速率占據(jù)新的位置秦躯,生存差異導(dǎo)致適合性低的位置清空。

平衡中的占用位置的數(shù)量裆装,取決于突變率和生存差異的程度踱承。 在這些模擬中倡缠,任何點(diǎn)處的獨(dú)特占用位置的數(shù)量通常為 10-20。

重要的是要記住茎活,這個(gè)模型中的智能體不會(huì)移動(dòng)毡琉,就像生物體的基因型沒有改變一樣。 當(dāng)智能體死亡時(shí)妙色,它可能會(huì)留下一個(gè)空位。 當(dāng)發(fā)生突變時(shí)慧耍,它可以占據(jù)一個(gè)新的位置身辨。 當(dāng)智能體從某些地方消失并出現(xiàn)在其他地方時(shí),種群會(huì)在景觀中移動(dòng)芍碧,就像生命游戲中的滑翔機(jī)一樣煌珊。 但生命體不會(huì)進(jìn)化;但種群可以泌豆。

11.9 物種形成

進(jìn)化論說定庵,自然選擇改變了現(xiàn)有的物種并創(chuàng)造了新的物種。 在我們的模型中踪危,我們看到了變化蔬浙,但我們并沒有看到新的物種。 在模型中贞远,還不清楚新物種是什么樣畴博。

在有性繁殖的物種中,如果兩種生物能夠繁殖并產(chǎn)生豐富的后代蓝仲,則被視為同一物種俱病。 但是模型中的智能體不會(huì)再現(xiàn)性行為,所以這個(gè)定義不適用袱结。

在無性繁殖的生物中亮隙,如細(xì)菌,物種的定義并不明確垢夹。 一般來說溢吻,如果一個(gè)種群的基因型形成一個(gè)簇,那么它就被認(rèn)為是一個(gè)物種果元,也就是說煤裙,如果種群內(nèi)的遺傳差異比種群間的差異小。

在我們可以對(duì)新物種建模之前噪漾,我們需要能夠識(shí)別景觀中的智能體簇硼砰,這意味著我們需要定義位置之間的距離。 由于位置是用二進(jìn)制數(shù)字串表示的欣硼,因此我們將距離定義為基因型中不同的位數(shù)题翰。 FitnessLandscape提供了distance方法:

# class FitnessLandscape

    def distance(self, loc1, loc2):
        return np.sum(np.logical_xor(loc1, loc2))
image

圖 11.5:智能體隨時(shí)間變化的平均距離

logical_xor函數(shù)計(jì)算“異或”,不同的元素為True,相同的元素為False豹障。

為了量化種群的分散冯事,我們可以計(jì)算每對(duì)智能體之間距離的平均值。 在本章的筆記本中血公,你會(huì)看到MeanDistance儀器昵仅,它會(huì)在每個(gè)時(shí)間步驟后計(jì)算這個(gè)度量。

圖累魔? 展示了智能體隨時(shí)間的平均距離摔笤。 因?yàn)槲覀儚南嗤耐蛔冮_始,所以初始距離為 0垦写。隨著突變的發(fā)生吕世,平均距離增加,在種群遍布景觀時(shí)達(dá)到最大值梯投。

一旦智能體發(fā)現(xiàn)最佳位置命辖,平均距離就會(huì)減小,直到種群達(dá)到平衡分蓖,由于突變引起的距離增加通過距離的減小而平衡尔艇,因?yàn)檫h(yuǎn)離最佳位置的智能體更有可能死亡。 在這些模擬中么鹤,平衡時(shí)的平均距離接近 1.5漓帚;也就是說,大多數(shù)智能體距離最佳位置只有 1-2 個(gè)突變午磁。

現(xiàn)在我們準(zhǔn)備尋找新的物種尝抖。 為了模擬一種簡(jiǎn)單的物種形成,假設(shè)一個(gè)種群在不變的環(huán)境中演化迅皇,直到它達(dá)到穩(wěn)定狀態(tài)(就像我們?cè)谧匀唤绨l(fā)現(xiàn)的一些物種昧辽,似乎在很長(zhǎng)一段時(shí)間內(nèi)變化很小)登颓。

現(xiàn)在假設(shè)我們改變環(huán)境搅荞,或者將種群轉(zhuǎn)移到新的環(huán)境中。 一些舊環(huán)境中適應(yīng)性較高的特性框咙,可能會(huì)在新環(huán)境中適應(yīng)性較低咕痛,反之亦然。

我們可以通過運(yùn)行模擬來模擬這些情景喇嘱,直到種群達(dá)到穩(wěn)定狀態(tài)茉贡,然后改變適應(yīng)性景觀,然后恢復(fù)模擬者铜,直到種群再次達(dá)到穩(wěn)定狀態(tài)腔丧。

image

圖 11.6:隨時(shí)間變化的適應(yīng)性均值放椰。在 500 步之后,我們改變了適應(yīng)性景觀

圖愉粤?展示了這樣的模擬結(jié)果砾医。 再次,我們從隨機(jī)位置開始衣厘,使用 100 個(gè)相同的突變體如蚜,并運(yùn)行 500 個(gè)時(shí)間步驟的模擬。 在這個(gè)時(shí)候影暴,許多智能體處于最佳位置错邦,在這個(gè)例子中,其適應(yīng)性接近 0.65坤检。 智能體的基因型形成一個(gè)簇,智能體之間的平均距離接近 1期吓。

經(jīng)過 500 步之后早歇,我們運(yùn)行FitnessLandscape.set_values,這改變了適應(yīng)性景觀讨勤; 然后我們恢復(fù)模擬箭跳。 平均適應(yīng)性會(huì)立即下降,因?yàn)榕f景觀中的最佳位置并不比新景觀中的隨機(jī)位置好潭千。

然而谱姓,當(dāng)種群遷移到新景觀時(shí),平均適應(yīng)性會(huì)迅速增加刨晴,最終會(huì)找到新的最佳值屉来,其適應(yīng)度接近 0.75(在這個(gè)例子中恰好更高,但不一定是)狈癞。

一旦種群達(dá)到穩(wěn)定狀態(tài)茄靠,它就會(huì)形成一個(gè)新的簇,智能體之間的平均距離再次接近 1蝶桶。

現(xiàn)在慨绳,如果我們計(jì)算智能體之前和之后的位置之間的距離,平均而言真竖,它們相差超過 6脐雪。 簇之間的距離遠(yuǎn)大于每個(gè)簇內(nèi)的距離,因此我們可以將這些簇解釋為不同的物種恢共。

11.10 總結(jié)

我們已經(jīng)看到战秋,突變以及生存和繁殖差異,足以導(dǎo)致適應(yīng)性的增加讨韭,多樣性的增加获询,并產(chǎn)生簡(jiǎn)單形式的物種涨岁。 這種模型并不是現(xiàn)實(shí)的;自然系統(tǒng)中的進(jìn)化要比這復(fù)雜得多吉嚣。 相反梢薪,它意味著一個(gè)“充足定理”;也就是說尝哆,模型的特征足以產(chǎn)生我們?cè)噲D解釋的行為(參見 https://en.wikipedia.org/wiki/Necessity_and_sufficiency)秉撇。

從邏輯上講,這個(gè)“定理”并不能證明秋泄,自然界中的進(jìn)化僅僅由這些機(jī)制引起琐馆,但是由于這些機(jī)制確實(shí)以多種形式出現(xiàn)在生物系統(tǒng)中,所以認(rèn)為它們至少有助于自然進(jìn)化恒序,是合理的瘦麸。

同樣,該模型并不能證明這些機(jī)制總是會(huì)導(dǎo)致進(jìn)化歧胁。 但是我們?cè)谶@里看到的結(jié)果是可靠的:在幾乎所有包含這些特征的模型中 - 不完美的復(fù)制者滋饲,變異性和繁殖差異 - 發(fā)生了進(jìn)化。

我希望這一觀察有助于揭開進(jìn)化的神秘面紗喊巍。 當(dāng)我們觀察自然系統(tǒng)時(shí)屠缭,進(jìn)化看起來很復(fù)雜。 而且由于我們主要看到了進(jìn)化的結(jié)果崭参,而沒有看到這個(gè)過程呵曹,所以難以想象和相信。

但在模擬中何暮,我們看到整個(gè)過程奄喂,而不僅僅是結(jié)果。 通過包含最少的一系列特征來產(chǎn)生進(jìn)化 - 暫時(shí)忽略了生物生命的巨大復(fù)雜性 - 我們可以將進(jìn)化看作是一個(gè)令人驚訝的簡(jiǎn)單海洼,不可避免的想法砍聊。

11.11 練習(xí)

本章的代碼位于本書倉庫的 Jupyter 筆記本chap11.ipynb中。 打開筆記本贰军,閱讀代碼并運(yùn)行單元格玻蝌。 筆記本包含本章的練習(xí)。 我的解決方案在chap11soln.ipynb中词疼。

?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
  • 序言:七十年代末俯树,一起剝皮案震驚了整個(gè)濱河市,隨后出現(xiàn)的幾起案子贰盗,更是在濱河造成了極大的恐慌许饿,老刑警劉巖,帶你破解...
    沈念sama閱讀 219,188評(píng)論 6 508
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件舵盈,死亡現(xiàn)場(chǎng)離奇詭異陋率,居然都是意外死亡球化,警方通過查閱死者的電腦和手機(jī),發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 93,464評(píng)論 3 395
  • 文/潘曉璐 我一進(jìn)店門瓦糟,熙熙樓的掌柜王于貴愁眉苦臉地迎上來筒愚,“玉大人,你說我怎么就攤上這事菩浙〕膊簦” “怎么了?”我有些...
    開封第一講書人閱讀 165,562評(píng)論 0 356
  • 文/不壞的土叔 我叫張陵劲蜻,是天一觀的道長(zhǎng)陆淀。 經(jīng)常有香客問我,道長(zhǎng)先嬉,這世上最難降的妖魔是什么轧苫? 我笑而不...
    開封第一講書人閱讀 58,893評(píng)論 1 295
  • 正文 為了忘掉前任,我火速辦了婚禮疫蔓,結(jié)果婚禮上含懊,老公的妹妹穿的比我還像新娘。我一直安慰自己鳄袍,他們只是感情好绢要,可當(dāng)我...
    茶點(diǎn)故事閱讀 67,917評(píng)論 6 392
  • 文/花漫 我一把揭開白布吏恭。 她就那樣靜靜地躺著拗小,像睡著了一般。 火紅的嫁衣襯著肌膚如雪樱哼。 梳的紋絲不亂的頭發(fā)上哀九,一...
    開封第一講書人閱讀 51,708評(píng)論 1 305
  • 那天,我揣著相機(jī)與錄音搅幅,去河邊找鬼阅束。 笑死,一個(gè)胖子當(dāng)著我的面吹牛茄唐,可吹牛的內(nèi)容都是我干的息裸。 我是一名探鬼主播,決...
    沈念sama閱讀 40,430評(píng)論 3 420
  • 文/蒼蘭香墨 我猛地睜開眼沪编,長(zhǎng)吁一口氣:“原來是場(chǎng)噩夢(mèng)啊……” “哼呼盆!你這毒婦竟也來了?” 一聲冷哼從身側(cè)響起蚁廓,我...
    開封第一講書人閱讀 39,342評(píng)論 0 276
  • 序言:老撾萬榮一對(duì)情侶失蹤访圃,失蹤者是張志新(化名)和其女友劉穎,沒想到半個(gè)月后相嵌,有當(dāng)?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體腿时,經(jīng)...
    沈念sama閱讀 45,801評(píng)論 1 317
  • 正文 獨(dú)居荒郊野嶺守林人離奇死亡况脆,尸身上長(zhǎng)有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點(diǎn)故事閱讀 37,976評(píng)論 3 337
  • 正文 我和宋清朗相戀三年,在試婚紗的時(shí)候發(fā)現(xiàn)自己被綠了批糟。 大學(xué)時(shí)的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片格了。...
    茶點(diǎn)故事閱讀 40,115評(píng)論 1 351
  • 序言:一個(gè)原本活蹦亂跳的男人離奇死亡,死狀恐怖跃赚,靈堂內(nèi)的尸體忽然破棺而出笆搓,到底是詐尸還是另有隱情,我是刑警寧澤纬傲,帶...
    沈念sama閱讀 35,804評(píng)論 5 346
  • 正文 年R本政府宣布满败,位于F島的核電站,受9級(jí)特大地震影響叹括,放射性物質(zhì)發(fā)生泄漏算墨。R本人自食惡果不足惜,卻給世界環(huán)境...
    茶點(diǎn)故事閱讀 41,458評(píng)論 3 331
  • 文/蒙蒙 一汁雷、第九天 我趴在偏房一處隱蔽的房頂上張望净嘀。 院中可真熱鬧,春花似錦侠讯、人聲如沸挖藏。這莊子的主人今日做“春日...
    開封第一講書人閱讀 32,008評(píng)論 0 22
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽膜眠。三九已至,卻和暖如春溜嗜,著一層夾襖步出監(jiān)牢的瞬間宵膨,已是汗流浹背。 一陣腳步聲響...
    開封第一講書人閱讀 33,135評(píng)論 1 272
  • 我被黑心中介騙來泰國(guó)打工炸宵, 沒想到剛下飛機(jī)就差點(diǎn)兒被人妖公主榨干…… 1. 我叫王不留辟躏,地道東北人。 一個(gè)月前我還...
    沈念sama閱讀 48,365評(píng)論 3 373
  • 正文 我出身青樓土全,卻偏偏與公主長(zhǎng)得像捎琐,于是被迫代替她去往敵國(guó)和親。 傳聞我的和親對(duì)象是個(gè)殘疾皇子裹匙,可洞房花燭夜當(dāng)晚...
    茶點(diǎn)故事閱讀 45,055評(píng)論 2 355

推薦閱讀更多精彩內(nèi)容