第一篇:人工智能大作業解讀
實現遺傳算法的0-1背包問題求解
目錄
摘要.........................................................................................................2 一.問題描述..........................................................................................2 二.遺傳算法特點介紹...........................................................................2 三.使用基本遺傳算法解決0-1背包問題..............................................3 四.基本遺傳算法解決0-1背包問題存在的不足...................................4 五.改進的遺傳算法解決0-1背包問題..................................................6 六.心得體會..........................................................................................9 七.參考文獻.........................................................................................10 八.程序代碼.........................................................................................10
摘要:研究了遺傳算法解決0-1背包問題中的幾個問題:
1)
對于過程中不滿足重量限制條件的個體的處理,通過代換上代最優解保持種群的進化性 2)對于交換率和變異率的理解和處理方法,采用逐個體和逐位判斷的處理方法
3)對于早熟性問題,引入相似度衡量值并通過重新生成個體替換最差個體方式保持種群多樣性。4)一種最優解只向更好進化方法的嘗試。
通過實際計算比較表明,本文改進遺傳算法在背包問題求解中具有很好的收斂性、穩定性和計算效率。通過實例計算,表明本文改進遺傳算法優于簡單遺傳算法和普通改進的遺傳算法。關鍵詞:遺傳算法;背包問題 ;優化
一、問題描述
0-1背包問題屬于組合優化問題的一個例子,求解0-1背包問題的過程可以被視作在很多可行解當中求解一個最優解。01背包問題的一般描述如下:
給定n個物品和一個背包,物品i的重量為Wi,其價值為Vi,背包的容量為C。選擇合適的物品裝入背包,使得背包中裝入的物品的總價值最大。注意的一點是,背包內的物品的重量之和不能大于背包的容量C。在選擇裝入背包的物品時,對每種物品i只有兩種選擇:裝入背包或者不裝入背包,即只能將物品i裝入背包一次。稱此類問題為0/1背包問題。其數學模型為:
0-1背包問題傳統的解決方法有動態規劃法、分支界限法、回溯法等等。傳統的方法不能有效地解決0-1背包問題。遺傳算法(Genetic Algorithms)則是一種適合于在大量的可行解中搜索最優(或次優)解的有效算法。
二、遺傳算法特點介紹:
遺傳算法(Genetic Algorithm, GA)是1962年Holland教授首次提出了GA算法的思想是近年來隨著信息數據量激增,發展起來的一種嶄新的全局優化算法,它借用了生物遺傳學的觀點,通過自然選擇、遺傳、變異等作用機制,實現各個個體的適應性的提高。基本遺傳算法求解步驟:
Step 1 參數設置:在論域空間U上定義一個適應度函數f(x),給定種群規模N,交叉率Pc和變異率Pm,代數T;
Step 2 初始種群:隨機產生U中的N個染色體s1, s2, …, sN,組成初始種群S={s1, s2, …, sN},置代數計數器t=1;
Step 3 計算適應度:S中每個染色體的適應度f();
Step 4 判斷:若終止條件滿足,則取S中適應度最大的染色體作為所求結果,算法結束。Step 5 選擇-復制:按選擇概率P(xi)所決定的選中機會,每次從S中隨機選定1個染色體并將其復制,共做N次,然后將復制所得的N個染色體組成群體S1;
Step 6 交叉:按交叉率Pc所決定的參加交叉的染色體數c,從S1中隨機確定c個染色體,配對進行交叉操作,并用產生的新染色體代替原染色體,得群體S2;
Step 7 變異:按變異率Pm所決定的變異次數m,從S2中隨機確定m個染色體,分別進行變異操作,并用產生的新染色體代替原染色體,得群體S3;
Step 8 更新:將群體S3作為新一代種群,即用S3代替S,t=t+1,轉步3;
遺傳算法是一種仿生算法, 即模擬生命演化的算法,它從一個代表問題初始解的初始種群出發, 不斷重復執行選擇, 雜交和變異的過程, 使種群進化越來越接近某一目標既最優解,如果視種群為超空間的一組點, 選擇、雜交和變異的過程即是在超空間中進行點集之間的某種變換, 通過信息交換使種群不斷變化,遺傳算法通過模擬達爾文“優勝劣汰, 適者生存”的原理激勵好的結構, 同時尋找更好的結構, 作為一種隨機的優化與搜索方法, 遺傳算法有著其鮮明的特點。
—遺傳算法一般是直接在解空間搜索, 而不像圖搜索那樣一般是在問題空間搜索, 最后才找到解(如果搜索成功的話)。
—遺傳算法的搜索隨機地始于搜索空間的一個點集, 而不像圖搜索那樣固定地始于搜索空間的初始節點或終止節點, 所以遺傳算法是一種隨機搜索算法。
—遺傳算法總是在尋找優解(最優解或次優解), 而不像圖搜索那樣并非總是要求優解, 而一般是設法盡快找到解(當然包括優解), 所以遺傳算法又是一種優化搜索算法。
—遺傳算法的搜索過程是從空間的一個點集(種群)到另一個點集(種群)的搜索,而不像圖搜索那樣一般是從空間的一個點到另一個點地搜索。因而它實際是一種并行搜索, 適合大規模并行計算, 而且這種種群到種群的搜索有能力跳出局部最優解。
—遺傳算法的適應性強, 除需知適應度函數外, 幾乎不需要其他的先驗知識。
—遺傳算法長于全局搜索, 它不受搜索空間的限制性假設的約束,不要求連續性, 能以很大的概率從離散的、多極值的、含有噪聲的高維問題中找到全局最優解。
三、使用基本遺傳算法解決0-1背包問題:
1: 打開數據文件
2: 設置程序運行主界面 3: 調用初始化種群模塊
3-1: 按照一定的種群規模和染色體長度以基因為單位用隨機產生的0-1對個體賦值 3-2: 調用計算適應度函數
4: 以最大進化代數為循環終止條件開始進行循環 4-1: 調用產生新一代個體的函數 4-1-1: 調用選擇函數 4-1-2: 調用交叉函數 4-1-3: 調用變異函數
4-1-4: 調用計算適應度函數
5: 調用計算新一代種群統計數據函數 6: 調用輸出新一代統計數據函數 7: 返回到第四步, 直至循環結束
四、基本遺傳算法解決0-1背包問題存在的不足:
1.對于過程中不滿足重量限制條件的個體的處理
在用基本遺傳算法解決0-1背包問題的時候,在初始化或者交叉變異后可能會產生不滿足重量約束條件的偽解,而對于這些偽解,基本遺傳算法沒有給出一個很好的處理方法,而只是又隨機生成了一個滿足約束條件的解作為新的個體從而替換掉原來的個體。根據遺傳算
法的根本思想“優勝劣汰,適者生存”的原則,可以將不滿足條件的個體用已有的最優個體來進行替換,這樣,既使得種群中所有的個體均滿足重量的約束條件,又保留了較優解,符合遺傳算法的思想。具體做法為:
在程序中加入一個變量保存每代的最優解,當前代在進行選擇、復制、交叉、變異后如果有不滿足約束條件的個體,則在種群更新時采用這個最優值作為替代。
具體做法為:在每代遺傳后通過函數FindBestandWorstIndividual()找到當前最優值并保存bestindividual中,在計算適應度函數CalculateFitnessValue()中加入:
if(w>KW)X[i]=bestindividual;
//如果不是解,找最好的一個解代之
其中w為當前個體的總重量,KW為背包最大承重量,X[i]表示種群中第i個個體,bestindividual為保存的個體最優解。
2.對于交換率和變異率的理解和處理方法
根據遺傳算法的基本步驟的交叉和變異操作
Step 6 交叉:按交叉率Pc所決定的參加交叉的染色體數c,從S1中隨機確定c個染色體,配對進行交叉操作,并用產生的新染色體代替原染色體,得群體S2;
Step 7 變異:按變異率Pm所決定的變異次數m,從S2中隨機確定m個染色體,分別進行變異操作,并用產生的 新染色體代替原染色體,得群體S3; 可以有兩種處理方法:
其一,采用先確定數目在隨機選取的方法,步驟如下:
對于交叉操作: 對于變異操作:
1,根據交叉率確定應該交叉的個體數目1,根據變異率確定應該變異的染色體數n 目n 2,在種群中進行n次循環 2,在種群中進行n次循環 2-1隨機選中種群中的一個個體a 2-1隨機選中種群中的一個個體的染2-2隨機選中種群中異于a的一個個色體a 體b
2-2隨機選中染色體a的某位基因
2-3隨機確定交叉位數 2-4進行交叉
2-3對進行0-1互換變異
其二,采用對每個操作單元分別進行特定概率下處理的方法,步驟如下:
對于交叉操作:
1,在種群中進行S次循環,其中S代表種群中個體的數量
2,對于每一個個體X[i](X為種群數組)做如下操作
2-1生成隨機數p[0,1],判斷p與的大小關系 2-2如果p說明X[i]需要交換
對于變異操作:
1,在種群中進行S次循環,其中S代表種群中個體的數量
2,對每一個個體X[i]做N次循環,其中N為染色體位數
2-1對染色體的每一位
3-1生成隨機數q[0,1],判斷q與 的大小關系
說明需要進行0-1互換說明不需要變
2-2-1 隨機在種群中找到異于X[i]的另一個體進行交換 2-3如果p 說明X[i]不需要交換
3-2如果q
變異2-3如果q分析這兩種處理方法可知:方法一沒有很好地體現隨機機會均等的思想,因為在步驟1中確
定的需要操作的數目n后,總體上是保證了交叉或者變異的數目,但不是對于每一個個體而言的,因而會出現有的個體被選擇交叉或者變異多次而有的沒有機會交叉或者變異的情況,而如果采用方法二,就體現了機會的均等性,即要求對每一個單元操作目標進行概率的驗證,以確定是否變異或者交叉。在程序中具體的實現方法體現在交叉和變異函數中:
void CrossoverOperator(void)//交叉操作 for(i=0;i
q=rand()%S;}while(p==q);
int w=1+rand()%N;//[1,N]交換的位數
double p=(rand()%1001)/1000.0;if(p<=Pc)
for(j=0;j void MutationOperator(void)//變異操作 for(i=0;i for(j=0;j q=(rand()%1001)/1000.0;//產生q[0,1] if(q if(X[i].chromsome[j]==1)X[i].chromsome[j]=0;else X[i].chromsome[j]=1;1.對于算法早熟性的分析及解決方法 遺傳算法中種群中的個體由初始化時的具有多樣性,可能會由于在進化過程中一些超常個體限制其它個體的進化——這個個體的適應度大大優于種群內的其它值,由于適者生存原則這個個體被不斷復制從而充滿了整個種群,使得種群的多樣應大大降低,進化停滯,從而出現算法收斂于局部最優解的現象,稱為早熟現象。早熟現象的可能解法: 1)通過提高變異率來增加種群的多樣性,以期更優解的出現,這也是最簡單基本遺傳算法中不添加相關操作的情況下唯一的一種方法,然而這種方法有明顯的弊端:在提高變異率獲得多樣性種群的同時,個體變異的機會增加,使得較優解發生變異,從而遺傳算法喪失了其優于其它算法的優越性,所以這種方法不是很好地解決方法。2)引入多樣性衡量和處理 基本思路:在出現進化停滯現象時要引入新的個體來增強種群的多樣性。做法:1,判斷是否達到早熟現象 對于種群中S個個體,判斷等位基因的相等程度,即引入一個參數值same,如果same達到一定的 理論值大小就可以認為達到了早熟現象。 2,早熟現象的處理,即引入新的個體。 處理過程中應該不違反適者生存的原則,所以應該保留較好的個體,所以首先選中適應度最小的 個體執行刪除操作,然后隨機生成一個新的符合重量限制且打破早熟現象的新個體。 具體實現見函數:void checkalike(void) //相似度校驗 for(i=0;i for(j=0;j if(temp!=X[k].chromsome[j]) break;if(j==N)same++;if(same>N*0.5)//大于50%作為判定為早熟 //確定最小 int minindex=0;for(intn=0;n if(X[n].fitness bool m=(rand()%10<5)?0:1;X[minindex].chromsome[j]=m;X[minindex].weight+=m*weight[j];//個體的總重量 X[minindex].fitness+=m*value[j]; //個體的總價值 2.一種最優解只向更好進化方法的嘗試 基本思路為:每一組的最優解是一個獨特的個體,我們求解的問題最終的最優解或者近似解都產生于這個特殊的個體,最優解只向更好進化方法中規定:每代中選出一個最優解并做好相應的記錄或者標記,最優解參與交叉和變異,只是在交叉或者變異時對最優解進行前后適應度的比較,如果發現交叉或者變異后適應度大于操作前適應度,則保存操作后的結果,如果發現交叉或者變異后適應度小于操作前適應度,則禁止最優解的操作,而不禁止與最優解進行交叉的個體的變化。這樣,每一代中的最優解的特性可以通過交叉傳遞給同代中的其它個體,而保證種群一定會向更好的方向進化。做法在交叉后和變異后調用以下函數判斷: int comp(individual bestindividual,individual temp)//比較函數 { } int fit=0,w=0;//第一種不變:操作后不滿足重量函數,第二種:操作后適應度小于操作前 for(int i=0;i 五、改進的遺傳算法解決0-1背包問題: 1、參數設置: #define S 500 #define Pc 0.8 #define Pm 0.01 #define KW 878 #define N #define T 1000 //種群的規模 //交叉概率 //突變概率 //背包最大載重 //物體總數 //最大換代數 2個體的表示和染色體編碼 用變量i代表物件, i = 1, 2, ,n 定義變量xi,其含義為: xi= 1表示:第i個物件被選入背包, xi = 0表示第i個物件沒有被選入背包。考慮n 個物件的選擇與否, 就可以得到一個長度為n的0, 1序列。由此可見遺傳算法應用于上述背包問題時,采用簡單二進制編碼較為適宜1 每一組編碼即為某一個個體的基因表示, 稱其為染色體, 染色體長度取決于待分配的物件的個數n.在編碼形式的表示方法中,形如二進制編碼 10010101 表示為一個待分配的物件的個數為8(編碼長度)的一個背包問題的一個解, 則該個體對應于選擇了物件1, 4, 6, 8,即第1, 4, 6, 8個物品被放入了背包。用數據格式表示為: struct individual { bool chromsome[N];double fitness; double weight;}; //個體結構體 //染色體編碼 //適應度//即本問題中的個體所得價值 //總重量 2產生初始種群 n個待分配的物件隨機產生S個長度為n的二進制串, 即種群中個體的染色體編碼的每一位按等概率在0與1中選擇S 指的是種群規模, 即種群中的個體數目.void GenerateInitialPopulation(void);//初始種群 3適應度函數 背包內物件的總重量為a1x1 + a2x2 + ,anxn, 物件的總價值為c1x1 + c2x2 + , + cn xn 0-1背包問題中采用每個個體的總價值作為適應度,在滿足背包容量的條件下,價值越大,適應度越高。所以適應度求解方法為: f i = c1x1 + c2x2 + , + cnxn(當t a1x1 + a2x 2 + , + anxn < = c,xj = 0, 1)考慮到會有不不滿足容量條件的個體則: f i = 0(當a1x1 + a2x2 + , + anxn > c,xj = 0, 1) 上述適應度函數基于一個考慮違背約束條件的懲罰處理,根據上述具體問題適應度函數值不可能為零, 所以當隨機產生的某個個體違背約束條件時, 通過把其適應度函數值罰為0而達到淘汰該個體的目的。4選擇-復制操作 參照適應度函數值和約束條件用賭輪選擇法進行模擬,具體為: (1)根據適應度函數值和約束條件, 罰掉部分個體(前述不滿足容量條件的個體) (2)對于滿足約束條件的個體, 根據適應度函數值計算個體被選中的概率,稱為選擇概率: 公式為: P = p()稱為染色體xi(i=1, 2, …, n)的選擇概率 (3)根據輪盤賭累計公式為: iq?P(xj) i ? j?1 稱為染色體xi(i=1, 2, …, n)的積累概率 (4)對已得到的累計概率作如下處理,完成選擇操作: 1)在[0, 1]區間內產生一個均勻分布的偽隨機數r。2)若r≤q1,則染色體x1被選中。 3)若qk-1 (1)隨機產生一個交叉點的位置 (2)隨機選取當前代中的兩個個體作為父個體 (3)根據交叉點的位置, 做單點交叉 6變異操作: 根據變異率Pm (1)隨機產生變異點的位置 (2)在變異點位置作0-1翻轉 8、算法終止 程序中定義了一個最優值,stop= 一般情況下這個最優值達不到,一旦程序在執行過程中達到此最優值,也就沒有必要在執行下去,因為這必定是最好的解,所以保存最優值和最優解,結束。 如果程序的最優值達不到理想情況下的stop,那么根據最大換代次數來結束程序,在結束后的種群中找到一個最好的解作為本問題的最優解,程序結束。 4算例 1.小規模問題的算例: 算例1-1:設定物品價值value={50,30,60,80,20}重量weight{35,40,40,20,15}背包的最大承重量為100 遺傳算法中參數:群體大小S=5,交叉率Pc=0.8,變異率Pm=0.05,最大換代次數T=20, 通過多次試驗比較本文改進后遺傳算法和其他得到結果如下表所示: 本文改進的遺傳算法: 實驗總次數:30 達到全局最優解次數:27 未達到全局最優解:3 由實驗結果可知在小規模算例中,本文改進的遺傳算法優于前兩者。2.較大規模問題求解算例: 遺傳算法中參數: 群體大小S=5,交叉率Pc=0.8,變異率Pm=0.05,最大換代次數T=800,相似度取5% 實例1: 價值value:{ 92,4,43,83,84,68,92,82,6,44,32,18,56,83,25,96,70,48,14,58} 重量weight:{ {44,46,90,72,91,40,75,35,8,54,78,40,77,15,61,17,75,29,75,63}} 背包的最大承重量:878 實例2: 價值value: {220,208,198,192,180,180,165,162,160,158,155,130,125,122,120,118,115,110,105,101,100,100,98,96,95,90,88, 82,80,77,75,73,72,70,69,66,65,63,60,58,56,50,30,20,15,10,8,5,3,1}; 重量weight: {80,82,85,70,72,70,66,50,55,25,50,55,40,48,50,32,22,60,30,32,40,38,35,32,25,28,30,22,25,30,45,30,60,50,20,65, 20,25,30,10,20,25,15,10,10,10,4,4,2,1}; 背包最大承重量:1000 本文改進遺傳算法實驗結果: 實例1: 實例2: 由此得出結論:遺傳算法優于前兩種。 六.心得體會: 遺傳算法是一種模擬生物進化在解中求解最優值的方法,實現起來方便,適于處理大宗數據,然而基于簡單基本遺傳算法在求解不同問題時應該具體問題具體分析,找的結合所解問題的優化方法,例如本文分析的遺傳算法解決0-1背包問題,雖然簡單基本遺傳算法可以求出一個比較好的解出來,但是分析可知,結果并不令人滿意,在對問題進行細致的分析、查閱相關資料和深入思考后,我提出了自己認為比較好的改進方法并通過實踐結合具體的算例把改進后的遺傳算法和與原來的簡單遺傳算法和參考文獻中的一種改進方法進行了比較,結果顯示本文改進的遺傳算法無論在小規模數據處理還是較大規模數據處理方面均優于前兩者,這一點很令人高興。通過本次實踐,我也深刻體會到對于算法分析和改進的重要性,往往一個算法經過認真地分析和合理的改進后會獲得性能上的提高時間復雜度或者空間復雜度的降低,而且能夠獲得更好的解。 七.參考文獻: 《用基本遺傳算法解決0-1背包問題》 八.程序實現: 已通過vc6.0編譯后運行 #include //種群的規模 #define N //物體總數 #define Pc 0.8 //交叉概率 #define Pm 0.05 //突變概率 #define KW //背包最大載重 #define T //最大換代數 #define ALIKE 0.05 //判定相似度 int stop=0; //初始化函數中初始化為所有價值之和 int t=0; //目前的代數 int weight[]={35,40,40,20,15}; //物體重量 int value[]={50,30,60,80,20}; //物體價值 /*實例1*********************************************************************** #define S //種群的規模 #define N //物體總數 #define Pc 0.8 //交叉概率 #define Pm 0.05 //突變概率 #define KW 878 //背包最大載重 #define T 800 //最大換代數 #define ALIKE 0.05 //判定相似度 int stop=0; //初始化函數中初始化為所有價值之和 int t=0; //目前的代數 int weight[]={44,46,90,72,91,40,75,35,8,54,78,40,77,15,61,17,75,29,75,63};//物體重量 int value[]={92,4,43,83,84,68,92,82,6,44,32,18,56,83,25,96,70,48,14,58};//物體價值 /*實例2*********************************************************************** #define S //種群的規模 #define Pc 0.8 //交叉概率 #define Pm 0.05 //突變概率 #define KW 1000 //背包最大載重1000 #define N //物體總數 #define T 800 //最大換代數 #define ALIKE 0.05 //判定相似度 int stop=0; //初始化函數中初始化為所有價值之和 int t=0; //目前的代數 int vaue[]={ 220,208,198,192,180,180,165,162,160,158,155,130,125,122,120,118,115,110,105,101,100,100,98,96,95,90,88,82,80,77,75,73,72,70,69,66,65,63,60,58,56,50,30,20,15,10,8,5,3,1};int weight[]={ 80,82,85,70,72,70,66,50,55,25,50,55,40,48,50,32,22,60,30,32,40,38,35,32,25,28,30,22,25,30,45,30,60,50,20,65,20,25,30,10,20,25,15,10,10,10,4,4,2,1};/*實例3***********************************************************************/ #define S //種群的規模 #define Pc 0.8 //交叉概率 #define Pm 0.05 //突變概率 #define KW 6718 //背包最大載重1000 #define N //物體總數 #define T 800 //最大換代數 #define ALIKE 0.05 //判定相似度 int stop=0; //初始化函數中初始化為所有價值之和 int t=0; //目前的代數 int vaue[]={ 597,596,593,586,581,568,567,560,549,548,547,529,529,527,520,491,482,478,475,475,466,462,459,458,454,451,449,443,442,421,410,409,395,394,390,377,375,366,361,347,334,322,315,313,311,309,296,295,294,289,285,279,277,276,272,248,246,245,238,237,232,231,230,225,192,184,183,176,171,169,165,165,154,153,150,149,147,143,140,138,134,132,127,124,123,114,111,104,89,74,63,62,58,55,48,27,22,12,6,250};Int weight[]={ 54,183,106,82,30,58,71,166,117,190,90,191,205,128,110,89,63,6,140,86,30,91,156,31,70,199,142,98,178,16,140,31,24,197,101,73,16,73,2,159,71,102,144,151,27,131,209,164,177,177,129,146,17,53,64,146,43,170,180,171,130,183,5,113,207,57,13,163,20,63,12,24,9,42,6,109,170,108,46,69,43,175,81,5,34,146,148,114,160,174,156,82,47,126,102,83,58,34,21,14};/************************************************************************/ struct individual { //個體結構體 bool chromsome[N];//染色體編碼 double fitness; //適應度//即本問題中的個體所得價值 double weight; //總重量 };int best=0;int same=0;individual X[S],Y[S],bestindividual;// /************************************************************************/ int comp(individual bestindividual,individual temp);//比較函數 void checkalike(void); //檢查相似度函數 void GenerateInitialPopulation(void); //初始種群 void CalculateFitnessValue(void); //適應度 void SelectionOperator(void); //選擇 void CrossoverOperator(void); //交叉 void MutationOperator(void); //變異 void FindBestandWorstIndividual(void); //尋找最優解 void srand(unsigned int seed); //隨機生成 /************************************************************************/ int comp(individual bestindividual,individual temp)//比較函數 { int fit=0,w=0;//第一種不變:操作后不滿足重量函數,第二種:操作后適應度小于操作前 for(int i=0;i void Checkalike(void){ int i=0,j=0; for(i=0;i if(temp!=X[k].chromsome[j]) break;} } if(j==N)same++;} if(same>N*ALIKE)//大于ALIKE作為判定為早熟 { int minindex=0;for(int n=0;n if(X[n].fitness X[minindex].weight+=m*weight[j];//個體的總重量 X[minindex].fitness+=m*value[j];//個體的總價值 } } } /************************************************************************/ void GenerateInitialPopulation(void)//初始種群,保證每個值都在符合條件的解 { int i=0,j=0;bool k; for(i=0;i k=(rand()%10<5)?0:1; X[i].chromsome[j]=k; w+=k*weight[j];//個體的總重量 v+=k*value[j];//個體的總價值 } if(w>KW)i--; //如果不是解,重新生成else { X[i].fitness=v;X[i].weight=w; if(v==stop){bestindividual=X[i];return;}//這種情況一般不會發生 } } } /************************************************************************/ void CalculateFitnessValue(){ int i=0,j=0; for(i=0;i int w=0,v=0; for(j=0;j { w+=X[i].chromsome[j]*weight[j];//個體的總重量 v+=X[i].chromsome[j]*value[j];//個體的總價值 } X[i].fitness=v; X[i].weight=w; if(v==stop){bestindividual=X[i];return;}//符合條件情況下最優解這種情況一般不會發生 if(w>KW)X[i]=bestindividual; //如果不是解,找最好的一個解代之 } } /************************************************************************/ void SelectionOperator(void){ int i, index;double p, sum=0.0;double cfitness[S];//選擇、累積概率 individual newX[S];for(i=0;i for(i=0;i for(i=1;i for(i=0;i p=(rand()%1001)/1000.0;//產生一個[0,1]之間的隨機數 index=0; while(p>cfitness[index])//輪盤賭進行選擇 { index++; } newX[i]=X[index];} for(i=0;i void CrossoverOperator(void)//交叉操作 { int i=0, j=0,k=0;individual temp; for(i=0;i int p=0,q=0; do { p=rand()%S;//產生兩個[0,S]的隨機數 q=rand()%S; }while(p==q); int w=1+rand()%N;//[1,N]表示交換的位數 double r=(rand()%1001)/1000.0;//[0,1] if(r<=Pc) { for(j=0;j { temp.chromsome[j]=X[p].chromsome[j];//將要交換的位先放入臨時空間 X[p].chromsome[j]=X[q].chromsome[j]; X[q].chromsome[j]=temp.chromsome[j]; } } if(p==best) if(-1==comp(bestindividual,X[p]))//如果變異后適應度變小 X[p]=bestindividual; if(q==best) if(-1==comp(bestindividual,X[q]))//如果變異后適應度變小 X[q]=bestindividual;} } /************************************************************************/ void MutationOperator(void){ int i=0, j=0,k=0,q=0;double p=0;for(i=0;i { for(j=0;j { p=(rand()%1001)/1000.0; if(p { if(X[i].chromsome[j]==1)X[i].chromsome[j]=0; else X[i].chromsome[j]=1; } } if(i==best) if(-1==comp(bestindividual,X[i]))//如果變異后適應度變小 X[i]=bestindividual;} } /************************************************************************/ void FindBestandWorstIndividual(void){ int i;bestindividual=X[0];for(i=1;i if(X[i].fitness>bestindividual.fitness) { bestindividual=X[i]; best=i; } } } /*主函數*****************************************************************/ void main(void){ srand((unsigned)time(0)); t=0; GenerateInitialPopulation();//初始群體包括產生個體和計算個體的初始值 while(t<=T) { FindBestandWorstIndividual();//保存當前最優解 SelectionOperator(); //選擇 CrossoverOperator(); //交叉 MutationOperator(); //變異 Checkalike(); //檢查相似度 CalculateFitnessValue();//計算新種群適應度 t++; } FindBestandWorstIndividual(); //找到最優解 cout< < for(int k=0;k cout< 讀書的好處 1、行萬里路,讀萬卷書。 2、書山有路勤為徑,學海無涯苦作舟。 3、讀書破萬卷,下筆如有神。 4、我所學到的任何有價值的知識都是由自學中得來的。——達爾文 5、少壯不努力,老大徒悲傷。 6、黑發不知勤學早,白首方悔讀書遲。——顏真卿 7、寶劍鋒從磨礪出,梅花香自苦寒來。 8、讀書要三到:心到、眼到、口到 9、玉不琢、不成器,人不學、不知義。 10、一日無書,百事荒廢。——陳壽 11、書是人類進步的階梯。 12、一日不讀口生,一日不寫手生。 13、我撲在書上,就像饑餓的人撲在面包上。——高爾基 14、書到用時方恨少、事非經過不知難。——陸游 15、讀一本好書,就如同和一個高尚的人在交談——歌德 16、讀一切好書,就是和許多高尚的人談話。——笛卡兒 17、學習永遠不晚。——高爾基 18、少而好學,如日出之陽;壯而好學,如日中之光;志而好學,如炳燭之光。——劉向 19、學而不思則惘,思而不學則殆。——孔子 20、讀書給人以快樂、給人以光彩、給人以才干。——培根 人工智能學科誕生于20世紀50年代中期,當時由于計算機的產生與發展,人們開始了具有真正意義的人工智能的研究。(雖然計算機為AI提供了必要的技術基礎,但直到50年代早期人們才注意到人類智能與機器之間的聯系.Norbert Wiener是最早研究反饋理論的美國人之一.最熟悉的反饋控制的例子是自動調溫器.它將收集到的房間溫度與希望的溫度比較,并做出反應將加熱器開大或關小,從而控制環境溫度.這項對反饋 回路的研究重要性在于: Wiener從理論上指出,所有的智能活動都是反饋機制的結果.而反饋機制是有可 能用機器模擬的.這項發現對早期AI的發展影響很大。) 1956年夏,美國達特莫斯大學助教麥卡錫、哈佛大學明斯基、貝爾實驗室申龍、IBM公司信息研究中心羅徹斯特、卡內基——梅隆大學紐厄爾和赫伯特.西蒙、麻省理工學院塞夫里奇和索羅門夫,以及IBM公司塞繆爾和莫爾在美國達特莫斯大學舉行了以此為其兩個月的學術討論會,從不同學科的角度探討人類各種學習和其他職能特征的基礎,并研究如何在遠離上進行精確的描述,探討用機器模擬人類智能等問題,并首次提出了人工智能的術語。從此,人工智能這門新興的學科誕生了。這些青年的研究專業包括數學、心理學、神經生理學、信息論和電腦科學,分別從不同角度共同探討人工智能的可能性。他們的名字人們并不陌生,例如申龍是《信息論》的創始人,塞繆爾編寫了第一個電腦跳棋程序,麥卡錫、明斯基、紐厄爾和西蒙都是“圖靈獎”的獲獎者。 這次會議之后,在美國很快形成了3個從事人工智能研究的中心,即以西蒙和紐威爾為首的卡內基—梅隆大學研究組,以麥卡錫、明斯基為首的麻省理工學院研究組,以塞繆爾為首的IBM公司研究組。隨后,這幾個研究組相繼在思維模型、數理邏輯和啟發式程序方面取得了一批顯著的成果: (1)1956年,紐威爾和西蒙研制了一個“邏輯理論家“(簡稱LT)程序,它將每個問題都表示成一個樹形模型,然后選擇最可能得到正確結論的那一枝來求解問題,證明了懷特黑德與羅素的數學名著《數學原理》的第2章中52個定理中的38個定理。1963年對程序進行了修改,證明了全部定理。這一工作受到了人們的高度評價,被認為是計算機模擬人的高級思維活動的一個重大成果,是人工智能的真正開端。 (2)1956年,塞繆爾利用對策論和啟發式搜索技術編制出西洋跳棋程序Checkers。該程序具有自學習和自適應能力,能在下棋過程中不斷積累所獲得的經驗,并能根據對方的走步,從許多可能的步數中選出一個較好的走法。這是模擬人類學習過程第一次卓有成效的探索。這臺機器不僅在1959年擊敗了塞繆爾本人,而且在1962年擊敗了美國一個州的跳棋冠軍,在世界上引起了大轟動。這是人工智能的一個重大突破。 (3)1958年,麥卡錫研制出表處理程序設計語言LISP,它不僅可以處理數據,而且可以方便的處理各種符號,成為了人工智能程序語言的重要里程碑。目前,LISP語言仍然是研究人工智能何開發智能系統的重要工具。 (4)1960年紐威爾、肖和西蒙等人通過心理學實驗,發現人在解題時的思維過程大致可以分為3個階段:1。首先想出大致的解題計劃;2。根據記憶中的公理、定理和解題規劃、按計劃實施解題過程;3.在實施解題過程中,不斷進行方法和目標分析,修改計劃。這是一個具有普遍意義的思維活動過程,其中主要是方法和目的的分析。(也就是人們在求解數學問題通常使用試湊的辦法進行的試湊是不一定列出所有的可能性,而是用邏輯推理來迅速縮小搜索范圍的辦法進行的),基于這一發現,他們研制了“通用問題求解程序GPS”,用它來解決不定積分、三角函數、代數方程等11種不同類型的問題,并首次提出啟發式搜索概念,從而使啟發式程序具有較普遍的意義。 (5)1961年,明斯基發表了一篇名為《邁向人工智能的步驟》的論文,對當時人工智能的研究起了推動作用。 正是由于人工智能在20世紀50年代到60年代的迅速發展和取得的一系列的研究成果,使科學家們歡欣鼓舞,并對這一領域給予了過高的希望。紐威爾和西蒙在1958年曾作出以下預言: ①不出十年,計算機將成為世界象棋冠軍,除非規定不讓它參加比賽; ②.不出十年,計算機將發現并證明那時還沒有被證明的數學定理; ③.不出十年,計算機將譜寫出具有較高美學價值并得到評論家認可的樂曲; ④不出十年,大多數心理學家的理論將采用計算機程序來形成。 非常遺憾的是,到目前為止,這樣的預言還沒有一個得到完全的實現,人工智能的研究狀況比紐威爾和西蒙等科學家的設想要復雜和艱難的多。事實上,到了20世紀70年代初,人工智能在經歷一段比較快速的發展時期后,很快就遇到了許多問題。這些問題主要表現在: (1)1965年魯賓遜發明了歸結(消解)原理,曾被認為是一個重大的突破,可是很快這種歸結法能力有限,證明兩個連續函數之和還是連續函數,推證了十萬步竟還沒有得證。 (2)塞繆爾的下棋程序,贏得了周冠軍后,沒能贏全國冠軍。 (3)機器翻譯出了荒謬的結論。如從英語→俄語→英語的翻譯中,又一句話:“The spirit is willing but the flesh is weak”(心有余而力不足),結果變成了”The wine is good but the meat is spoiled”(酒是好的,肉變質了),鬧出了笑話。 (4)大腦約有10的15次方以上的記憶容量,此容量相當于存放幾億本書的容量,現有的技術條件下在機器的結構上模擬人腦是不大可能的。 (5)來自心理學、神經生理學、應用數學、哲學等各界的科學家們對人工智能的本質、基本原理、方法及機理等方面產生了質疑和批評。 由于人工智能研究遇到了困難,使得人工智能在20世紀70年代初走向低落。但是,人工智能的科學家沒有被一時的困難所嚇倒,他們在認真總結經驗教訓的基礎上,努力探索使人工智能走出實驗室,走向實用化的新路子,并取得了令人鼓舞的進展。特別是專家系統的出現,實現了人工智能從理論研究走向實際應用,從一般思維規律探索走向專門知識應用的重大突破,是人工智能發展史上的重大轉折,將人工智能的研究推向了新高潮。下面是幾個又代表性的專家系統: (1)1968年斯坦福大學費根鮑姆教授和幾位遺傳學家及物理學家合作研制了一個化學質譜分析系統(DENDARL),該系統能根據質譜儀的數據和核磁諧振的數據,以及有關化學知識推斷有機化合物的分子結構,達到了幫助化學家推斷分子結構的作用。這是第一個專家系統,標志著人工之能從實驗室走了出來,開始進入實際應用時代。 (2)繼DENDARAL系統之后,費根鮑姆領導的研究小組又研制了診斷和治療細菌感染性血液病的專家咨詢系統MYCIN。經專家小組對醫學專家、實習醫師以及MYCIN行為進行正式測試評價,認為MYCIN的行為超過了其他所有人,尤其在診斷和治療菌血癥和腦膜炎方面,顯示了該系統作為臨床醫生實際助手的前途。從技術的角度來看,該系統的特點是:1。使用了經驗性知識,用可信度表示,進行不精確推理。2.對推理結果具有解釋功能,時系統是透明的。3.第一次使用了知識庫的概念。正是由于MYCIN基本解決了知識表示、知識獲取、搜索策略、不精確推理以及專家系統的基本結構等重大問題(是怎樣解決的呢?),對以后的專家系統產生了很大的影響。 (3)1976年,斯坦福大學國際人工智能中心的杜達等人開始研制礦藏勘探專家系統PROSPECTOR,它能幫助地質學家解釋地質礦藏數據,提供硬巖石礦物勘探方面的咨詢,包括勘探測評,區域資源估值,鉆井井位選擇等。該系統用語義網絡表示地質知識,擁有15中礦藏知識,采用貝葉斯概率推理處理不確定的數據和知識。PROSPECTOR系統于1981年開始投入實際使用,取得了巨大的經濟效益。例如1982年,美國利用該系統在華盛頓發現一處礦藏,據說實用價值可能超過1億美元。 (4)美國卡內基—梅隆大學于20世紀70年代先后研制了語音理解系統HEARSAY-I加入HEARSAY-II,它完成從輸入的聲音信號轉換成字,組成單詞,合成句子,形成數據庫查詢語句,再到情報數據庫中去查詢資料。該系統的特點是采用“黑板結構”這種新結構形式,能組合協調專家的知識,進行不同抽象級的問題求解。 在這一時期,人工智能在新方法、程序設計語言、知識表示、推理方法等方面也取得了重大進展。例如70年代許多新方法被用于AI開發,著名的如Minsky的構造理論.另外David Marr提出了機器視覺方面的新理論,例如,如何通過一副圖像的陰影,形狀,顏色,邊界和紋理等基本信息辨別圖像.通過分析這些信息,可以推斷出圖像可能是什么,法國馬賽大學的柯爾麥倫和他領導的研究小組于1972年研制成功的第一個PROLOG系統,成為了繼LISP語言之后的另一種重要的人工智能程序語言;明斯基1974年提出的框架理論;紹特里夫于1975年提出并在MYCIN中應用的不精確推理;杜達于1976年提出并在PROSPECTOR中應用的貝葉斯方法;等等 人工智能的科學家們從各種不同類型的專家系統和知識處理系統中抽取共性,總結出一般原理與技術,使人工智能又從實際應用逐漸回到一般研究。圍繞知識這一核心問題,人們重新對人工智能的原理和方法進行了探索,并在知識獲取、知識表示以及知識在推理過程中的利用等方面開始出現一組新的原理、工具和技術。1977年,在第五屆國際人工智能聯合會(IJCAI)的會議上,費根鮑姆教授在一篇題為《人工智能的藝術:知識工程課題及實例研究》的特約文章中,系統的闡述了專家系統的思想,并提出了知識工程(KnowledgeEngineering)的概念。費根鮑姆認為,知識工程是研究知識信息處理的學科,它應用人工智能的原理和方法,對那些需要專家知識才能解決的應用難題提供了求解的途徑。恰當的運用專家知識的獲取、表示、推理過程的構成與解釋,是設計基于知識的系統的重要技術問題。至此,圍繞著開發專家系統而開展的相關理論、方法、技術的研究形成了知識工程學科。知識工程的研究使人工智能的研究從理論轉向應用,從基于推理的模型轉向基于知識的模型。 為了適應人工智能和知識工程發展的需要,在政府的大力支持下,日本于1982年開始了為期10年的“第五代計算機的研制計劃”,即“知識信息處理計算機系統KIPS”,總共投資4.5億美元。它的目的是使邏輯推理達到數值運算那樣快。日本的這一計劃形成了一股熱潮,推動了世界各國的追趕浪潮。美國、英國、歐共體、蘇聯等都先后制訂了相應的發展計劃。隨著第五代計算機的研究開發和應用,人工智能進入一個興盛時期,人工智能界一派樂觀情緒。 然而,隨著專家系統應用的不斷深入,專家系統自身存在的知識獲取難、知識領域窄、推理能力弱、只能水平低、沒有分布式功能、實用性差等等問題逐步暴露出來。日本、美國、英國和歐洲所制訂對那些針對人工智能的大型計劃多數執行到20世紀80年代中期就開始面臨重重困難,已經看出達不到預想的目標。進一步分析便發現,這些困難不只是個別項目的制訂又問題,而是涉及人工智能研究的根本性問題。總的來講是兩個問題:一是所謂的交互(Interaction)問題,即傳統方法只能模擬人類深思熟慮的行為,而不包括人與環境的交互行為。另一個問題是擴展(Scaling up)問題,即所謂的大規模的問題,傳統人工智能方法只適合于建造領域狹窄的專家系統,不能把這種方法簡單的推廣到規模更大、領域更寬的復雜系統中去。這些計劃的失敗,對人工智能的發展是一個挫折。 盡管經歷了這些受挫的事件,AI仍在慢慢恢復發展.新的技術在日本被開發出來,如在美國首創的模糊邏輯,它可以從不確定的條件作出決策;還有神經網絡,被視為實現人工智能的可能途徑.1982年后,人工神經網絡像雨后春筍一樣迅速發展起來,給人們帶來了新的希望。人工神經網絡的主要特點是信息的分布存儲和信息處理的并行化,并具有自組織自學習能力,這使人們利用機器加工處理信息有了新的途徑和方法,解決了一些符號方法難以解決的問題,使人工智能的學術界興起了神經網絡的熱潮。1987年美國召開了第一次神經網絡國際會議,宣布新學科的誕生。1988年以后,日本和歐洲各國在神經網絡方面的投資逐步增加,促進了該領域的研究。但是隨著應用的深入,人們又發現人工神經元網絡模型和算法也存在問題。 20世紀80年代末,以美國麻省理工學院布魯克斯(R.A.Brooks)教授為代表的行為主義學派提出了“無須表示和推理”的智能,認為智能只在與環境的交互中表現出來,并認為研制可適應環境的“機器蟲”比空想智能機器人要好。以后,人工智能學術界充分認識到已有的人工智能方法僅限于在模擬人類智能活動中使用成功的經驗知識處理簡單的問題,開始在符號機理與神經網機理的結合及引入Agent系統等方面進一步開展研究工作。20世紀90年代,所謂的符號主義、連接主義和行動主義3種方法并存。對此,中國學者認為這3種方法各有優缺點,他們提出了綜合集成的方法,即不同的問題用不同的方法來解決,或用聯合(混合、融合)的方法來解決,再加上人工智能系統引入交互機制,系統的智能水平將會大為提高。 總而言之,盡管人工智能的發展經歷了曲折的過程,但它在自動推理、認知建模、機器學習、神經元網絡、自然語言處理、專家系統、智能機器人等方面的理論和應用上都取得了稱得上具有“智能”的成果。許多領域將知識和智能思想引入到自己的領域,使一些問題得以較好的解決。應該說,人工智能的成就是巨大的,影響是深遠的。 讀書的好處 1、行萬里路,讀萬卷書。 2、書山有路勤為徑,學海無涯苦作舟。 3、讀書破萬卷,下筆如有神。 4、我所學到的任何有價值的知識都是由自學中得來的。——達爾文 5、少壯不努力,老大徒悲傷。 6、黑發不知勤學早,白首方悔讀書遲。——顏真卿 7、寶劍鋒從磨礪出,梅花香自苦寒來。 8、讀書要三到:心到、眼到、口到 9、玉不琢、不成器,人不學、不知義。 10、一日無書,百事荒廢。——陳壽 11、書是人類進步的階梯。 12、一日不讀口生,一日不寫手生。 13、我撲在書上,就像饑餓的人撲在面包上。——高爾基 14、書到用時方恨少、事非經過不知難。——陸游 15、讀一本好書,就如同和一個高尚的人在交談——歌德 16、讀一切好書,就是和許多高尚的人談話。——笛卡兒 17、學習永遠不晚。——高爾基 18、少而好學,如日出之陽;壯而好學,如日中之光;志而好學,如炳燭之光。——劉向 19、學而不思則惘,思而不學則殆。——孔子 20、讀書給人以快樂、給人以光彩、給人以才干。——培根 人工智能結課論文 系別:計算機科學與技術系 班級:姓名:于靜學號: 13計算機專接本一班 知識處理 ***0 摘要:進入2l 世紀,計算機硬件和軟件更新的速度越來越快,計算機這個以往總給人以冷冰冰的機器的形象也得到了徹底的改變。人機交互的情形越來越普遍,計算機被人類賦予了越來越多的智能因素。伴隨著人類把最新的計算機技術應用于各個學科,對這些學科的認知也進入了日新月異的發展階段,促使大量的新的研究成果不斷涌現。例如:“人機大戰”中深藍計算機輕松的獲勝、人類基因組排序工作的基本完成、人類大腦結構性解密、單純器官性克隆的成功實現等等。隨著計算機這個人類有史以來最重要的工具的不斷發展,伴隨著不斷有新理論的出現,人類必須重新對它們進行分析和審視。知識處理是人工智能這一科學領域的關鍵問題。本文對知識處理的核心問題之——識的表示進行了全面的綜述目前流行的知識表達方式不下十種,在此只介紹一階謂詞邏輯、產生式、語義網絡、框架、混合等目前最常用的知識表示方法。并對其進行了優缺點分析及簡單對比。最后對知識表示的發展趨向作出了展望。 關鍵詞:知識 人工智能(AI) 知識表達式 一階謂詞邏輯 產生式 語義網絡 框架 一、知識和知識的表示 1、知識的概念 知識是人類世界特有的概念,他是人類對客觀世界的一種比較準確、全面的認識和理解的結晶。(1)知識只有相對正確的特性。常言道:實踐出真理。只是源于人們生活、學習與工作的實踐,知識是人們在信息社會中各種實踐經驗的匯集、智慧的概括與積累。只是愛源于人們對客觀世界運動規律的正確認識,是從感知認識上升成為理性認識的高級思維勞動過程的結晶,故相應于一定的客觀環境與條件下,只是無疑是正確的。然而當客觀環境與條件發生改變時,知識的正確性就接受檢驗,必要時就要對原來的認識加以修改和補充,一至全部更新而取而代之。例如知道1543年哥白尼學說問世之前,人們一直都以為地球是宇宙的核心;再有:人們都知道一個關于“瞎子摸象”的故事,它通俗地說明了完整的只是形式是一個復雜的智能過程。通常人們獲取知識的重要手段是:利用信息,把各種信息提煉、概括并關聯在一起,就形成了知識。而利用信息關聯構成知識的形式有多種多樣。 (2)知識的確定與不確定性如前說述,知識有若干信息關聯的結構組成,但是,其中有的信息是精確的,有的信息卻是不精確的。這樣,則由該信息結構形成的知識也有了確定與不確定的特征。例如,在我國中南地區,根據天上出現彩虹的方向及其位置,可以預示天氣的變化。有諺語曰:“東邊日(晴天),西邊雨。”但是,這只是一種常識性經驗,并不能完全肯定或否定。再如:家有一頭秀發,一時兩鬢如霜。我們則認為家一定是年輕人,乙就是老年人嘛?不能完全肯定,因為相反的事例是很多的。比如,當年的白毛女就不是老人,而現在六十多歲的演員有一頭黑發也不足為奇。 2、知識表達及其映像原理 智能機器系統如同智能生物一樣,在運用知識進行信息交流或只能問題求解時,都需要預先進行知識表示。進而實現知識調用,達到利用知識求解問題的目的。因而只是表示是知識信息處理系統必不可少的關鍵環節。對智能機器系統而言只是表示,實際上就是對知識的一種描述或約定。其本質,就是采用某種技術模式,八所要求解決的問題的相關知識,映射為一種便于找到該問題解的數據結構。對知識進行表示的過程,實質上就是把相關只是映射(或稱為變換:Transformation;或稱為映像:Mapping;或稱為編碼:Coded)為該數據結構的過程。如圖1。 圖1 只是表達及其映射原理 如圖,其目標是要對復雜的智能性問題實現機器求解,但機器直接對原始問題求解難度很大,可采用知識表達的映射原理,把原始問題映射為它的一種同構或同態問題,然后在對同構或同態問題求出它的解答,則相對容易而方便。順便指出:同構解答與原始問題有相同的形式解,然而對于同態問題,如果得到原始解,只需對同臺解答再施行反運算即可。在自然科學實際應用研究中,利用映射(稱之為變換)原理迂回求解的思想,是一種非常有效而廣為使用的重要手段。目前比較常見的知識表達方法主要有:常用的知識表示方法:一階謂詞邏輯表示法,產生式表示法,框架表示法,語義網絡表示法,腳本表示法,過程表示法,面向對象表示法,神經網絡表示法。如圖2 二、常用知識表示法: 2.1一階謂詞邏輯表示法: 一階謂詞邏輯表示法是目前應用最廣的方法之一,在AI系統上已經得到了應用。它是通過分析命題內容和謂詞邏輯,盡可能正確地表述它的各種意境的過程。知識的謂詞邏輯表示符合人的思維習慣,可讀性好,邏輯關系表達簡便。使用謂詞邏輯既便于表達概念、狀態、屬性等事實性知識,又能方便地采用謂詞公式的表達形式,進行各種智能行為的過程性描述與演繹推理。一階謂詞的一般形式為P(x1,x2,?,xn)其中P是謂詞名,xi為個體常量、變元,或函數。例如:STUDENT(zhangsan):zhangsan是學生 STUDENT(x):x是學生Greater(x,5):x>5TEACHER(father(Wanghong)):王宏的父親是教師。在一階謂詞表示法中連接詞是非常重要的其中: 連接詞:?、∨、∧、→、? 量詞:?、? (?x)P(x)為真、為假的定義 (?x)P(x)為真、為假的定義 結合具體事例可以看到一階謂詞邏輯在知識表示法中的優越性: 李明是計算機系的學生,但他不喜歡編程。定義謂詞: COMPUTER(x):x是計算機系的 學生 LIKE(x,y):x喜歡y 謂詞公式為: LIKE(liming,programming)COMPUTER(liming)∧ 謂詞邏輯是一種傳統經典也是最基本的形式化方法。謂詞邏輯知識表示規范性嚴,邏輯性強,自然性好,推理過程嚴密,易于實現。這些優良特性使得謂詞邏輯最早用于人工智能機器定理證明,并獲得了成功。但是必須看到,謂詞邏輯屬于標準的二值(T與F)邏輯,難以直接進行不確定性問題的處理。對于復雜系統的求解問題,容易陷入冗長演繹推理中,常常不可避免地帶來求解效率低,甚至產生“組合爆炸”問題。因此,針對謂詞邏輯,尚待人們不斷加以改進,以尋求自然性好而效率更高的技術方法。 2.2產生式表示法 目前,產生式表示方法是專家系統的第一選擇的知識表達方式。是美國數學家Post在1943年提出了一種計算形式體系里所使用的術語。產生式表示的基本形式為:(1)確定性知識的表示: 產生式形式:P→Q或者IF P THEN Q 它的含義:如果前提P滿足,則可以推出結論Q或執行Q操作。例如:IF CLEAR(B)AND HANDEMPTYTHEN Pickup(B)如果積木B上是空的,且機械手空,則機械手從桌面上抓起積木B。(2)不確定知識的表示: 產生式形式:P→Q(置信度)或者IF P THEN Q(置信度)在不確定推理中,當已知事實與前提P不能精確匹配時,只要按照“置信度”的要求達到一定的相似度,就認為已知事實與前提條件相匹配,再按照一定的算法將這種可能性(不確定性)傳遞到結論Q。 產生式表示法其優點在于模塊性。規則與規則之間相互獨立靈活性。知識庫易于增加、修改、刪除自然性。方便地表示專家的啟發性知識與經驗透明性。易于保留動作所產生的變化、軌跡,但仍有不少缺點:知識庫維護難。效率低。為了模塊一致性理解難。由于規則一致性彼此之間不能調用。 2.3 語義網絡表達式 語義網絡是人工智能常用的知識表示法之一。是一種使用概念及其語義關系來表達知識的有向圖。它作為人類聯想記憶的一個顯示心理學模型,是由J.R.Quillian于1968年在他的博士論文中首先提出,并用于自然語言處理。語義網絡結構共使用了三種圖形符號:框、帶箭頭及文字標識的線條和文字標識線。分別稱為:(1)節(結)點;弧(又叫做邊或支路);指針。 (2)節點(Node):也稱為結點。用圓形、橢圓、菱形或長方形的框圖來表示,用來表示事物的名稱、概念、屬性、情況、動作、狀態等。 (3)弧(Arc):這是一種有向弧,又稱之為支路(Branch)。節點之間用帶箭頭及文字標識的有向線條來聯結,用以表示事物之間的結構,即語義關系。 (4)指針(Pointer):也叫指示器。是在節點或者弧線的旁邊,另外附加必要的線條及文字標識,用來對節點、弧線和語義關系作出相宜的補充、解釋與說明。 語義網絡是一種結構化知識表示方法,具有表達直觀,方法靈活,容易掌握和理解的特點。概括起來,主要優點在于采用語義關系的有向圖來連接,語義、語法、詞語應用兼顧,具有描述生動,表達自然,易于理解等。 雖然語義網絡知識表示和推理具有較大的靈活性和多樣性,但是沒有公認嚴密的形式表達體系,卻不可避免地帶來了非一致性和程序設計與處理上的復雜性,這也是語義網絡知識表示尚待深入研究解決的一個課題。 2.4.框架表式式 框架表示法誕生于1975年,這也是一種結構化的知識表示方法,并已在多種系統中得到成功的應用。框架理論是由人工智能科學創始人之一,美國著名的人工智能學者M.L.Minsky(明斯基)提出來的。 自然界各種事物都可用框架(Frame)組織構成。每個被定義的框架對象分別代表著不同的特殊知識結構,從而可在大腦或計算機中表示、存儲并予以認識、理解和處理。框架是一種被用來描述某個對象(諸如一個事物、一個事件或一個概念)屬性知識的數據結構。下面是一個關于“大學教師”的框架設計模式。 n 框架名: 〈大學教師〉 n 姓名: 單位(姓,名)n 年齡: 單位(歲) n 性別: 范圍((男,女)缺省:男)n 學歷: 范圍(學士,碩士,博士) n 職稱: 范圍((教授,副教授,講師,助教)缺省:講師)n 部門: 范圍(學院(或系、處)n 住址: 〈住址框架〉 n 工資: 〈工資框架〉 n 參加工作時間: 單位(年,月) n 健康狀況: 范圍(健康,一般,較差)n 其它: 范圍(〈個人家庭框架〉,〈個人經濟狀況框架〉) 上述框架共有十一個槽,分別描述了關于“大學教師”的十一個方面的知識及其屬性。在每個槽里都指定了一些說明性的信息,表明了相關槽的值的填寫要有某些限制。框架表示法支持上層框架概念抽象和下層框架信息繼承共享的思想,不僅減少了框架信息和屬性知識表達的冗余,而且保證了上、下層框架知識表達的一致性。 主要缺點:框架表示法過于死板,難以描述諸如機器人糾紛等類問題的動態交互過程生動性。 三、各知識表達式的比較與展望 以上若知識表達方法,絕大多數在應用中得到了很好的應用。但實際工作中,如果要建立一個人工智能系統、專家系統時,還是要根據具體情況提出一個混合性的知識表達方式。每一種知識表示方法各有特點,而且適用的領域也不同: (1)謂詞邏輯方法只適用于確定性、陳述性、靜態性知識,而對動態的、變化性、模糊性知識則很難表示。 (2)產生式規則方法推理方法太單一,如果前提條件太多,或規則條數太多,則推理的速度將慢得驚人。 (3)語義網絡方法表達的知識面比較窄。(4)框架方法表示的知識橫向關系不太明確。(縱向從屬繼承關系很明確) 因此,對于復雜的、深層次的知識,應根據需要表示知識的特征,來決定用二種或三種方法聯合表示,例如: (1)邏輯與框架:框架里的槽值可以對應于謂詞項。 (2)語義網絡與框架:結點對應與框架,結點的參數就是框架的槽值。 (3)產生式與框架:框架的槽值對應于一條產生式規則。與神經網絡結合。 參考文獻: [1] 蔡之華;模糊Petri網及知識表示 [J];計算機應用與軟件;1994年03期 [2].張科杰,袁國華,彭穎紅; 知識表示及其在機械工程設計中的應用探討[J]; 機械設計;2004年06期。 [3].劉曉霞。新的知識表示方法——概念圖[J]。航空計算技術。1997(4)。[4].王永慶人工智能原理與方法[M]。西安交通大學出版社。1998。 讀書的好處 1、行萬里路,讀萬卷書。 2、書山有路勤為徑,學海無涯苦作舟。 3、讀書破萬卷,下筆如有神。 4、我所學到的任何有價值的知識都是由自學中得來的。——達爾文 5、少壯不努力,老大徒悲傷。 6、黑發不知勤學早,白首方悔讀書遲。——顏真卿 7、寶劍鋒從磨礪出,梅花香自苦寒來。 8、讀書要三到:心到、眼到、口到 9、玉不琢、不成器,人不學、不知義。 10、一日無書,百事荒廢。——陳壽 11、書是人類進步的階梯。 12、一日不讀口生,一日不寫手生。 13、我撲在書上,就像饑餓的人撲在面包上。——高爾基 14、書到用時方恨少、事非經過不知難。——陸游 15、讀一本好書,就如同和一個高尚的人在交談——歌德 16、讀一切好書,就是和許多高尚的人談話。——笛卡兒 17、學習永遠不晚。——高爾基 18、少而好學,如日出之陽;壯而好學,如日中之光;志而好學,如炳燭之光。——劉向 19、學而不思則惘,思而不學則殆。——孔子 20、讀書給人以快樂、給人以光彩、給人以才干。——培根 我眼中的人工智能 人,沒有熊一樣的力量,卻能把熊關進籠子,這籠子的鑰匙,叫智慧。人類一直在思考如何讓自然界的其它事物為自己所用,而不是只想著如何獲取食物來填飽肚子,人類之所以會凌駕于食物鏈頂端,就在于對于資源的使用。為了減輕胃的消化負擔,人類開始學會使用火,讓蛋白質在進入胃之前就變質而變得更好消化易于吸收。經歷了漫長的手工制造業歷程,為了提高生產效率,也為了減輕工人手工勞作的負擔,人們開始了工業革命,無數的機器流水線取代了效率低下的廉價勞動力,也正是從此刻起,人類使用資源的能力有了質的發展,由使用已有資源,到創造新的資源。第一臺計算機應運而生,人類開啟了無限創造的時代。時至今日,計算機技術幾乎延伸到了生活的每個領域,甚至成了人們的生活必需品。計算機能幫助人們完成人類不可能完成的計算,但一直致力于創造的人們當然不會停止對計算機的要求。人們不光需要計算機做人類做不了的計算,還漸漸開始要求計算機做人類能做的事,這便催生了人工智能。人類就是這樣一步步用自己的智慧讓自己過上傻瓜一樣的生活。 人工智能目前還沒有在人們生活中普及,但是已經出現萌芽。最典型是的一些語音識別系統,如蘋果公司的Siri可能是目前人們接觸最多的基于人工智能和云計算技術的產品,相信這種人機交互系統的雛形經過時間的磨練會在未來形成一套完善的從界面到內核的智能體系。在社會生活方面,與數字圖像處理技術緊密結合的人工智能已經開始應用于攝像頭的圖像捕捉和識別,而模式識別技術的發展則使得人工智能在更廣闊的領域得以實現成為了可能。一些大公司在人工智能領域的投入和研究對于推動人工智能的發展起到了很大的作用,最值得一提的就是谷歌。谷歌的免費搜索表面上是為了方便人們的查詢,但這款搜索引擎推出的初衷,就是為了幫助人工智能的深度學習,通過上億的用戶一次又一次地查詢,來鍛煉人工智能的學習能力,由于我的水平還很低,對于深度學習還不敢妄自拽測。但是,近年來谷歌公司在人工智能方面的突破一項接著一項,為人們熟知的便是智能汽車。不得不說,人工智能想要進一步發展,必須依靠這些大公司的研究和不斷推廣,由經濟促創新。 縱覽時間長河,很多新生的技術在一開始都是舉步維艱的,人工智能也不例外,但幸運的是,人們接受和學會使用新技術所需要的時間越來越短,對于人工智能產品的投入市場是有益的。因此,在我看來,將已開發出來但還需完善的人工智能產品投放市場,使其進入人們的生活只是時間的問題,但要想真正掌握人工智能,開發出完全符合研發人想法的智能產品還需各方面的努力。至于現在討論熱烈的“人工智能統治人類”的問題,我的看法是,人工智能的開發和應用是需要監管的,但并不能阻止人工智能即將影響世界的趨勢。 由于我對于人工智能的理解還只是皮毛,對于文中出現的紕漏和錯誤還希望老師指正! 通過學習《高中信息技術“人工智能初步”模塊教學研究》課程,分析您教學中學生的專家系統作品(或課程學習的參考資料的學生作品),就學生作品中存在的問題,談談自己在教學中如何更好地開展人工智能的教學。 通過學習《高中信息技術“人工智能初步”模塊教學研究》課程,談談您在實施該模塊教學過程中遇到的問題及解決方法,未實施過該模塊教學的教師可談談開展人工智能模塊教學的設想。 按教材的順序,應該先講人工智能的基本概念,然后講解知識及其表示的理論知識,再講解推理與專家系統和人工智能語言。但是這種傳統教學方法對于中學生來說太晦澀難懂了,教師還沒把理論知識講完,學生已對人工智能徹底失去興趣了。所以我們在講理論知識的過程中,要加入有趣的實例。所以我們要打破常規的教學順序,對教材進行重組。盡量減少概念和純理論知識的講解時間,通過讓學生制作一個有實用價值的個性化的簡易專家系統來帶動人工智能的理論知識學習。在“做”的過程中,掌握知識的表達及推理機制等理論知識。讓學生在完成一個簡單專家系統作品的過程中,不知不覺中學習了相應的理論知識。我們要做到通過人工智能教學,能夠吸引更多的學生能投身于人工智能的研究中。 通過對學生作品—疾病診斷治療專家系統的分析,我覺得在以后的人工智能教學中,要做到以下幾個方面: (1)教師要以平等友好的心態,微笑溫和的話語與學生交流,尊重、理解每個學生的權利、價值觀和感覺,保全學生的面子,杜絕直接的批評、奚落、嘲弄、諷刺,保證學生在課堂上的情緒安全感。 (2)盡量減少概念和純理論知識的講解時間,通過讓學生制作一個有實用價值的個性化的簡易專家系統來帶動人工智能的理論知識學習。在“做”的過程中,掌握知識的表達及推理機制等理論知識。讓學生在完成一個簡單專家系統作品的過程中,不知不覺中學習了相應的理論知識。 (3)展人工智能的教學,重點要放在讓學生能夠體驗,老師最好能以現實中的例子來給學生做講演,有直觀的印象,學起來更容易現解。 (4)在教學中要利用好因特網這個大資源庫,并以小組合作學習的形式,相互交流,相互幫助,老師再及時指導與評價。第二篇:人工智能發展史解讀
第三篇:人工智能論文解讀
第四篇:人工智能心得體會大作業
第五篇:人工智能作業1