当前位置:网站首页>Standard particle swarm optimization C language program
Standard particle swarm optimization C language program
2022-06-28 04:49:00 【Lzg_ n】
// The library files
#include"stdio.h"
#include"stdlib.h"
#include"time.h"
#include"math.h"
// Random number definition
#define rdint(i) (rand()%(int)(i))
#define rdft()
(float)((double)rdint(16384)/(16383.0))
#define rnd(a,b)
(rdint((int)(b)-(int)(a)+1)+(int)(a))
// Macro definition
#define POPSIZE 20
#define DIMENSION 2
// Global variable definition
float W=1.0;
float C1=1.8;
float C2=1.8;
float VMAX=2;
float XMIN=-2.0;
float XMAX=2.0;
float P[DIMENSION];
float PBEST;
struct indi
{
float number[DIMENSION];
float best[DIMENSION];
float bestfitness;
float fitness;
float speed[DIMENSION];
}individual[POPSIZE];
void initiate(void);
void calculation(int number);
void globalbest(int number);
void localbest(int number);
// Program initialization definition
void initiate()
{
int i,j;
for(i=0;i<POPSIZE;i++)
for(j=0;j<DIMENSION;j++)
individual[i].number[j]=rdft()*(XMAX-XMIN)+XMIN;
for(i=0;i<POPSIZE;i++)
for(j=0;j<DIMENSION;j++)
individual[i].speed[j]=VMAX*rdft();
for(i=0;i<POPSIZE;i++)
for(j=0;j<DIMENSION;j++)
individual[i].best[j]=individual[i].number[j];
for(i=0;i<POPSIZE;i++)
calculation(i);
for(i=0;i<POPSIZE;i++)
individual[i].bestfitness=individual[i].fitness;
globalbest(0);
}
// Particle history optimal position modification program
void localbest(int number)
{
int i;
if(individual[number].bestfitness>individual[number].fitness)
for(i=0;i<DIMENSION;i++)
individual[number].best[i]=individual[number].number[i];
individual[number].bestfitness=individual[number].fitness;
}
// Population history optimal location modification program
void globalbest(int number)
{
int i,j;
float s=0;
int flag=0;
if(number==0)
{
s=individual[0].fitness;
flag=0;
for(i=1;i<POPSIZE;i++)
if(individual[i].fitness<s)
{
s=individual[i].fitness; flag=i;
}
for(i=0;i<DIMENSION;i++)
P[i]=individual[flag].number[i];
PBEST=individual[flag].fitness;
}
else
{
for(i=0;i<POPSIZE;i++)
if(individual[i].bestfitness<PBEST)
{
for(j=0;j<DIMENSION;j++)
P[j]=individual[i].best[j];
PBEST=individual[i].bestfitness;
}
}
}
// Fitness function calculation program
void calculation(int num)
{
int i;
float s=0.0,h=0.0; s=pow(individual[num].number[0]+individual[num].number[1]+1.0,2.0)*(19.0-14.0*individual[num].number[0]+3.0*pow(individual[num].number[0],2.0)-14.0*individual[num].number[1]+6.0*individual[num].number[0]*individual[num].number[1]+3.0*pow(individual[num].number[1],2.0))+1.0;
h=30.0+pow(2.0*individual[num].number[0]-3.0*individual[num].number[1],2.0)*(18.0-32.0*individual[num].number[0]+12.0*pow(individual[num].number[0],2.0)+48.0*individual[num].number[1]-36.0*individual[num].number[0]*individual[num].number[1]+27.0*pow(individual[num].number[1],2.0)
);
individual[num].fitness=s*h;
}
// The main program
main()
{
int i,j,k,t,total=0;
float sum=0;
for(j=0;j<50;j++)
{
initiate();
for(i=0;i<500;i++)
{
W=1.0-i*0.6/499;
if((PBEST-3.0)<0.0001)
{
total++;
sum=sum+i;
break;
}
else
{
for(k=0;k<POPSIZE;k++)
{
for(t=0;t<DIMENSION;t++)
{
dividual[k].speed[t]=W*individual[k].speed[t]+C1*rdft()*(individual[k].best[t]-individual[k].number[t])+C2*rdft()*(P[t]-individual[k].number[t]);
if(individual[k].speed[t]>VMAX)
individual[k].speed[t]=VMAX;
individual[k].number[t]=individual[k].number[t]+individual[k].speed[t];
if(individual[k].number[t]<XMIN)
individual[k].number[t]=2*XMIN-individual[k].number[t];
if(individual[k].number[t]>XMAX)
individual[k].number[t]=2*XMAX-individual[k].number[t];
}
calculation(k);
localbest(k);
}
globalbest(1);
}
}
printf("%d,%f\t",i,PBEST);
}
printf("Total number is%d\n",total);
printf("Sum is %f\n",sum);
printf("Average is %f\n",sum/total);
}
边栏推荐
- Why is the frame rate calculated by opencv wrong?
- 华为9年经验的软件测试总监工作感悟—写给还在迷茫的朋友
- 玩转双指针
- 在线直播源码,JS动态效果之,侧边栏滚动固定效果
- Difference between curdate() and now()
- Oracledata installation problems
- How to traverse collections Ordereddict, taking it and forgetting items
- Performance optimization and implementation of video codec
- 多线程实现 重写run(),怎么注入使用mapper文件操作数据库
- 浅析搭建视频监控汇聚平台的必要性及场景应用
猜你喜欢

如何遍历collections.OrderedDict,服了又忘记items

The company leader said that if the personal code exceeds 10 bugs, he will be dismissed. What is the experience?

Project practice! Teach you JMeter performance test hand in hand

Simple factory mode

Secouer le son et se battre ~ prêter attention au blogueur

MySQL gets the current date of the year

Huawei's 9-year experience as a software testing director

mysql----where 1=1是什么意思

Web3来临时的风口浪尖

Performance optimization and implementation of video codec
随机推荐
[CSP-J2020] 优秀的拆分
UI自动化测试框架搭建 —— 编写一个APP自动化
Multithreading and high concurrency III: AQS underlying source code analysis and implementation classes
Web3来临时的风口浪尖
Has anyone ever used CDC to synchronize to MySQL with a deadlock?
浅析搭建视频监控汇聚平台的必要性及场景应用
inherit
Google Earth Engine(GEE)——全球洪水数据库 v1 (2000-2018年)
Why is the frame rate calculated by opencv wrong?
Matlab exercises -- basic data processing
[noip2002 popularization group] cross the river pawn
One article explains in detail | those things about growth
Lazy loading and preloading of pictures
Live online source code, JS dynamic effect, sidebar scrolling fixed effect
CDC全量抽取mysql数据时,怎么才能加快ChunkSplitter呢?
Oracledata installation problems
Where does the storm go? Whose pot is the weather forecast wrong?
Audio and video technology development weekly
Database garbled
E-week finance Q1 mobile banking has 650million active users; Layout of financial subsidiaries in emerging fields