群体算法
1. 粒子群算法(一):粒子群算法概述
本系列文章主要针对粒子群算法进行介绍和运用,并给出粒子群算法的经典案例,从而进一步加深对粒子群算法的了解与运用(预计在一周内完成本系列文章)。主要包括四个部分:
粒子群算法也称粒子群优化算法(Particle Swarm Optimization, PSO),属于群体智能优化算法,是近年来发展起来的一种新的进化算法(Evolutionary Algorithm, EA)。 群体智能优化算法主要模拟了昆虫、兽群、鸟群和鱼群的群集行为,这些群体按照一种合作的方式寻找食物,群体中的每个成员通过学习它自身的经验和其他成员的经验来不断地改变搜索的方向。 群体智能优化算法的突出特点就是利用了种群的群体智慧进行协同搜索,从而在解空间内找到最优解。
PSO 算法和模拟退火算法相比,也是 从随机解出发,通过迭代寻找最优解 。它是通过适应度来评价解的品质,但比遗传算法规则更为简单,没有遗传算法的“交叉”和“变异”,它通过追随当前搜索到的最大适应度来寻找全局最优。这种算法以其 容易实现、精度高、收敛快 等优点引起了学术界的重视,并在解决实际问题中展示了其优越性。
在粒子群算法中,每个优化问题的解被看作搜索空间的一只鸟,即“粒子”。算法开始时首先生成初始解,即在可行解空间中随机初始化 粒子组成的种群 ,其中每个粒子所处的位置 ,都表示问题的一个解,并依据目标函数计算搜索新解。在每次迭代时,粒子将跟踪两个“极值”来更新自己, 一个是粒子本身搜索到的最好解 ,另一个是整个种群目前搜索到的最优解 。 此外每个粒子都有一个速度 ,当两个最优解都找到后,每个粒子根据如下迭代式更新:
其中参数 称为是 PSO 的 惯性权重(inertia weight) ,它的取值介于[0,1]区间;参数 和 称为是 学习因子(learn factor) ;而 和 为介于[0,1]之间的随机概率值。
实践证明没有绝对最优的参数,针对不同的问题选取合适的参数才能获得更好的收敛速度和鲁棒性,一般情况下 , 取 1.4961 ,而 采用 自适应的取值方法 ,即一开始令 , 使得 PSO 全局优化能力较强 ;随着迭代的深入,递减至 , 从而使得PSO具有较强的局部优化能力 。
参数 之所以被称之为惯性权重,是因为 实际 反映了粒子过去的运动状态对当前行为的影响,就像是我们物理中提到的惯性。 如果 ,从前的运动状态很少能影响当前的行为,粒子的速度会很快的改变;相反, 较大,虽然会有很大的搜索空间,但是粒子很难改变其运动方向,很难向较优位置收敛,由于算法速度的因素,在实际运用中很少这样设置。也就是说, 较高的 设置促进全局搜索,较低的 设置促进快速的局部搜索。
2. 群体智能算法属于新型计算模型吗
群体智能算法又称为启发式算法,是现在广泛应用于各个领域的先进算法。
智能算法是一种计算方法,计算模型是计算方法里可能用到的某种模型,不能说他们两个谁是谁,但可以说某种群体智能算法用到了某某计算模型
3. 常见的群体智能算法不包括什么算法
遗传算法。
根据今日头条查询,遗传算法是进化算法的一种,是不属于群体智能算法的。
遗传算法最早是由美国的Johnholland于20世纪70年代提出,该算法是根据大自然中生物体进化规律而设计提出的。
4. 如何理解算法多样化和算法优化之间的关系
1.算法多样化是“群体多样化”
算法多样化不是要求每个学生都想出或都掌握两种或多种算法。“一个学生也许只想到了一种算法,许多学生也许就有多种算法,实施算法多样法时,教师不必将每一种算法都挖掘出来,更不能凭教师自己的想象给学生列举出千奇百怪、不合逻辑的算法;教师不要生硬地套出学生的多种算法;也不要求学生都要掌握多种算法。”也就是说算法多样化是指“群体多样化”,而不是“个体多样化”。
2.算法多样化与算法优化
有教师认为算法优化就是跟着课本走,就是“算法唯一化”。我们说的算法优化有两条标准,一是尽可能地选择通法、通则,具有一般性,而不是适用于特殊数据的特殊算法。二是尽可能选择便于大多数同学接受、理解、掌握的算法。第二条标准再具体些,又可细化为两个方面:即算理上容易解释,容易理解;算法上简捷,容易操作,容易掌握。有必要指出,这里的“优化”,不同于数学上的“最优化”,它是相对而言的,但又难以或者说不必精确刻画的,其结果还常常不是唯一的。
算法的优化可以是算法多样化的一个后继步骤,算法只有在优化后多样化才有意义。新课标提倡算法的多样化,允许学生选择自己喜爱的算法,使得有些教师误在课堂教学时,片面追求形式各异的算法。虽说培养了学生的思维能力和创新精神,但明显地思维难度太大,导致当堂课的教学内容不能完成。并且一些思维能力欠缺的学生脑筋转不过来,直被说得云里雾里,教学效果不够理想。算法的多样化应是学生在探索算法的过程中自然形成的,而不是生硬地套出多种算法。在引导学生“群体算法多样化”后可以问一句:“你觉得哪种方法比较好?为什么?”这样,学生就在不知不觉中学会优化的方法了。
5. 群体数据的排序算法有哪些
//群体数据的排序与查找
//1.直接插入排序的算法实现:
void InsertSort(int arrForSort[],int nLength)
{
int i,j,temp;
for(i=1;i<nLength;i++) //遍历整个序列
{
temp=arrForSort[i];
for(j=i;j>0&&temp<arrForSort[j-1];j--) //将第i个元素插入到合适的位置
arrForSort[j]=arrForSort[j-1];
arrForSort[j]=temp;
}
}
//2.直接选择排序的算法实现:
void SelectSort(int arrForSort[],int nLength)
{
int min,temp,
i,j;
for(i=0;i<nLength-1;i++)
{
min=i;
for(j=i+1;j<nLength;j++) //选出具有最小值的元素的下标标号
if(arrForSort[j]<arrForSort[min]) min=i;
temp=arrForSort[i]; //第i个元素与具有最小值的元素进行交换
arrForSort[i]=arrForSort[min];
arrForSort[min]=temp;
}
}
//3.起泡法排序的算法实现:
void BubbleSort(int arrForSort[],int nLength)
{
int i,j,temp;
i=nLength-1;
while(i>0)
{
for(j=0;j<i;j++) //1次起泡的过程
{
if(arrForSort[j+1]<arrForSort[j]) //逆序交换
{temp=arrForSort[j+1];<br/> arrForSort[j+1]=arrForSort[j];<br/> arrForSort[j]=temp;}
}
i--; //准备下一次起泡序列的长度
}
}
//4.希尔排序的算法实现:
void ShellSort(int arrForSort[],int nLength)
{
int k,j,i,temp;
k=nLength/2; //设置初始子序列的间隔
while(k>0)
{
for(j=k;j<nLength;j++) //子序列的插入排序
{
temp=arrForSort[j];i=j-k;
while((i>=0)&&(arrForSort[i]>temp))
{
arrForSort[i+k]=arrForSort[i];i=i-k;
}
arrForSort[i+k]=temp;
}
k=k/2; //重新设置子序列的间隔
}
return;
}
//5.顺序查找的实现
int SequenceSearch(int arrForSearch[],int nLength,int nKey)
{
int i;
for(i=0;i<nLength;i++) //遍历整个序列
if(arrForSearch[i]==nKey) return i;
return -1;
}
//6.折半查找的算法实现
int MiddleSearch(int arrForSearch(int arrForSearch[],int nLength,int nKey)
{
int mid,top,bottom;
bottom=0; //设置首末元素下标
top=nLength-1;
while(bottom<=top)
{
mid=(bottom+top)/2; //取序列中间元素下标
if(arrForSearch[mid]==nKey) return mid; //如果找到该元素,返回其下标
else if(arrForSearch[mid]>nKey) top=mid-1; //在前半个序列中继续查找
else bottom=mid+1;
}
return -1;
}
6. 优化算法与群体智能之间有什么关系
群体智能算法与大多数基于梯度的优化算法不同,群体智能算法依靠的是概率搜索算法。
与梯度算法及传统演化算法相比优点:
没有集中控制约束,不会因为个体的故障影响整个问题的求解。
以非直接信息交流的方式确保了系统的可扩展性。
并行分布式算法模型,可充分利用多处理器。
对问题定义的连续性无特殊要求。算法实现简单。
7. 几大群体智能算法异同
1.都是一类不确定算法。不确定性体现了自然界生物的生物机制,并且在求解某些特定问题方面优于确定性算法。仿生优化算法的不确定性是伴随其随机性而来的,其主要步骤含有随机因素,从而在算法的迭代过程中,事件发生与否有很大的不确定性。
2.都是一类概率型的全局优化算法。非确定算法的优点在于算法能有更多机会求解全局最优解。
3.都不依赖于优化问题本身的严格数学性质。在优化过程中都不依赖于优化问题本身严格数学性质(如连续性,可导性)以及目标函数和约束条件精确的数学描述。
4.都是一种基于多个智能体的仿生优化算法。仿生优化算法中的各个智能体之间通过相互协作来更好的适应环境,表现出与环境交互的能力。
8. 群体智能算法在什么时候容易陷入局部最优
一般最优化算法只能求局部最优值,很难求出全局最优值。
许多算法当找到局部最优点后,就不能再继续寻找了,这叫陷入局部极值。
9. 常见的群体智能算法不包括什么
遗传算法。
目前生物学里,群体智能算法中最常见的是蚁群算法、粒子群算法、蜂群算法,所以遗传算法不算常见的群体智能算法。
群体智能算法是通过模拟生物种群(或自然、人工群体)的行为,按照特定的相互作用机制来完成特定种群所给任务的优化算法。
10. 常见的群体智能算法不包括
有一些并不是广泛应用的群体智能算法,比如萤火虫算法、布谷鸟算法、蝙蝠算法以及磷虾群算法等等。
粒子群算法(particle swarm optimization,PSO)是计算智能领域中的一种生物启发式方法,属于群体智能优化算法的一种,常见的群体智能优化算法主要有如下几类:
设想这样一个场景:一群鸟在随机的搜索食物。在这个区域里只有一块食物,所有的鸟都不知道食物在哪。但是它们知道自己当前的位置距离食物还有多远。那么找到食物的最优策略是什么?最简单有效的就是搜寻目前离食物最近的鸟的周围区域。
Step1:确定一个粒子的运动状态是利用位置和速度两个参数描述的,因此初始化的也是这两个参数;
Step2:每次搜寻的结果(函数值)即为粒子适应度,然后记录每个粒子的个体历史最优位置和群体的历史最优位置;
Step3:个体历史最优位置和群体的历史最优位置相当于产生了两个力,结合粒子本身的惯性共同影响粒子的运动状态,由此来更新粒子的位置和速度。
位置和速度的初始化即在位置和速度限制内随机生成一个N x d 的矩阵,而对于速度则不用考虑约束,一般直接在0~1内随机生成一个50x1的数据矩阵。
此处的位置约束也可以理解为位置限制,而速度限制是保证粒子步长不超限制的,一般设置速度限制为[-1,1]。
粒子群的另一个特点就是记录每个个体的历史最优和种群的历史最优,因此而二者对应的最优位置和最优值也需要初始化。其中每个个体的历史最优位置可以先初始化为当前位置,而种群的历史最优位置则可初始化为原点。对于最优值,如果求最大值则初始化为负无穷,相反地初始化为正无穷。
每次搜寻都需要将当前的适应度和最优解同历史的记录值进行对比,如果超过历史最优值,则更新个体和种群的历史最优位置和最优解。
速度和位置更新是粒子群算法的核心,其原理表达式和更新方式:
每次更新完速度和位置都需要考虑速度和位置的限制,需要将其限制在规定范围内,此处仅举出一个常规方法,即将超约束的数据约束到边界(当位置或者速度超出初始化限制时,将其拉回靠近的边界处)。当然,你不用担心他会停住不动,因为每个粒子还有惯性和其他两个参数的影响。
粒子群算法求平方和函数最小值,由于没有特意指定函数自变量量纲,不进行数据归一化。