A. 免疫演算法的演算法流程
1. 隨機產生初始父代種群A1,根據先驗知識抽取疫苗;
2. 若當前群體中包含最佳個體,則演算法停止運行並輸出結果;否則,繼續;
3.對當前第k代父本種群Ak進行交叉操作,得到種群Bk;
4. 對Bk進行變異操作,得到種群Ck;
5. 對Ck進行接種疫苗操作,得到種群Dk;
6. 對Dk進行免疫選擇操作,得到新一代父本Ak+1,轉至第二步。
B. 免疫演算法的提出
在生命科學領域中,人們已經對遺傳(Heredity)與免疫(Immunity)等自然現象進行了廣泛深入的研究。六十年代Bagley和Rosenberg等先驅在對這些研究成果進行分析與理解的基礎上,借鑒其相關內容和知識,特別是遺傳學方面的理論與概念,並將其成功應用於工程科學的某些領域,收到了良好的效果。時至八十年代中期,美國Michigan大學的Hollan教授不僅對以前的學者們提出的遺傳概念進行了總結與推廣,而且給出了簡明清晰的演算法描述,並由此形成目前一般意義上的遺傳演算法(GeneticAlgorithm)GA。由於遺傳演算法較以往傳統的搜索演算法具有使用方便、魯棒性強、便於並行處理等特點,因而廣泛應用於組合優化、結構設計、人工智慧等領域。另一方面,Farmer和Bersini等人也先後在不同時期、不同程度地涉及到了有關免疫的概念。遺傳演算法是一種具有生成+檢測 (generate and test)的迭代過程的搜索演算法。從理論上分析,迭代過程中,在保留上一代最佳個體的前提下,遺傳演算法是全局收斂的。然而,在對演算法的實施過程中不難發現兩個主要遺傳運算元都是在一定發生概率的條件下,隨機地、沒有指導地迭代搜索,因此它們在為群體中的個體提供了進化機會的同時,也無可避免地產生了退化的可能。在某些情況下,這種退化現象還相當明顯。另外,每一個待求的實際問題都會有自身一些基本的、顯而易見的特徵信息或知識。然而遺傳演算法的交叉和變異運算元卻相對固定,在求解問題時,可變的靈活程度較小。這無疑對演算法的通用性是有益的,但卻忽視了問題的特徵信息對求解問題時的輔助作用,特別是在求解一些復雜問題時,這種忽視所帶來的損失往往就比較明顯了。實踐也表明,僅僅使用遺傳演算法或者以其為代表的進化演算法,在模仿人類智能處理事物的能力方面還遠遠不足,還必須更加深層次地挖掘與利用人類的智能資源。從這一點講,學習生物智能、開發、進而利用生物智能是進化演算法乃至智能計算的一個永恆的話題。所以,研究者力圖將生命科學中的免疫概念引入到工程實踐領域,藉助其中的有關知識與理論並將其與已有的一些智能演算法有機地結合起來,以建立新的進化理論與演算法,來提高演算法的整體性能。基於這一思想,將免疫概念及其理論應用於遺傳演算法,在保留原演算法優良特性的前提下,力圖有選擇、有目的地利用待求問題中的一些特徵信息或知識來抑制其優化過程中出現的退化現象,這種演算法稱為免疫演算法(ImmuneAlgorithm)IA。下面將會給出演算法的具體步驟,證明其全局收斂性,提出免疫疫苗的選擇策略和免疫運算元的構造方法,理論分析和對TSP問題的模擬結果表明免疫演算法不僅是有效的而且也是可行的,並較好地解決了遺傳演算法中的退化問題。
C. 暗黑2物理免疫的查看或者演算法
初始的物理免疫為0,在1.10及以後版本玩家、雇傭兵的物理免疫上限最大為50%,中了傷害加深詛咒會減少100%。「減少XX點物理傷害」和「減少XX點法術傷害」這兩個屬性在所有計算公式(物理免疫、抗性等)之前,而不是在最後計算,樓上的說法是錯誤的。
D. 求人工智慧免疫演算法VC環境下的程序
#include <iostream> #include <vector> #include <algorithm> #include <string> #include <time.h> #include <stdlib.h> #include "def.h" #include "TSP.h" //static DISTANCE dist[_CITY_AMOUNT][_CITY_AMOUNT]; char strFilename[100]; void funLoadData(DISTANCE distance[_CITY_AMOUNT][_CITY_AMOUNT]); void main() { string str = strFilename; int nPos; clock_t start, finish; n=0; cout << " |=========用滑鼠拖入TSP文件,按回車鍵。=======|" << endl ; gets(strFilename); nPos = str.find("\\"); while (nPos != -1) { str = str.substr(0,nPos) + "\\" + str.substr(nPos) ; nPos = str.find("\\",nPos+2); } if (str.find("\"") != -1) { str = str.substr(1,str.length()-2); } cout << strFilename << endl; printf("輸入進化代數:"); scanf("%d",&_TIMES); start=clock(); DISTANCE distance[_CITY_AMOUNT][_CITY_AMOUNT]; funLoadData(distance); Csga<_CONTAINER, _CONTAINER_P> CUnit((DISTANCE *)distance); //初始化 //開始遺傳演算法 if(!CUnit.fnCreateRandomGene()) //產生隨機的基因 { exit(0); } // CUnit.funSortDist(); //循環基因編譯,雜交,淘汰過程 CUnit.fnEvalAll(); for ( int i = 0; i < _TIMES; ++i ) { CUnit.fnDispProbability(); CUnit.fnGeneAberrance(); //基因變異 CUnit.fnDispProbability(); CUnit.fnGeneMix(); //基因雜交 CUnit.fnEvalAll(); //每隔_DISP_INTERVAL顯示一次結果 if ( (i+1)%_DISP_INTERVAL == 0 || i == 0) { cout << "第" << i+1 << "代" << std::endl; CUnit.fnDispProbability(); CUnit.fnDispHistoryMin(); } } CUnit.fnOutputFile(); finish=clock(); float nTime=(float)(finish-start)/CLOCKS_PER_SEC; cout << endl << "OK ! It took " << nTime << " seconds." << endl; getchar(); } /*從文件中讀取數據*/ void funLoadData(DISTANCE distance[_CITY_AMOUNT][_CITY_AMOUNT]) { FILE *fp; int i=0,j; char sTemp[64]; // if (!(fp = fopen("TSP_china30.txt","r"))) return; // if (!(fp = fopen("NODES.txt","r"))) return; if (!(fp = fopen(strFilename,"r"))) return; while (i<3) { fgets(szTspInfo[i++],1024,fp); // fgets(sTemp,1024,fp); // strcpy(szTspInfo[i++],sTemp); } fscanf(fp,"%s",sTemp); fscanf(fp,"%d",&n); i = 0; while (i++<5) { fgets(sTemp,1024,fp); } for (i=0;i<n;i++) { for (j=0;j<n;j++) { fscanf(fp,"%s",sTemp); distance[i][j] = atoi(sTemp); } //for (j=0;j<n;j++) } //for (i=0;i<n;i++) }
E. 我需要一個基於免疫遺傳演算法的matlab程序,關於函數尋優的,最好在附有講解
% 主程序
%遺傳演算法主程序
%Name:genmain.m
%author:楊冪
clear
clf
%%初始化
popsize=50; %群體大小
chromlength=30; %字元串長度(個體長度)
pc=0.6; %交叉概率
pm=0.1; %變異概率
pop=initpop(popsize,chromlength); %隨機產生初始群體
%%開始迭代
for i=1:20 %20為迭代次數
[objvalue]=calobjvalue(pop); %計算目標函數
fitvalue=calfitvalue(objvalue); %計算群體中每個個體的適應度
[newpop]=selection(pop,fitvalue); %復制
[newpop]=crossover(pop,pc); %交叉
[newpop]=mutation(pop,pm); %變異
[bestindivial,bestfit]=best(pop,fitvalue); %求出群體中適應值最大的個體及其適應值
y(i)=max(bestfit);%儲存最優個體適應值
n(i)=i;
pop5=bestindivial;%儲存最優個體
%解碼
x1(i)=decodechrom(pop5,1,chromlength/2)*2/32767;
x2(i)=10+decodechrom(pop5,chromlength/2+1,chromlength/2)*10/32767;
pop=newpop;%將新產生的種群作為當前種群
end
%%繪圖
figure(1)%最優點變化趨勢圖
i=1:20;
plot(y(i),'-r*')
xlabel('迭代次數');
ylabel('最優個體適應值');
title('最優點變化趨勢');
legend('最優點');
grid on
figure(2)%最優點分布圖
[X1,X2]=meshgrid(0:0.1:2,10:0.1:20);
Z=X1.^2+X2.^2;
mesh(X1,X2,Z);
xlabel('自變數x1'),ylabel('自變數x2'),zlabel('函數值f(x1,x2)');
hold on
plot3(x1,x2,y,'ro','MarkerEdgeColor','r','MarkerFaceColor','r','MarkerSize',5)
title('最優點分布');
legend('最優點');
hold off
[z index]=max(y); %計算最大值及其位置
x5=[x1(index),x2(index)]%計算最大值對應的x值
z
F. 免疫演算法的分析有哪些
現代密碼學將演算法分為具有不同功能的幾種常用的主要有三種:1.對稱密碼演算法DES演算法——二十世紀七十年代提出,曾經稱霸對稱加密領域30年AES演算法——二十一世紀初提出用以取代DES演算法IDEA演算法——二十世紀九十年代初提出,也是一種流行演算法RC4演算法——經典的流密碼演算法2.公鑰密碼演算法D-H演算法——用於密鑰協商,是第一種使用的公鑰演算法,基於離散對數難解問題RSA演算法——最常用的公鑰演算法,功能強大3.哈希函數(雜湊函數)MD5——常用演算法,用於產生80比特的輸出SHA-1——也是常用演算法,用於產生128比特輸出---這是最經典的若干種演算法說的不對之處請指正------個人意見僅供參考
G. IA優化演算法是什麼
IA優化演算法指的是免疫演算法是模仿生物免疫機制,結合基因的進化機理,人工構造出的一種新型智能優化演算法。它具有一般免疫系統的特徵,採用群體搜索策略,通過迭代計算,最終以較大的概率得到問題的最優解。
相比較於其他演算法,免疫演算法利用自身產生多樣性和維持機制的特點,保證了種群的多樣性,克服了一般尋優過程(特別是多峰值的尋優過程)中不可避免的「早熟」問題,可以求得全局最優解。免疫演算法具有自適應性、隨機性、並行性、全局收斂性、種群多樣性等優點。
免疫演算法主要模塊:
抗原識別與初始抗體產生。根據待優化問題的特點設計合適的抗體編碼規則,並在此編碼規則下利用問題的先驗知識產生初始抗體種群。
抗體評價。對抗體的質量進行評價,評價准則主要為抗體親和度和個體濃度,評價得出的優質抗體將進行進化免疫操作,劣質抗體將會被更新。
免疫操作。利用免疫選擇、克隆、變異、克隆抑制、種群刷新等運算元模擬生物免疫應答中的各種免疫操作,形成基於生物免疫系統克隆選擇原理的進化規則和方法,實現對各種最優化問題的尋優搜索。
H. 免疫演算法的介紹
免疫演算法是一種具有生成+檢測 (generate and test)的迭代過程的搜索演算法。從理論上分析,迭代過程中,在保留上一代最佳個體的前提下,遺傳演算法是全局收斂的。
I. 為什麼CRC校驗時其初始值為所有位為1
下面為CRC的計算過程:
1.設置CRC寄存器,並給其賦值FFFF(hex)。
2.將數據的第一個8-bit字元與16位CRC寄存器的低8位進行異或,並把結果存入CRC寄存器。
3.CRC寄存器向右移一位,MSB補零,移出並檢查LSB。
4.如果LSB為0,重復第三步;若LSB為1,CRC寄存器與多項式碼相異或。
5.重復第3與第4步直到8次移位全部完成。此時一個8-bit數據處理完畢。
6.重復第2至第5步直到所有數據全部處理完成。
7.最終CRC寄存器的內容即為CRC值。
常用的CRC循環冗餘校驗標准多項式如下:
CRC(16位) = X16+X15+X2+1
CRC(CCITT) = X16+X12 +X5+1
CRC(32位) = X32+X26+X23+X16+X12+X11+X10+ X8+X7+X5+X4+X2+X+1
以CRC(16位)多項式為例,其對應校驗二進制位列為1 1000 0000 0000 0101。
注意:這兒列出的標准校驗多項式都含有(X+1)的多項式因子;各多項式的系數均為二進制數,所涉及的四則運算仍遵循對二取模的運算規則。
(註:對二取模的四則運算指參與運算的兩個二進制數各位之間凡涉及加減運算時均進行XOR異或運算,即:1 XOR 1=0,0 XOR 0=0,1 XOR 0=1)
CRC-16碼由兩個位元組構成,在開始時CRC寄存器的每一位都預置為1,然後把CRC寄存器與8-bit的數據進行異或,之後對CRC寄存器從高到低進行移位,在最高位(MSB)的位置補零,而最低位(LSB,移位後已經被移出CRC寄存器)如果為1,則把寄存器與預定義的多項式碼進行異或,否則如果LSB為零,則無需進行異或。重復上述的由高至低的移位8次,第一個8-bit數據處理完畢,用此時CRC寄存器的值與下一個8-bit數據異或並進行如前一個數據似的8次移位。所有的字元處理完成後CRC寄存器內的值即為最終的CRC值。
J. 免疫演算法的相關概念
抗原:在生命科學中,是指能夠刺激和誘導機體的免疫系統使其產生免疫應答,並能與相應的免疫應答產物在體內或體外發生特異性反應的物質。在我們的演算法中,是指所有可能錯誤的基因,即非最佳個體的基因。
抗體:在生命科學中,是指免疫系統受抗原刺激後,免疫細胞轉化為漿細胞並產生能與抗原發生特異性結合的免疫球蛋白,該免疫球蛋白即為抗體。在本文中是指根據疫苗修正某個個體的基因所得到的新個體。其中,根據疫苗修正某個個體基因的過程即為接種疫苗,其目的是消除抗原在新個體產生時所帶來的負面影響。
免疫疫苗:根據進化環境或待求問題,所得到的對最佳個體基因的估計。
免疫運算元:同生命科學中的免疫理論類似,免疫運算元也分兩種類型:全免疫和目標免疫,二者分別對應於生命科學中的非特異性免疫和特異性免疫。其中,全免疫是指群體中每個個體在變異操作後,對其每一環節都進行一次免疫操作的免疫類型;目標免疫則指個體在進行變異操作後,經過一定判斷,個體僅在作用點處發生免疫反應的一種類型。前者主要應用於個體進化的初始階段,而在進化過程中基本上不發生作用,否則將很有可能產生通常意義上所說的「同化現象」;後者一般而言將伴隨群體進化的全部過程,也是免疫操作的一個常用運算元。
免疫調節:在免疫反應過程中,大量的抗體的產生降低了抗原對免疫細胞的刺激,從而抑制抗體的分化和增殖,同時產生的抗體之間也存在著相互刺激和抑制的關系,這種抗原與抗體、抗體與抗體之間的相互制約關系使抗體免疫反應維持一定的強度,保證機體的免疫平衡。
免疫記憶:指免疫系統將能與抗原發生反應的抗體作為記憶細胞保存記憶下來,當同類抗原再次侵入時,相應的記憶細胞被激活而產生大量的抗體,縮短免疫反應時間。
抗原識別:通過表達在抗原表面的表位和抗體分子表面的對位的化學基進行相互匹配選擇完成識別,這種匹配過程也是一個不斷對抗原學習的過程,最終能選擇產生最適當的抗體與抗原結合而排除抗原。