当前位置:网站首页>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);
}
边栏推荐
- Multithreading and high concurrency III: AQS underlying source code analysis and implementation classes
- RT thread bidirectional linked list (learning notes)
- Function and working principle of controller
- Moonbeam integrates coin98, giving users more choices on the multi chain road
- UI automation test framework construction - write an app automation
- Annual comprehensive analysis of China's audio market in 2022
- [proteus simulation] timer 1 external counting interrupt
- mysql----where 1=1是什么意思
- Is it true that qiniu business school gives away securities accounts? Is it safe to open an account
- Matlab exercises -- exercises related to symbolic operation
猜你喜欢
Multithreading and high concurrency IV: varhandle, strong weak virtual reference and ThreadLocal
27年,微软IE结束了!
Flexible IP network test tool -- x-launch
With the transformation of automatic empowerment, Feihe dairy accelerates its move towards digitalization!
[csp-j2020] excellent splitting
Digital promising, easy to reach, Huawei accelerates the layout of the commercial market with "five pole" star products
Games104 operation 2-colorgrading
Congratulations to myself, official account has more than ten thousand fans
恭喜我自己,公众号粉丝破万
June 27, 2022: give a 01 string with a length of N. now please find two intervals so that the number of 1 and the number of 0 in the two intervals are equal. The two intervals can intersect, but not c
随机推荐
Go language -select statement
一文详解|增长那些事儿
flinkcdc采集oracle,oracle数据库是CDB的
Google Earth engine (GEE) - global flood database V1 (2000-2018)
Matlab exercises -- routine operation of matrix
Multithreading and high concurrency II: detailed introduction to volatile and CAS
【Matlab红绿灯识别】红绿灯识别【含GUI源码 1908期】
Source code of live video system, countdown display, countdown of commodity spike
A queue of two stacks
Moonbeam集成Coin98,给予用户在多链道路上的更多选择
Google Earth Engine(GEE)——全球洪水数据库 v1 (2000-2018年)
RT thread bidirectional linked list (learning notes)
在线直播源码,JS动态效果之,侧边栏滚动固定效果
Code understanding: implementing volume models for hangwriten text recognition
The growth summer challenge is coming | learn and create two major tracks, and start the tutor registration!
2022-06-27:给出一个长度为n的01串,现在请你找到两个区间, 使得这两个区间中,1的个数相等,0的个数也相等, 这两个区间可以相交,但是不可以完全重叠,即两个区间的左右端点不可以完全一样。
Aspnetcoreratelimit rate limit interface access limit current limit control
灵活的IP网络测试工具——— X-Launch
Flinkcdc collects Oracle, and the Oracle database is CDB's
27年,微软IE结束了!