《復(fù)雜》如何賦予你計(jì)算機(jī)生命(系列第三期)
大家覺得,生命的要素是什么,換句話說就是,需要具備什么條件才能算是生命.復(fù)雜系統(tǒng)到是對此有一些研究,
如果你問生物學(xué)家生命的要素是什么,得到的答案都不太一樣,但可能大部分都包括,自主,新陳代謝,自我復(fù)制,生存本能,進(jìn)化和適應(yīng).那我們能不能用計(jì)算機(jī)來實(shí)現(xiàn)這些過程呢, ?目前許多人都認(rèn)為這是絕對不可能的,理由諸如, ?計(jì)算機(jī)只能執(zhí)行程序指令,計(jì)算機(jī)本身什么都做不了,也就沒辦法自主. ? ? ?計(jì)算機(jī)無法像生物一樣從環(huán)境中獲取能量進(jìn)行新陳代謝. ?計(jì)算機(jī)不能復(fù)制自身,就像DNA復(fù)制那樣,DNA中包含有描述自身的信息用于復(fù)制,而計(jì)算機(jī)不行 ? ? 計(jì)算機(jī)不關(guān)心自己能不能生存是不是成功, ? ? 計(jì)算機(jī)本身無法進(jìn)化或適應(yīng),它只能嚴(yán)格依照程序員預(yù)先設(shè)定的方式變化,
雖然很多人相信這些觀點(diǎn),但是它們都在人工生命領(lǐng)域被各種方式否定了,這里我們先來看計(jì)算機(jī)中的自我復(fù)制, ? 有管觀點(diǎn)認(rèn)為計(jì)算機(jī)中的自我復(fù)制會導(dǎo)致無窮反復(fù)
舉個(gè)例子 ? 一個(gè)程序的第一句是 ?
hello world
我們要復(fù)制出這個(gè)程序的第一句就要再加一句
print("hello,world")
意思就是把hello,world打印出來,這樣的話我們這一個(gè)程序中就有了兩行程序,可我嘛呢要將這個(gè)程序完整復(fù)制出來,第一句已經(jīng)復(fù)制,那我們就還要打印出第二句
print("print("hello,world")")
現(xiàn)在的確第一和第二句都打印復(fù)制了出來,可又出現(xiàn)了第三行,恐怕這么下去,我們就要一直套娃下去了.
而馮·諾伊曼,最早設(shè)計(jì)電子計(jì)算機(jī)的人之一,他在生命的最后歲月致力于解決機(jī)器如何才能復(fù)制自身的問題,并給出了一個(gè)自我復(fù)制的機(jī)器的完整設(shè)計(jì),本書的作者受"自復(fù)制自動機(jī)"啟發(fā)展示了一段自復(fù)制計(jì)算機(jī)程序闡述其基本原則.我在此也寫了一段程序供大家理解,下面來看代碼
#include<bits/stdc++.h>
using namespace std;
int main(){
? ?freopen("cc1.cpp","r",stdin); ? ?//表示從cc1.cpp文件中讀取信息,也就是本文件
? ?freopen("out.cpp","w",stdout); ? //表示將復(fù)制的結(jié)果輸出到out.cpp文件中
? ?string a; ? ? ? ? ? ? ? ? ? ? ? ?//定義一個(gè)變量用作零時(shí)儲存
? ?//以下的循環(huán)結(jié)構(gòu)開始讀取本文件信息并輸出,直到將程序完整復(fù)制輸出
? ?do{
? ? ? ?getline(cin,a); ? ? ? ? ? ? ?
? ? ? ?cout<<a;
? ? ? ?if(a!="}"){cout<<endl;}
? ?}
? ?while(a!="}");
? ?return 0;
}
而此程序自我復(fù)制的本質(zhì),就在于,剛剛程序的代碼,既作為程序的指令,又作為這些指令使用的數(shù)據(jù),從而規(guī)避了之前程序無限套娃的情形. ?也成為"自指",字面意思理解就好.
而對用這種信息的雙重使用,就順帶一提 ?哥德爾悖論, 他的自指句"這個(gè)命題是不可證的"體現(xiàn)的就是這一點(diǎn). ?
即 ?我說 ?"這個(gè)命題是不可證的". ? 那么這句話本身就需要是可證明的. ? ?可如果證明了"這個(gè)命題是不可證的". ?根據(jù)這句話便可得知 ? 這個(gè)命題是不可證的. ?如此套娃,就是 ?哥德爾悖論的核心.
我們切回正題,對于剛剛的自復(fù)制程序,學(xué)過計(jì)算機(jī)的朋友可能知道,執(zhí)行這個(gè)程序的時(shí)候,并不是這個(gè)程序自己便能自動執(zhí)行,執(zhí)行的過程是在編譯好程序后由要操作系統(tǒng)來完成的,也就是說執(zhí)行器完全外在于程序本身. ? ?然而對于DNA來說,DNA不僅包含了自復(fù)制的"程序",同時(shí)也編碼了它自己的解釋器,從而能夠執(zhí)行自己的自復(fù)制"程序"
馮·諾伊曼的自復(fù)制自動機(jī)(當(dāng)然他給出了數(shù)學(xué)描述,沒有真正建造).也是與DNA一樣,既包含自我復(fù)制的程序,也包含解釋自身程序的機(jī)制,是完整的自我復(fù)制機(jī)器.比我所演示的自復(fù)制程序要復(fù)雜的多. ?馮·諾伊曼設(shè)計(jì)的自復(fù)制自動機(jī)是人工生命科學(xué)真正的先驅(qū)之一,從原則上證明了自我復(fù)制機(jī)器的確是可能的,而后來也證明了其于生物的自我復(fù)制機(jī)制驚人的相似.
而目前也有許多文章描述了自復(fù)制納米機(jī)器人的可能性.當(dāng)然,也還都沒有應(yīng)驗(yàn). ?不過<復(fù)雜>此書寫于多年以前,我在寫文稿的時(shí)候查詢的一些資料,好像已經(jīng)有一些能夠進(jìn)行自復(fù)制的人造生命體了,感興趣的話大家可以自行查詢.