pso算法c++语言代码,一C++PSO(PSO)算法
收集和变化PSO算法,它可用于参考实施:
#include
#include
#include
#include
#include
#define rand_01 ((float)rand() / (float)RAND_MAX)
const int numofdims = 30;
const int numofparticles = 50;
using namespace std;
//typedef void (*FitnessFunc)(float X[numofparticles][numofdims], float fitnesses[numofparticles]);
void fitnessfunc(float X[numofparticles][numofdims], float fitnesses[numofparticles])
{
memset(fitnesses, 0, sizeof (float) * numofparticles);
for(int i = 0; i < numofparticles; i++)
{
for(int j = 0; j < numofdims; j++)
{
fitnesses[i] += X[i][j] * X[i][j]; //(pow(X[i][j], 2));
}
}
}
void rosenBroekFunc(float X[numofparticles][numofdims], float fitnesses[numofparticles])
{
float x1, x2, t1, t2;
memset(fitnesses, 0, sizeof (float) * numofparticles);
for(int i = 0; i < numofparticles; i++)
for(int j = 0; j < numofdims - 1; j++)
{
x1 = X[i][j];
x2 = X[i][j+1];
t1 = (x2 - x1 * x1);
t1 *= t1;
t1 *= 100;
t2 = x1 - 1;
t2 *= t2;
fitnesses[i] = t1 + t2;
}
}
float mean(float inputval[], int vallength)
{
float addvalue = 0;
for(int i = 0; i < vallength; i++)
{
addvalue += inputval[i];
}
return addvalue / vallength;
}
void PSO(int numofiterations, float c1, float c2,
float Xmin[numofdims], float Xmax[numofdims], float initialpop[numofparticles][numofdims],
float worsts[], float meanfits[], float bests[], float *gbestfit, float gbest[numofdims])
{
float V[numofparticles][numofdims] = {0};
float X[numofparticles][numofdims];
float Vmax[numofdims];
float Vmin[numofdims];
float pbests[numofparticles][numofdims];
float pbestfits[numofparticles];
float fitnesses[numofparticles];
float w;
float minfit;
int minfitidx;
memcpy(X, initialpop, sizeof(float) * numofparticles * numofdims);
fitnessfunc(X, fitnesses);
//rosenBroekFunc(X, fitnesses);
// fp(X, fitnesses);
minfit = *min_element(fitnesses, fitnesses + numofparticles);
minfitidx = min_element(fitnesses, fitnesses + numofparticles) - fitnesses;
*gbestfit = minfit;
memcpy(gbest, X[minfitidx], sizeof(float) * numofdims);
//设置速度极限
for(int i = 0; i < numofdims; i++)
{
Vmax[i] = 0.2 * (Xmax[i] - Xmin[i]);
Vmin[i] = -Vmax[i];
}
for(int t = 0; t < 1000; t++)
{
w = 0.9 - 0.7 * t / numofiterations;
//计算个体历史极小值
for(int i = 0; i < numofparticles; i++)
{
if(fitnesses[i] < pbestfits[i])
{
pbestfits[i] = fitnesses[i]; //pbestfits初始化尚未赋值
memcpy(pbests[i], X[i], sizeof(float) * numofdims);
}
}
for(int i = 0; i < numofparticles; i++)
{
for(int j = 0; j < numofdims; j++)
{
V[i][j] = min(max((w * V[i][j] + rand_01 * c1 * (pbests[i][j] - X[i][j])
+ rand_01 * c2 * (gbest[j] - X[i][j])), Vmin[j]), Vmax[j]);
X[i][j] = min(max((X[i][j] + V[i][j]), Xmin[j]), Xmax[j]);
}
}
fitnessfunc(X, fitnesses);
//rosenBroekFunc(X, fitnesses);
minfit = *min_element(fitnesses, fitnesses + numofparticles);
minfitidx = min_element(fitnesses, fitnesses + numofparticles) - fitnesses;
if(minfit < *gbestfit)
{
*gbestfit = minfit;
//cout << "It=" << t << "->" << minfit << endl;
memcpy(gbest, X[minfitidx], sizeof(float) * numofdims);
}
worsts[t] = *max_element(fitnesses, fitnesses + numofparticles);
bests[t] = *gbestfit;
meanfits[t] = mean(fitnesses, numofparticles);
}
}
int main()
{
time_t t;
srand((unsigned) time(&t));
float xmin[30], xmax[30];
float initpop[50][30];
float worsts[1000], bests[1000];
float meanfits[1000];
float gbestfit;
float gbest[30];
for(int i = 0; i < 30; i++)
{
xmax[i] = 100;
xmin[i] = -100;
}
for(int i = 0; i < 50; i++)
for(int j = 0; j < 30; j++)
{
initpop[i][j] = rand() % (100 + 100 + 1) - 100;
}
PSO(1000, 2, 2, xmin, xmax, initpop, worsts, meanfits, bests, &gbestfit, gbest);
cout<
for(int i = 0; i < 30; i++)
cout << gbest[i] << ", ";
cout << endl;
return 0;
}
版权声明:本文博主原创文章。博客,未经同意不得转载。
pso算法c++语言代码,一C++PSO(PSO)算法相关推荐
- 均匀不变lbp算法c语言代码,LBP原理介绍以及算法实现
有些读者可能会觉得奇怪,上次推送怎么就突然说起了双线性插值而不是继续介绍经典人脸识别的算法,其实是因为在学习圆形LBP算子的时候发现需要用到双线性插值于是顺带介绍了一下.(因为个人原因没经常看公众号的 ...
- 匈牙利算法c语言代码,漫谈匈牙利算法
匈牙利算法是由匈牙利数学家Edmonds于1965年提出,因而得名.匈牙利算法是基于Hall定理中充分性证明的思想,它是部图匹配最常见的算法,该算法的核心就是寻找增广路径,它是一种用增广路径求二分图最 ...
- c语言代码大全复制,垃圾回收算法实现之 - 复制算法(完整可运行C语言代码)...
GC 复制算法(Copying GC)是 Marvin L. Minsky 在 1963 年研究出来的算法.说得简单点,就是只把某个空间里的活动对象复制到其他空间,把原空间里的所有对象都回收掉.这是一 ...
- 统计学习导论之R语言应用(四):分类算法R语言代码实战
统计学习导论之R语言应用(ISLR) 参考资料: The Elements of Statistical Learning An Introduction to Statistical Learnin ...
- horspool算法C语言代码,sfa3
习题6.1 1. hint sort the list and then simply return the n/2th elements of the sorted list. 效率: 假设排序算法 ...
- 快速pow算法c语言_嵌入式必知基础算法(二)
七.二分法 在一个数组中,知道一个数值,想确定他在数组中的位置下标,如数组:A[5] = {1,2,6,7,9};我知道其中的值为6,那么他的下标位置就是3. 八.限幅滤波法 对于随机干扰 , 限幅滤 ...
- 异或校验算法 c语言程序,C# 异或校验算法
C# 的异或校验算法 直接上代码 public partial class FormCRC : Form { public FormCRC() { InitializeComponent(); } p ...
- 栅格法路径算法C语言,基于地图栅格与QPSO算法结合的机器人路径规划方法与流程...
本发明属于机器人路径规划领域,提出一种基于地图栅格与QPSO结合的机器人路径规划方法. 背景技术: 移动机器人路径规划是寻找一条无碰撞的可行路径问题的方法.近些年,群智能优化算法逐渐成为移动机器人路径 ...
- 【数据结构与算法——C语言版】1. 数据结构与算法简介
概念 数据结构:"一组数据的存储结构" 算法:"操作数据的一组方法" 数据结构是为算法服务的,算法是要作用再特定的数据结构上的. 简言之,在编程实践中,我们可能 ...
- php 红包算法,PHP语言:实现微信红包拆分算法
本文主要向大家介绍了PHP语言:实现微信红包拆分算法,通过具体的内容向大家展示,希望对大家学习php语言有所帮助. · 修复最后一个红包输出未保留2位数 · 修复领取的红包金额低于最小红包限制 * 红 ...
最新文章
- 2018,人工智能在清算中落地
- bzoj1110: [POI2007]砝码Odw
- c++调用Libsvm
- Docker快速搭建邮件服务器Modoboa
- 如何让li中内容超出部分显示为...?
- linux 磁盘分区,格式化,挂载
- Django学习入门步骤 教程步骤 python
- html修改字体大小到10像素,ps怎么修改字体大小
- access9磅字体是多_字体大小(几号-几磅)
- 安装Mendeley后Word中没有出现对应的Mendeley插件
- Eclipse常用便捷设置
- 中级程序员还应该如何提高自己
- mvp的全称_MVP是什么的缩写?王者荣耀中的MVP是什么意思?
- 介绍一下国家葡萄产业体系,列出全世界最重要的葡萄育种单位。
- javaweb-day03-7(基础加强-泛型)
- 12月25日科技资讯|华为辟谣将发布石墨烯电池手机;梁建章回应携程杀熟;GitLab 12.6 发布
- 当前普遍使用的微型计算机硬件,计算机应用基础电大考试试题
- 5G赋能行业:丢掉“传统”外衣,向“智”造加速
- VAS开启LaFi空投——助力打造区块链数字黄金新生态
- 通达oa php_PHP的版本选择 discuz x3.2 php版本 通达oa php版本 最新版
热门文章
- sql management studio 附加mdf文件出错的解决办法
- Exchange Server 2013日记功能
- ### 阅读之痕-2013/11
- (转)android WebView loadData不能解析(找不到网页)
- 动态加载JS脚本【转】
- p值 t值 统计_非统计师的P值
- java职业技能了解精通_如何通过精通数字分析来提升职业生涯的发展,第8部分...
- 如何使用Elasticsearch,Logstash和Kibana实时可视化Python中的日志
- 使用fetch封装请求_关于如何使用Fetch API执行HTTP请求的实用ES6指南
- json数据转换成表格_电子表格会让您失望吗? 将行数据转换为JSON树很容易。