/**
* @author lbx1998
* 求二元函数:f(x,y) = x^3 + 3xy^2 - 15x - 12y 的最大值
*/
public class EX {
int n; //粒子数量
ParticleState[] p; //粒子数组
ParticleState[] v; //速度数组
ParticleState[] pbest; //粒子最优解
ParticleState gbest; //全局最优解
double vmax; //最大速度
int c1,c2; //学习参数
public static void main(String[] args) {
EX e = new EX();
e.init();
e.PSO(200);
}
//适应函数
public void fitnessFunction() {
for(int i = 0; i<n; i++) {
p[i].f = p[i].x*p[i].x*p[i].x + 3*p[i].x*p[i].y*p[i].y - 15*p[i].x -12*p[i].y;
}
}
//初始化
public void init() {
n = 1000;
p = new ParticleState[n];
v = new ParticleState[n];
pbest = new ParticleState[n];
gbest = new ParticleState(0.0, 0.0);
c1=c2=3;
vmax = 0.1;
for(int i=0;i<n;i++) {
p[i]=new ParticleState(Math.random(),Math.random());
v[i]=new ParticleState(Math.random()*vmax,Math.random()*vmax);
}
fitnessFunction();
//初始化粒子与集群的最优值
gbest.f = Integer.MIN_VALUE;
for(int i=0;i<n;i++) {
pbest[i]=p[i];
if(p[i].f > gbest.f) {
gbest = p[i];
}
}
System.out.println("初始最优值:" +gbest.x+" "+gbest.y+" "+" "+gbest.f);
}
//粒子群算法 max-迭代次数
public void PSO(int max) {
for(int i=0;i<max;i++) {
double w = 0.3;//惯性权重
for(int j=0;j<n;j++) {
//更新粒子速度
double vx=w*v[j].x+c1*Math.random()*(pbest[j].x-p[j].x)+c2*Math.random()*(gbest.x-p[j].x);
double vy=w*v[j].y+c1*Math.random()*(pbest[j].y-p[j].y)+c2*Math.random()*(gbest.y-p[j].y);
if (vx>vmax) vx=vmax;
if (vy>vmax) vy=vmax;
v[j] = new ParticleState(vx,vy);
//更新粒子的位置
p[j].x += v[j].x;
p[j].y += v[j].y;
}
fitnessFunction();
//更新个体极值和群体极值
for(int j=0;j<n;j++) {
if(p[i].f > pbest[i].f) {
pbest[i] = p[i];
}
if(p[i].f > gbest.f) {
gbest = p[i];
}
}
System.out.println("==="+i+"=== "+gbest.x+" "+gbest.y+" "+" "+gbest.f);
}
}
}
//粒子的状态类
class ParticleState{
public double x;
public double y;
public double f;//适应度,即求解函数值
ParticleState(double x, double y) {
this.x = x;
this.y = y;
}
}
西北工业大学软件学院计算智能方法实验粒子群算法.zip
需积分: 27 43 浏览量
2020-07-13
16:07:59
上传
评论 1
收藏 186KB ZIP 举报
nature_l
- 粉丝: 69
- 资源: 48
最新资源
- 基于stm32f103c单片机+MPU6050+0.96英寸OLED显示屏双柄遥控器硬件(原理图+PCB)工程文件.zip
- 整理的关于少儿编程的学习路径,以及如何在小升初,初升高和大学充分的利用起来编程经验的优势
- 足球比赛结果统计表2006-2011年大约28W场比赛
- 基于PHP+mysql的社区交流系统(源代码)
- yolov5,SSD 可能使用到的一些代码
- 一键批量生成多层次文件夹结构,使用Python脚本实现嵌套文件夹批量生成
- 基于c51单片机+DS1302+DHT11温湿度模块+LCD1602显示的万年历硬件原理图+BOM+软件程源码序+仿真图.zip
- NSGA2的MATLAB代码
- Messagepassingtest_GCN_DGL.py
- Sh,Docker 运维好帮手,一招通过 sh 脚本批量快速启动和重启多个Docker 容器
资源上传下载、课程学习等过程中有任何疑问或建议,欢迎提出宝贵意见哦~我们会及时处理!
点击此处反馈