信任函數演算法
❶ 什麼叫模糊集對分析法
屁屁說的應該是模糊綜合評價與模糊集對分析不是一種方法,雖然都用到模糊數學的知識。其它幾個也大致是找篇文章的摘要就貼上的。我想簡單說幾點:
談到模糊集對分析理論先要說集對分析理論。
集對分析理論(SPA)是我國學者趙克勤先生於1989 年創立的一門新興學科,它是一種用聯系數「a+bi+cj」統一處理模糊、隨機、中介等不確定性系統的理論和方法。目前,集對分析理論已在自然科學、社會經濟等領域得到了廣泛的應用。
在我們對不確定性系統的描述中,一種是描述隨機不確定性的概率統計理論,一種是模糊不確定性的模糊集合理論。概率統計理論過分強調系統的獨立性,而模糊邏輯理論則過分的依賴主觀的經驗,因而這兩種理論都有不足之處。1989年,趙克勤提出的集對分析理論,也稱「聯系數學」。
模糊集對理論是將模糊邏輯理論用於集對分析,結合從兩個集合的同一性、差異性和對立性三個方面來研究系統的不確定性。在處理不確定性問題時較為客觀,運算也較簡單,所以模糊集對分析理論已經成功運用於人工職能、系統控制、管理決策等領域。
在分析中要用到模糊理論分析聯系度,集合運算和矩陣運算比較多,這里就不過多論述了。詳細可以聯系我qq68727448註明模糊集對分析
❷ 在公開密鑰密碼體制中,HASH演算法的作用是
Hash,一般翻譯做"散列",也有直接音譯為"哈希"的,就是把任意長度的輸入(又叫做預映射, pre-image),通過散列演算法,變換成固定長度的輸出,該輸出就是散列值。這種轉換是一種壓縮映射,也就是,散列值的空間通常遠小於輸入的空間,不同的輸入可能會散列成相同的輸出,而不可能從散列值來唯一的確定輸入值。
數學表述為:h = H(M) ,其中H( )--單向散列函數,M--任意長度明文,h--固定長度散列值。
在信息安全領域中應用的Hash演算法,還需要滿足其他關鍵特性:
第一當然是單向性(one-way),從預映射,能夠簡單迅速的得到散列值,而在計算上不可能構造一個預映射,使其散列結果等於某個特定的散列值,即構造相應的M=H-1(h)不可行。這樣,散列值就能在統計上唯一的表徵輸入值,因此,密碼學上的 Hash 又被稱為"消息摘要(message digest)",就是要求能方便的將"消息"進行"摘要",但在"摘要"中無法得到比"摘要"本身更多的關於"消息"的信息。
第二是抗沖突性(collision-resistant),即在統計上無法產生2個散列值相同的預映射。給定M,計算上無法找到M',滿足H(M)=H(M') ,此謂弱抗沖突性;計算上也難以尋找一對任意的M和M',使滿足H(M)=H(M') ,此謂強抗沖突性。要求"強抗沖突性"主要是為了防範所謂"生日攻擊(birthday attack)",在一個10人的團體中,你能找到和你生日相同的人的概率是2.4%,而在同一團體中,有2人生日相同的概率是11.7%。類似的,當預映射的空間很大的情況下,演算法必須有足夠的強度來保證不能輕易找到"相同生日"的人。
第三是映射分布均勻性和差分分布均勻性,散列結果中,為 0 的 bit 和為 1 的 bit ,其總數應該大致相等;輸入中一個 bit 的變化,散列結果中將有一半以上的 bit 改變,這又叫做"雪崩效應(avalanche effect)";要實現使散列結果中出現 1bit 的變化,則輸入中至少有一半以上的 bit 必須發生變化。其實質是必須使輸入中每一個 bit 的信息,盡量均勻的反映到輸出的每一個 bit 上去;輸出中的每一個 bit,都是輸入中盡可能多 bit 的信息一起作用的結果。
Damgard 和 Merkle 定義了所謂"壓縮函數(compression function)",就是將一個固定長度輸入,變換成較短的固定長度的輸出,這對密碼學實踐上 Hash 函數的設計產生了很大的影響。Hash函數就是被設計為基於通過特定壓縮函數的不斷重復"壓縮"輸入的分組和前一次壓縮處理的結果的過程,直到整個消息都被壓縮完畢,最後的輸出作為整個消息的散列值。盡管還缺乏嚴格的證明,但絕大多數業界的研究者都同意,如果壓縮函數是安全的,那麼以上述形式散列任意長度的消息也將是安全的。這就是所謂 Damgard/Merkle 結構:
在下圖中,任意長度的消息被分拆成符合壓縮函數輸入要求的分組,最後一個分組可能需要在末尾添上特定的填充位元組,這些分組將被順序處理,除了第一個消息分組將與散列初始化值一起作為壓縮函數的輸入外,當前分組將和前一個分組的壓縮函數輸出一起被作為這一次壓縮的輸入,而其輸出又將被作為下一個分組壓縮函數輸入的一部分,直到最後一個壓縮函數的輸出,將被作為整個消息散列的結果。
MD5 和 SHA1 可以說是目前應用最廣泛的Hash演算法,而它們都是以 MD4 為基礎設計的。
1) MD4
MD4(RFC 1320)是 MIT 的 Ronald L. Rivest 在 1990 年設計的,MD 是 Message Digest 的縮寫。它適用在32位字長的處理器上用高速軟體實現--它是基於 32 位操作數的位操作來實現的。它的安全性不像RSA那樣基於數學假設,盡管 Den Boer、Bosselaers 和 Dobbertin 很快就用分析和差分成功的攻擊了它3輪變換中的 2 輪,證明了它並不像期望的那樣安全,但它的整個演算法並沒有真正被破解過,Rivest 也很快進行了改進。
下面是一些MD4散列結果的例子:
MD4 ("") =
MD4 ("a") =
MD4 ("abc") =
MD4 ("message digest") =
MD4 ("abcdefghijklmnopqrstuvwxyz") =
MD4 ("") =
MD4 ("1234567890") =
2) MD5
MD5(RFC 1321)是 Rivest 於1991年對MD4的改進版本。它對輸入仍以512位分組,其輸出是4個32位字的級聯,與 MD4 相同。它較MD4所做的改進是:
1) 加入了第四輪
2) 每一步都有唯一的加法常數;
3) 第二輪中的G函數從((X ∧ Y) ∨ (X ∧ Z) ∨ (Y ∧ Z)) 變為 ((X ∧ Z) ∨ (Y ∧ ~Z))以減小其對稱性;
4) 每一步都加入了前一步的結果,以加快"雪崩效應";
5) 改變了第2輪和第3輪中訪問輸入子分組的順序,減小了形式的相似程度;
6) 近似優化了每輪的循環左移位移量,以期加快"雪崩效應",各輪的循環左移都不同。
盡管MD5比MD4來得復雜,並且速度較之要慢一點,但更安全,在抗分析和抗差分方面表現更好。
消息首先被拆成若干個512位的分組,其中最後512位一個分組是"消息尾+填充位元組(100...0)+64 位消息長度",以確保對於不同長度的消息,該分組不相同。64位消息長度的限制導致了MD5安全的輸入長度必須小於264bit,因為大於64位的長度信息將被忽略。而4個32位寄存器字初始化為A=0x01234567,B=0x89abcdef,C=0xfedcba98,D=0x76543210,它們將始終參與運算並形成最終的散列結果。
接著各個512位消息分組以16個32位字的形式進入演算法的主循環,512位消息分組的個數據決定了循環的次數。主循環有4輪,每輪分別用到了非線性函數
F(X, Y, Z) = (X ∧ Y) ∨ (~X ∧ Z)
G(X, Y, Z) = (X ∧ Z) ∨ (Y ∧ ~Z)
H(X, Y, Z) =X ⊕ Y ⊕ Z
I(X, Y, Z) = X ⊕ (Y ∨ ~Z)
這4輪變換是對進入主循環的512位消息分組的16個32位字分別進行如下操作:將A、B、C、D的副本a、b、c、d中的3個經F、G、H、I運算後的結果與第4個相加,再加上32位字和一個32位字的加法常數,並將所得之值循環左移若干位,最後將所得結果加上a、b、c、d之一,並回送至ABCD,由此完成一次循環。
所用的加法常數由這樣一張表T[i]來定義,其中i為1...64,T[i]是i的正弦絕對值之4294967296次方的整數部分,這樣做是為了通過正弦函數和冪函數來進一步消除變換中的線性性。
當所有512位分組都運算完畢後,ABCD的級聯將被輸出為MD5散列的結果。下面是一些MD5散列結果的例子:
MD5 ("") =
MD5 ("a") =
MD5 ("abc") =
MD5 ("message digest") =
MD5 ("abcdefghijklmnopqrstuvwxyz") =
MD5 ("") =
MD5 ("1234567890") =
參考相應RFC文檔可以得到MD4、MD5演算法的詳細描述和演算法的C源代碼。
3) SHA1 及其他
SHA1是由NIST NSA設計為同DSA一起使用的,訪問http://www.itl.nist.gov/fipspubs可以得到它的詳細規范--[/url]"FIPS PUB 180-1 SECURE HASH STANDARD"。它對長度小於264的輸入,產生長度為160bit的散列值,因此抗窮舉(brute-force)性更好。SHA-1 設計時基於和MD4相同原理,並且模仿了該演算法。因為它將產生160bit的散列值,因此它有5個參與運算的32位寄存器字,消息分組和填充方式與MD5相同,主循環也同樣是4輪,但每輪進行20次操作,非線性運算、移位和加法運算也與MD5類似,但非線性函數、加法常數和循環左移操作的設計有一些區別,可以參考上面提到的規范來了解這些細節。下面是一些SHA1散列結果的例子:
SHA1 ("abc") = a9993e36 4706816a ba3e2571 7850c26c 9cd0d89d
SHA1 ("") = 84983e44 1c3bd26e baae4aa1 f95129e5 e54670f1
其他一些知名的Hash演算法還有MD2、N-Hash、RIPE-MD、HAVAL等等。上面提到的這些都屬於"純"Hash演算法。還有另2類Hash演算法,一類就是基於對稱分組演算法的單向散列演算法,典型的例子是基於DES的所謂Davies-Meyer演算法,另外還有經IDEA改進的Davies-Meyer演算法,它們兩者目前都被認為是安全的演算法。另一類是基於模運算/離散對數的,也就是基於公開密鑰演算法的,但因為其運算開銷太大,而缺乏很好的應用前景。
沒有通過分析和差分攻擊考驗的演算法,大多都已經夭折在實驗室里了,因此,如果目前流行的Hash演算法能完全符合密碼學意義上的單向性和抗沖突性,就保證了只有窮舉,才是破壞Hash運算安全特性的唯一方法。為了對抗弱抗沖突性,我們可能要窮舉個數和散列值空間長度一樣大的輸入,即嘗試2^128或2^160個不同的輸入,目前一台高檔個人電腦可能需要10^25年才能完成這一艱巨的工作,即使是最高端的並行系統,這也不是在幾千年裡的幹得完的事。而因為"生日攻擊"有效的降低了需要窮舉的空間,將其降低為大約1.2*2^64或1.2*2^80,所以,強抗沖突性是決定Hash演算法安全性的關鍵。
在NIST新的 Advanced Encryption Standard (AES)中,使用了長度為128、192、256bit 的密鑰,因此相應的設計了 SHA256、SHA384、SHA512,它們將提供更好的安全性。
Hash演算法在信息安全方面的應用主要體現在以下的3個方面:
1) 文件校驗
我們比較熟悉的校驗演算法有奇偶校驗和CRC校驗,這2種校驗並沒有抗數據篡改的能力,它們一定程度上能檢測並糾正數據傳輸中的信道誤碼,但卻不能防止對數據的惡意破壞。
MD5 Hash演算法的"數字指紋"特性,使它成為目前應用最廣泛的一種文件完整性校驗和(Checksum)演算法,不少Unix系統有提供計算md5 checksum的命令。它常被用在下面的2種情況下:
第一是文件傳送後的校驗,將得到的目標文件計算 md5 checksum,與源文件的md5 checksum 比對,由兩者 md5 checksum 的一致性,可以從統計上保證2個文件的每一個碼元也是完全相同的。這可以檢驗文件傳輸過程中是否出現錯誤,更重要的是可以保證文件在傳輸過程中未被惡意篡改。一個很典型的應用是ftp服務,用戶可以用來保證多次斷點續傳,特別是從鏡像站點下載的文件的正確性。
更出色的解決方法是所謂的代碼簽名,文件的提供者在提供文件的同時,提供對文件Hash值用自己的代碼簽名密鑰進行數字簽名的值,及自己的代碼簽名證書。文件的接受者不僅能驗證文件的完整性,還可以依據自己對證書簽發者和證書擁有者的信任程度,決定是否接受該文件。瀏覽器在下載運行插件和java小程序時,使用的就是這樣的模式。
第二是用作保存二進制文件系統的數字指紋,以便檢測文件系統是否未經允許的被修改。不少系統管理/系統安全軟體都提供這一文件系統完整性評估的功能,在系統初始安裝完畢後,建立對文件系統的基礎校驗和資料庫,因為散列校驗和的長度很小,它們可以方便的被存放在容量很小的存儲介質上。此後,可以定期或根據需要,再次計算文件系統的校驗和,一旦發現與原來保存的值有不匹配,說明該文件已經被非法修改,或者是被病毒感染,或者被木馬程序替代。TripWire就提供了一個此類應用的典型例子。
更完美的方法是使用"MAC"。"MAC" 是一個與Hash密切相關的名詞,即信息鑒權碼(Message Authority Code)。它是與密鑰相關的Hash值,必須擁有該密鑰才能檢驗該Hash值。文件系統的數字指紋也許會被保存在不可信任的介質上,只對擁有該密鑰者提供可鑒別性。並且在文件的數字指紋有可能需要被修改的情況下,只有密鑰的擁有者可以計算出新的散列值,而企圖破壞文件完整性者卻不能得逞。
2) 數字簽名
Hash 演算法也是現代密碼體系中的一個重要組成部分。由於非對稱演算法的運算速度較慢,所以在數字簽名協議中,單向散列函數扮演了一個重要的角色。
在這種簽名協議中,雙方必須事先協商好雙方都支持的Hash函數和簽名演算法。
簽名方先對該數據文件進行計算其散列值,然後再對很短的散列值結果--如Md5是16個位元組,SHA1是20位元組,用非對稱演算法進行數字簽名操作。對方在驗證簽名時,也是先對該數據文件進行計算其散列值,然後再用非對稱演算法驗證數字簽名。
對 Hash 值,又稱"數字摘要"進行數字簽名,在統計上可以認為與對文件本身進行數字簽名是等效的。而且這樣的協議還有其他的優點:
首先,數據文件本身可以同它的散列值分開保存,簽名驗證也可以脫離數據文件本身的存在而進行。
再者,有些情況下簽名密鑰可能與解密密鑰是同一個,也就是說,如果對一個數據文件簽名,與對其進行非對稱的解密操作是相同的操作,這是相當危險的,惡意的破壞者可能將一個試圖騙你將其解密的文件,充當一個要求你簽名的文件發送給你。因此,在對任何數據文件進行數字簽名時,只有對其Hash值進行簽名才是安全的。
3) 鑒權協議
如下的鑒權協議又被稱作"挑戰--認證模式:在傳輸信道是可被偵聽,但不可被篡改的情況下,這是一種簡單而安全的方法。
需要鑒權的一方,向將被鑒權的一方發送隨機串("挑戰"),被鑒權方將該隨機串和自己的鑒權口令字一起進行 Hash 運算後,返還鑒權方,鑒權方將收到的Hash值與在己端用該隨機串和對方的鑒權口令字進行 Hash 運算的結果相比較("認證"),如相同,則可在統計上認為對方擁有該口令字,即通過鑒權。
POP3協議中就有這一應用的典型例子:
S: +OK POP3 server ready <[email protected]>
C: APOP mrose
S: +OK maildrop has 1 message (369 octets)
在上面的一段POP3協議會話中,雙方都共享的對稱密鑰(鑒權口令字)是tanstaaf,伺服器發出的挑戰是<[email protected]>,客戶端對挑戰的應答是MD5("<[email protected]>tanstaaf") = ,這個正確的應答使其通過了認證。
散列演算法長期以來一直在計算機科學中大量應用,隨著現代密碼學的發展,單向散列函數已經成為信息安全領域中一個重要的結構模塊,我們有理由深入研究其設計理論和應用方法。
❸ 用C語言編寫以下演算法: 一個5個節點的有向圖,有向線段上有權重即T[i][j],它表示節點i對節點j的信任度。
寫C程序,隨機給出n*n的鄰接矩陣,並列印輸出鄰接矩陣,以及有向圖的邊的個數,每個頂點的度,並判斷該圖中是否存在Euler迴路: (1)如果為n階,則隨機產生一個n*n的鄰接矩陣; (2)輸出漏亂模鄰接矩陣,邊的個數,每個頂點的度以及圖中是否存在Euler迴路。 這個題目涉及到了兩個主要的知識點,一個是數據結構中的有向圖的鄰接矩陣的創建,還有就是離散數學中的Euler迴路的判定定理。
#include<stdio.h>
#include<stdlib.h>
#include<time.h>
#include<math.h>
#define n 5 //定義矩陣的階數n
typedef int ver;
typedef int edg; //定義有向圖的頂點和邊值為整形
typedef struct{
ver v[n]; //頂點
edg e[n][n]; //邊權
}graph; //定義鄰接矩陣的數據結構
void printgraph (graph G) //列印輸出鄰接矩陣
{
int i,j;
printf("頂點");
for(i=0;i<n;i++)
printf("%3d",i);
printf("\n");
for(i=0;i<n;i++)
{
printf("%4d",i);
for(j=0;j<n;j++)
printf("%3d",G.e[i][j]);
printf("\n");
}
}
void countD (graph G) //判斷有向圖的頂點的度,並判斷Euler迴路
{
int i,j,l;
int e=0,count=0;
int k; //計數器賦0
int c[n],d[n];
for (i=0;i<n;i++){
c[i]=0;
for (j=0;j<n;j++){
if (G.e[i][j]!=0)
c[i]=c[i]+1;
}
printf("頂點 %d 的出度為: %d \n",i,c[i]); //有向圖的任意頂點i的出度為鄰接矩陣中第i行不為0的數的個數
}
printf("\n");
for (j=0;j<n;j++){
d[j]=0;
for (i=0;i<n;i++){
if (G.e[i][j]!=0)
d[j]=d[j]+1;
}
printf("頂點 %d 的入度為: %d \n",j,d[j]); //有向圖的任意頂點j的入度為鄰接矩陣中第j列不為0的數的個陪氏數
}
for (l=0;l<n;l++){
if (c[l]==d[l])
count++;
else {
if (c[l]-d[l]==1)
e++;
else{
if (d[l]-c[l]==1)
e++;
}
}
}
k=0;
if (count==n) //判斷Euler迴路: 1:所有頂點的出度等於入度;
//2:有且僅有兩個點度數為奇數,返緩且一個出度比入度大一
k=1; //另一個入度比出度大一,其他的頂點出度等於入度
else {
if (e==2 && count==n-2)
k=1;
}
if (k==1)
printf("有向圖中存在Euler迴路\n");
else
printf("有向圖中不存在Euler迴路\n");
}
void main() //主函數
{
int i,j,temp;
graph G;
srand(time (NULL)); //隨機種子
for (i=0;i<n;i++){
for (j=0;j<n;j++)
G.e[i][j]=0;
}
for (i=0;i<n;i++)
G.v[i]=0;
for (i=0;i<n;i++){
for (j=0;j<n;j++){
do
{
temp = rand()%n; //隨機建造鄰接矩陣
if (G.v[i]<n)
{
G.e[i][j] = temp;
G.v[i]++;
break;
}
}
while (1);
}
}
printf("生成的有向圖鄰接矩陣為: \n");
printgraph(G);
countD (G); //調用子函數
printf("有向圖的邊數為:%d\n",n*(n-1)/2);
}
另外,團IDC網上有許多產品團購,便宜有口碑
❹ pso的來源背景
為了說明粒子群優化演算法的發展和形成背景,首先介紹一下早期的簡單模型,即Boid(Bird-oid)模型。這個模型是為了模擬鳥群的行為而設計的,它也是粒子群優化演算法的直接來源。
一個最簡單的模型是這樣的:每一個鳥的個體用直角坐標繫上的點表示,隨機地給它們賦一個初速度和初位置,程序運行的每一步都按照「最近鄰速度匹配」規則,很快就會使得所有點的速度變得一樣。因為這個模擬太簡單而且遠離真實情況,於是在速度項中增加了一個隨機變數,即在迭代的每一步,除了滿足「最近鄰速度匹配」之外,每一步速度還要添加一個隨機變化的量,這樣使得整個模擬看起來更為真實。
Heppner設計了一個「谷地模型」來模擬鳥群的覓食行為。假設在平面上存在一個「谷地」,即食物所在地,鳥群開始時隨機地分散在平面上,為了尋覓食物所在地,它們按照如下規則運動:
首先假設谷地的位置坐標為(x0,y0),單個鳥的位置和速度坐標分別為和(x,y),用當前位置到谷地的距離s:來衡量當前位置和速度的「好壞程度」,離谷地的距離越近,則越「好」,反之越「壞」。假設每一個鳥具有記憶能力,能夠記住曾經達到的最好位置,記作pBest,並記a為系統規定的速度調節常數,rand為一個[0,1]間的隨機數,設定速度項按照下述規則變化:
然後假設群體之間可以以某種方式通訊,每個個體能夠知道並記住到當前為止整個群體的最好位置,記為gBest,記b為系統規定的速度調節常數,Rand為一個[0,1]間的隨機數,則速度項在經過以上調整後,還必須按照下述規則變化:
在計算機上模擬的結果顯示:當a/b較大時,所有的個體很快地聚集到「谷地」上;反之,粒子緩慢地搖擺著聚集到「谷地」的四周。通過這個簡單的模擬,發現群體能很快地找到一個簡單函數(2-1)的最優點。受該模型啟發,Kennedy和Eberhart設計出了一種演化優化演算法,並通過不斷的試驗和試錯,最後將此演算法的基本型固定為:
其中符號的意義同上。研究者認為每個個體被抽象為沒有質量和體積,而僅僅具有速度和位置的微粒,故將此方法稱為「粒子群」優化演算法。
據此,可對粒子群演算法小結如下:粒子群演算法是一種基於種群的搜索過程,其中每個個體稱作微粒,定義為在D維搜索空間中待優化問題的潛在解,保存有其歷史最優位置和所有粒子的最優位置的記憶,以及速度。在每一演化代,微粒的信息被組合起來調整速度關於每一維上的分量,繼而被用來計算新的微粒位置。微粒在多維搜索空間中不斷改變它們的狀態,直到到達平衡或最優狀態,或者超過了計算限制為止。問題空間的不同維度之間唯一的聯系是通過目標函數引入的。很多經驗證據已經顯示該演算法是一個非常有效的優化工具。微粒群優化演算法的流程圖見圖2-1。
以下給出微粒群演算法的比較完整的形式化表述。在連續空間坐標系中,微粒群演算法的數學描述如下:設微粒群體規模為N,其中每個微粒在D維空間中的坐標位置向量表示為,速度向量表示為,微粒個體最優位置(即該微粒經歷過的最優位置)記為,群體最優位置(即該微粒群中任意個體經歷過的最優位置)記為。不失一般性,以最小化問題為例,在最初版本的微粒群演算法中,個體最優位置的迭代公式為:
群體最優位置為個體最優位置中最好的位置。速度和位置迭代公式分別為:
由於初始版本在優化問題中應用時效果並不太好,所以初始演算法提出不久之後就出現了一種改進演算法,在速度迭代公式中引入了慣性權重ω,速度迭代公式變為:
雖然該改進演算法與初始版本相比復雜程度並沒有太大的增加,但是性能卻有了很大的提升,因而被廣泛使用。一般的,將該改進演算法稱為標准微粒群演算法,而將初始版本的演算法稱為原始微粒群演算法。
通過分析PSO演算法的收斂行為,Clerc介紹了一種帶收縮因子的PSO演算法變種,收縮因子保證了收斂性並提高了收斂速度。此時的速度迭代公式為:
顯然,迭代公式(2-7)和(2-8)並無本質區別,只要適當選取參數,二者完全相同。
微粒群演算法有兩種版本,分別稱為全局版本和局部版本。在全局版本中,微粒跟蹤的兩個極值為自身最優位置pBest和種群最優位置gBest。對應的,在局部版本中,微粒除了追隨自身最優位置pBest之外,不跟蹤種群最優位置gBest,而是跟蹤拓撲鄰域中的所有微粒的最優位置nBest。對於局部版本,速度更新公式(2-7)變為:
其中為局部鄰域中的最優位置。
每一代中任意微粒迭代的過程見圖2-2所示。從社會學的角度來看速度迭代公式,其中第一部分為微粒先前速度的影響,表示微粒對當前自身運動狀態的信任,依據自身的速度進行慣性運動,因此參數ω稱為慣性權重(Inertia Weight);第二部分取決於微粒當前位置與自身最優位置之間的距離,為「認知(Cognition)」部分,表示微粒本身的思考,即微粒的運動來源於自己經驗的部分,因此參數c1稱為認知學習因子(也可稱為認知加速因子);第三部分取決於微粒當前位置與群體中全局(或局部)最優位置之間的距離,為「社會(Social)」部分,表示微粒間的信息共享與相互合作,即微粒的運動來源於群體中其他微粒經驗的部分,它通過認知模擬了較好同伴的運動,因此參數c2稱為社會學習因子(也可稱為社會加速因子)。
自從PSO演算法被提出以來,由於它直觀的背景,簡單而容易實現的特點,以及對於不同類型函數廣泛的適應性,逐漸得到研究者的注意。十餘年來,PSO演算法的理論與應用研究都取得了很大的進展,對於演算法的原理已經有了初步的了解,演算法的應用也已經在不同學科中得以實現。
PSO演算法是一種隨機的、並行的優化演算法。它的優點是:不要求被優化函數具有可微、可導、連續等性質,收斂速度較快,演算法簡單,容易編程實現。然而,PSO演算法的缺點在於:(1)對於有多個局部極值點的函數,容易陷入到局部極值點中,得不到正確的結果。造成這種現象的原因有兩種,其一是由於待優化函數的性質;其二是由於微粒群演算法中微粒的多樣性迅速消失,造成早熟收斂。這兩個因素通常密不可分地糾纏在一起。(2)由於缺乏精密搜索方法的配合,PSO演算法往往不能得到精確的結果。造成這種問題的原因是PSO演算法並沒有很充分地利用計算過程中獲得的信息,在每一步迭代中,僅僅利用了群體最優和個體最優的信息。(3)PSO演算法雖然提供了全局搜索的可能,但是並不能保證收斂到全局最優點上。(4)PSO演算法是一種啟發式的仿生優化演算法,當前還沒有嚴格的理論基礎,僅僅是通過對某種群體搜索現象的簡化模擬而設計的,但並沒有從原理上說明這種演算法為什麼有效,以及它適用的范圍。因此,PSO演算法一般適用於一類高維的、存在多個局部極值點而並不需要得到很高精度解的優化問題。
當前針對PSO演算法開展的研究工作種類繁多,經歸納整理分為如下八個大類:(1)對PSO演算法進行理論分析,試圖理解其工作機理;(2)改變PSO演算法的結構,試圖獲得性能更好的演算法;(3)研究各種參數配置對PSO演算法的影響;(4)研究各種拓撲結構對PSO演算法的影響;(5)研究離散版本的PSO演算法;(6)研究PSO演算法的並行演算法;(7)利用PSO演算法對多種情況下的優化問題進行求解;(8)將PSO演算法應用到各個不同的工程領域。以下從這八大類別著手,對PSO演算法的研究現狀作一梳理。由於文獻太多,無法面面俱到,僅撿有代表性的加以綜述。
❺ 在加密演算法中屬於公鑰密碼體制的是什麼
演算法介紹:
現有矩陣M,N和P,P=M*N。如果M(或N)的行列式為零,則由P和M(或P和N)計算N(或M)是一個多值問題,特別是M(或N)的秩越小,N(或M)的解越多。
由以上問題,假設Tom和Bob相互通信,現做如下約定:
1. 在正式通信之前,二人約定一個隨機奇異矩陣M。
2. Tom和Bob各自選取一個n*n的隨機矩陣作為他們的私有密鑰,設Tom的為A,Bob的為B。
3. 然後Tom計算矩陣Pa=A*M作為他的公鑰,Bob計算矩陣Pb=M*B作為他的公鑰。
4. 當Tom向Bob發送消息時,計算加密矩陣K=A*Pb,用K對消息加密後發送到Bob端,Bob收到消息後,計算解密矩陣K』= Pa*B,由以上代數關系可以看出,K= K』,也既加密和解密是逆過程,可以參照對稱加密標准AES。
5. Bob向Tom發送消息時,計算解密矩陣K= Pa*B,加密。Tom收到消息後計算解密矩陣K=A*Pb,原理同上。
演算法分析:
由以上介紹可容易看出,此演算法比RSA和ECC的加密效率要高4-6個數量級,且加密強度在增大n的基礎上,可獲得與以上兩演算法相當的加密強度。
該演算法仍在論證階段,歡迎此方面高手攜手參與或提出缺點.
email:[email protected]