clc;
clear;
close all; %清屏,删除已有的变量和窗口,tic和toc用来给程序计时
%% 函数的定义;
%f= @(x)x .* sin(x) .* cos(2 * x) - 2 * x.* sin(3 * x); % 函数表达式
%figure(1);ezplot(f,[0,20]); %ezplot只用来画一次函数
f= @(a,b)(a .* sin(a) .* cos(2 * a) - 2 * a .* sin(3 * a)).*(b .* sin(b) .* cos(2 * b) - 2 * b .* sin(3 * b)); % 函数表达式
figure(1);
[x0_1, x0_2]=meshgrid(0:.2:20); %生成网格数据,即为一些采样点
y0=f(x0_1,x0_2); %将这些值带入函数计算
C=gradient(y0);
mesh(x0_1, x0_2,y0,C);
% colorbar;%可以看到色板,也可以给指定区域指定颜色
%set(h,'EdgeColor','b','FaceColor','w','MarkerEdgecolor','r','MarkerFacecolor','y')
xlabel('第一维度x的取值范围');
ylabel('第二维度y的取值范围');
zlabel('函数值');
hold on;
%% 开始种群等基本定义
N = 500; % 初始种群个数
d = 2; % 空间维数(参看上述的函数表达式)
ger = 300; % 最大迭代次数
plimit = [0,20;0,20]; % 设置位置参数限制(矩阵的形式可以多维),现在2X2矩阵
vlimit = [-1.5, 1.5;-1.5, 1.5]; % 设置速度限制
w = 0.8; % 惯性权重,个体历史成绩对现在的影响0.5~1之间
%还有自适应调整权重、随机权重等等
%(不同的权重设置很影响性能,按需要选取)
c1 = 0.5; % 自我学习因子
c2 = 0.5; % 群体学习因子
tic; %计时开始
for i = 1:d
x(:,i) = plimit(i, 1) + (plimit(i, 2) - plimit(i, 1)) * rand(N, 1);%初始种群的位置
end %rand(N,1)产生N行一列范围在1之内的随机数
%第一列,第二列:x=0+(20-0)*(1之内的随机数)
v = rand(N, d); % 初始种群的速度,500行2列分别在两个维度上
xm = x; % 每个个体的历史最佳位置
ym = zeros(1, d); % 种群的历史最佳位置,两个维度,设置为0
fxm = zeros(N, 1); % 每个个体的历史最佳适应度,设置为0
fym = -inf; % 种群历史最佳适应度,求最大值先设置成负无穷
plot3(xm(:,1),xm(:,2),f(xm(:,1),xm(:,2)), 'mo'); %r红,g绿,b蓝,c蓝绿,m紫红,y黄,k黑,w白
title('种群初始分布状态图'); %plot3在三维区域画出空间上的点,把格式设置成‘o’用来画每个位置的散点图
hold on;
figure(2);
mesh(x0_1, x0_2, y0);
hold on;
plot3(xm(:,1),xm(:,2),f(xm(:,1),xm(:,2)), 'ro');
hold on;
iter=1; %初始的迭代次数因为用while设置为一
times = 1;
record = zeros(ger, 1); %记录器
%% 迭代更新开始
while iter <= ger
fx = f(x(:,1),x(:,2)); % 代入x中的二维数据,算出个体当前适应度,为500行1列的数据
for i = 1:N %对每一个个体做判断
if fxm(i) < fx(i) %如果每个个体的历史最佳适应度小于个体当前适应度
fxm(i) = fx(i); % 更新个体历史最佳适应度,第一轮就是把小于零的清除
xm(i,:) = x(i,:); % 更新个体历史最佳位置
end
end
if fym < max(fxm) %种群历史最佳适应度小于个体里面最佳适应度的最大值
[fym, nmax] = max(fxm); % 更新群体历史最佳适应度,取出最大适应度的值和所在行数即位置
ym = xm(nmax, :); % 更新群体历史最佳位置
end
v = v * w + c1 * rand *(xm - x) + c2 * rand *(repmat(ym, N, 1) - x); % 速度更新公式,repmat函数把ym矩阵扩充成N行1列
%%边界速度处理
for i=1:d
for j=1:N
if v(j,i)>vlimit(i,2) %如果速度大于边界速度,则把速度拉回边界
v(j,i)=vlimit(i,2);
end
if v(j,i) < vlimit(i,1) %如果速度小于边界速度,则把速度拉回边界
v(j,i)=vlimit(i,1);
end
end
end
x = x + v; % 位置更新
for i=1:d
for j=1:N
if x(j,i)>plimit(i,2)
x(j,i)=plimit(i,2);
end
if x(j,i) < plimit(i,1)
x(j,i)=plimit(i,1);
end
end
end
record(iter) = fym; %记录最大值
if times >= 10
cla; %清除轴线图形
mesh(x0_1, x0_2, y0);
plot3(x(:,1),x(:,2),f(x(:,1),x(:,2)), 'ro');title('状态位置变化');
pause(0.5);
times=0;
end
iter = iter+1;
times=times+1;
end
%% 作图
figure(3);
plot(record); %画出最大值的变化过程
title('收敛过程');
figure(4);
mesh(x0_1, x0_2, y0);
hold on;
plot3(x(:,1),x(:,2),f(x(:,1),x(:,2)), 'ro');title('最终状态图');
disp(['最大值为:',num2str(fym)]);
disp(['最大值点位置:',num2str(ym)]);
toc; %计时结束
![avatar](https://profile-avatar.csdnimg.cn/4f53cad2241c45de9c6c65be36411126_m0_62143653.jpg!1)
Matlab仿真实验室
- 粉丝: 4w+
- 资源: 2478
最新资源
- 基于Matlab的通信边缘计算仿真与雷达跟踪算法研究:卡尔曼滤波系列及粒子群路径规划算法改进,基于Matlab的通信边缘计算仿真与雷达跟踪算法研究:卡尔曼滤波及算法改进,Matlab通信边缘计算通信仿
- C语言实现selcet服务端
- 狼群算法:实现柔性车间调度问题的MATLAB解决方案及源码学习资源,狼群算法在柔性车间调度中的优化应用:Matlab源码解析与实践指南,狼群算法求解柔性车间调度matlab版 有源码提供学习 可直接
- 【科研绘图系列】R语言绘制SCI论文图合集
- 基于改进人工鱼群法的机器人路径规划算法MATLAB复现,自适应视野与步长优化及启发选择机制应用,自适应视野与步长改进人工鱼群算法的机器人路径规划算法复现,MATLAB实现无人机、无人车、无人船应用,l
- 基于组态王的水蓄冷中央空调变频器控制系统设计组态方案,基于组态王的水蓄冷中央空调变频器控制系统设计组态方案,组态王设计变频器的水蓄冷中央空调控制系统设计组态设计 ,组态王设计; 变频器; 水蓄冷中央
- 永磁同步电机直接公式法计算:弱磁控制与最大转矩电流比(MTPA)结合应用 详细涵盖内环到外环电流环仿真步骤,参数变化影响解析,结合MATLAB实现的注意事项及独特补充内容 ,永磁同步电机公式法计算:M
- 三相逆变器下垂控制:负载突变分析与控制阶跃响应曲线图集(附结构控制图),三相逆变器下垂控制详解:负载突变分析与控制阶跃响应曲线图集(附结构图),三相逆变器之下垂控制?负载突变分析 图一控制阶跃信号为0
- python中国政府采购网爬虫
- 简历系统(基于springboot,mysql,java).zip
- the last-个人-计划备选
- Optislang电机:多目标协同优化NVH优化模型的实践与应用,基于Optislang技术的多目标优化电机NVH性能优化模型,Optislang电机 多目标优化电机NVH优化模型 ,Optislan
- 正激式小功率开关电路与开环闭环电压控制仿真对比研究:基于Matlab仿真平台的具体参数解析与效果评估,深入探究:正激式小功率开关电路Matlab仿真及其开环与闭环(电压闭环)对比仿真过程与具体参数详解
- 基于灰狼优化算法的支持向量机(GWO-SVM)教程:适合新手学习的完整代码实现,包含注释和可直接运行的数据接入,灰狼算法优化的支持向量机(GWO-SVM):适合新手学习,代码齐全,注释丰富,轻松运行
- 基于MATLAB Simulink的光伏逆变器低电压穿越仿真模型,采用boost加NPC拓扑结构与SVPWM控制,实现正负序分离及pll控制,基于MATLAB Simulink的光伏逆变器低电压穿越仿
- 交错并联Boost PFC仿真电路模型:双闭环控制方式下的输出电压与电感电流优化控制,优良波形及Simulink仿真实现,交错并联Boost PFC仿真电路模型:双闭环控制方式下的电压外环与电感电流内
资源上传下载、课程学习等过程中有任何疑问或建议,欢迎提出宝贵意见哦~我们会及时处理!
点击此处反馈
![feedback](https://img-home.csdnimg.cn/images/20220527035711.png)
![feedback](https://img-home.csdnimg.cn/images/20220527035711.png)
![feedback-tip](https://img-home.csdnimg.cn/images/20220527035111.png)