粒子群算法求解优化问题(c实现)
来源:互联网 发布:mac网络连接鉴定失败 编辑:程序博客网 时间:2024/04/26 02:59
#include"stdio.h"#include "math.h"#include "stdlib.h"#include "time.h"#define N 100 //最大粒子数 #define D 10 //最大问题维数 double fitness(double x[],int n);typedef double (*funType)(double [],int n);double pso(funType fp,int n,double c1,double c2,double w,int m,int d,double xbest[]);int main(){double x[D];double f;f = pso(fitness,40,1.5,1.5,0.6,2000,1,x);printf("最优的x为:");for(int i=0;i<1;i++)printf("%f ",x[i]); printf("\n");printf("函数的最优值为:%f\n",f);return 0;}double fitness(double x[],int n){ //待优化函数 double f = 0;f = x[0]*x[0]-2*x[0]+1; // f(x) = x.^2-2*x+1return f;}/*fp: 待优化的目标函数n: 粒子数目c1,c2: 学习因子1,学习因子2w: 惯性权重M: 最大迭代次数d: 问题的维数x: 返回的最优解 */double pso(funType fp,int n,double c1,double c2,double w,int m,int d,double xbest[]){int i,j,t;double x[N][D],v[N][D];double pg[D]; //全局最优解double y[N]; //粒子适应度double p[N][D]; //step1.初始化种群的个体srand((int)time(0)); for(i=0;i<n;i++) for(j=0;j<d;j++){x[i][j] = rand()*1.0/RAND_MAX;v[i][j] = rand()*1.0/RAND_MAX;}//step2. 计算粒子适应度,初始化p和pg for(i=0;i<d;i++)pg[i] = x[n-1][i]; // pg为全局最优 for(i=0;i<n;i++){y[i] = fp(x[i],d);for(j=0;j<d;j++)p[i][j] = x[i][j];}for(i=0;i<n-1;i++){if(y[i]<y[n-1]){for(j=0;j<d;j++)pg[j] = x[i][j];}}//step3. 进入主循环,按照公式依次迭代 for(t=0;t<m;t++){ for(i=0;i<n;i++){for(j=0;j<d;j++){v[i][j] = w*v[i][j] + c1*(rand()/RAND_MAX)*(p[i][j]-x[i][j]) + c2*(rand()/RAND_MAX)*(pg[j]-x[i][j]); //更新 x[i][j] = x[i][j] + v[i][j];}if(fp(x[i],d)<y[i]){y[i] = fp(x[i],d);for(j=0;j<d;j++)p[i][j] = x[i][j];}if(y[i]<fp(pg,d)){for(j=0;j<d;j++)pg[j] = p[i][j];}} }for(i=0;i<d;i++) //最优解 xbest[i] = pg[i]; return fp(pg,d);}
0 0
- 粒子群算法求解优化问题(c实现)
- 粒子群算法求解优化问题(MATLAB)
- 粒子群算法解决函数优化问题
- 粒子群优化算法的JAVA实现
- 粒子群优化算法实现鸟群觅食
- 基于粒子群算法求解TSP问题(JAVA)
- 粒子群优化算法
- 粒子群优化算法
- 粒子群优化算法
- 粒子群优化算法
- 粒子群优化算法
- 粒子群优化算法
- 粒子群优化算法
- 粒子群优化算法
- C语言实现粒子群算法(PSO)
- C语言实现粒子群算法(PSO)
- 粒子群算法实例-求解函数极值
- 粒子群优化算法——java简单实现
- 【用Script Editor创建复杂的对话框】
- 每个程序员都应该知道的8个Linux命令
- 典型环节的传递函数及其电路图-20151103
- robotium 中获取相同类型的自控觉得获取方法(使用Android的ViewGroup控件的getChildAt(index)获取)
- mysql 学习记录(二十五)--mysql日志
- 粒子群算法求解优化问题(c实现)
- httpwebrequest详解【转】
- 内核pppoe接收发送数据包流程
- 进程间的通信机制
- 看不懂
- [刷题丶数据结构]1.栈和队列
- XMPP框架 微信项目开发之登录的实现——登录的步骤示例
- oracle备份
- Android TouchEvent事件传递机制