数学建模:MATLB粒子群算法求函数最值

一、问题简述

给定一个函数表达式(二维或三维),求该函数的最值。

用粒子群算法解决此类问题。

 

二、代码

clear
clc

f = @(x1, x2) 20 + x1.^2 + x2.^2 - 10*cos(2*pi.* x1) - 10*cos(2*pi.* x2);

%初始种群个数
N = 20;
%可行解维数
d = 2;
%迭代次数
G = 100;
%位置参数限制
limit = [-5.12, 5.12];
%每次移动距离参数限制
vlimit = [-0.5, 0.5];

%给二维的参数x1,x2按一定精度划分下标,用于绘制函数图像
x_plot1 = limit(1) : 0.05 : limit(2);
x_plot2 = limit(1) : 0.05 : limit(2);
%用meshgrid函数使得x_plot1, x_plot2不再是原本的一一对应组合,而是一个数组中的每个都与另一个数组中的所有项组合
[X1, X2] = meshgrid(x_plot1, x_plot2);
Y = f(X1, X2);

%惯性权重
w = 0.8;
%自我学习粒子
c1 = 0.5;
%群体学习粒子
c2 = 0.5;
%初始化第一代种群的位置和速度
per = limit(1) + rand(N, d) * (limit(2) - limit(1));
v = vlimit(1) + rand(N, 1) * (vlimit(2) - vlimit(1));

%历代个体函数值最小的位置
perMinX = zeros(N, d);
%历代种群函数值最小的位置
popMinX = zeros(1, d);

%当前种群的函数值最小的位置
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值