信任函数算法
❶ 什么叫模糊集对分析法
屁屁说的应该是模糊综合评价与模糊集对分析不是一种方法,虽然都用到模糊数学的知识。其它几个也大致是找篇文章的摘要就贴上的。我想简单说几点:
谈到模糊集对分析理论先要说集对分析理论。
集对分析理论(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]