粒子群算法是一门新兴算法,此算法与遗传算法有很多相似之处,其收敛于全局最优解的概率很大。
①相较于传统算法计算速度非常快,全局搜索能力也很强;
②PSO对于种群大小不十分敏感,所以初始种群设为500-1000,速度影响也不大;
③粒子群算法适用于连续函数极值问题,对于非线性、多峰问题均有较强的全局搜索能力。
作为举例说明,本文将用粒子群算法,求解Rastrigin函数f(x)=x²-10*cos(2πx)+10在区间[-6,6]的极小值。
先用matlab画出这个函数的图像,便于我们直观地观察:
该函数的全局最小值为0,在x=0处取得
下面,用C#实现求极值。测试环境VS2015
using System;
using System.Linq;
using System.Threading;
namespace PSO_FunctionTest
{
class Program
{
public static double[] xlimit = new double[2] {
-6, 6 }; //位置边界设置
public static double[] vlimit = new double[2] {
-2, 2 }; //速度边界设置
public static int generation; //迭代次数
static void Main(string[] args)
{
int popsize; //种群规模
double Wmax=0.95; //惯性权重设置
double Wmin = 0.45;
double C1 = 2; //自我学习因子
double C2 = 2; //群体学习因子
Random rand = new Random();
Console.WriteLine("请输入种群规模大小:");
popsize = Convert.ToInt32(Console.ReadLine());
Console.WriteLine("请输入迭代次数:");
generation = Convert.ToInt32(Console.ReadLine());
Console.WriteLine("算法运行中,请稍后......");