粒子群算法(PSO)程序(C#语言)

合集下载
  1. 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
  2. 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
  3. 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。

粒子群算法(PSO)程序(C#语言)

超简洁的随机粒子群算法,PSO,程序,C,语言, using System; using System.Linq;

using System.Collections.Generic;

class MyPSO {

const int NUM=40;//粒子数

const int DIM=30;//维数

const double c1=1.8;//参数

const double c2=1.8;//参数

static double xmin=-100.0;//位置下限

static double xmax=100.0;//位置上限

static double[] gbestx=new double[DIM];//全局最优位置

static double gbestf;//全局最优适应度

static Random rand=new Random();//用于生成随机数

class particle {//定义一个粒子

public double[] x=new double[DIM];//当前位置矢量

public double[] bestx=new double[DIM];//历史最优位置

public double f;//当前适应度

public double bestf;//历史最优适应度

}

particle[] swarm=new particle[NUM];//定义粒子群

double f1(double[] x) {//测试函数:超球函数

return x.Sum(a => a*a);

}

static void Main(string[] args) {

for(int i=0; i

gbestx[i]=rand.NextDouble()*(xmax-xmin)+xmin; gbestf=double.MaxValue;

for(int i=0; i

particle p1=new particle();

for(int j=0; j

p1.x[j]=rand.NextDouble()*(xmax-xmin)+xmin;

p1.f=f1(p1.x);

p1.bestf=double.MaxValue;

swarm[i]=p1;

}

for(int t=0; t<5000; t++) {

for(int i=0; i

particle p1=swarm[i];

for(int j=0; j

p1.x[j]+=c1*rand.NextDouble()*(p1.bestx[j]-p1.x[j]) +c2*rand.NextDouble()*(gbestx[j]-p1.x[j]);

p1.f=f1(p1.x);

if(p1.f

p1.x.CopyTo(p1.bestx, 0);

p1.bestf=p1.f;

}

if(p1.f

p1.x.CopyTo(gbestx, 0);

for(int j=0; j

p1.x[j]=rand.NextDouble()*(xmax-xmin)+xmin;

gbestf=p1.f;

}

}

}

Console.WriteLine("{0}", gbestf);

}

}

相关文档
最新文档