粒子群算法(PSO)程序(C#语言)
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 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); } }