展开全部
%% 清空环境
clear
clc
tic
%% 参数初始化
% 粒子群算法中的两个参数
c1 = 1.49445;
c2 = 1.49445;
maxgen = 200; % 进化次数
sizepop = 20; % 种群规模
Vmax = 1;
Vmin = -1;
popmax = 5;
popmin = -5;
%% 产生初始粒子和速度
for i = 1:sizepop
% 随机产生一个种群
pop(i,:) = 5 * rands(1,2); % 初始种群
V(i,:) = rands(1,2); % 初始化速度
% 计算适应度
fitness(i) = fun(pop(i,:)); % 染色体的适应度
end
% 找最好的染色体
[bestfitness bestindex] = min(fitness);
zbest = pop(bestindex,:); % 全局最佳
gbest = pop; % 个体最佳
fitnessgbest = fitness; % 个体最佳适应度值
fitnesszbest = bestfitness; % 全局最佳适应度值
%% 迭代寻优
for i = 1:maxgen
for j = 1:sizepop
% 速度更新
V(j,:) = V(j,:) + c1*rand*(gbest(j,:) - pop(j,:)) + c2*rand*(zbest - pop(j,:));
V(j,find(V(j,:)>Vmax)) = Vmax;
V(j,find(V(j,:)<Vmin)) = Vmin;
%种群更新
pop(j,:) = pop(j,:) + 0.5*V(j,:);
pop(j,find(pop(j,:)>popmax)) = popmax;
pop(j,find(pop(j,:)<popmin)) = popmin;
% 自适应变异
if rand > 0.8
k = ceil(2*rand);
pop(j,k) = rand;
end
% 适应度值
fitness(j) = fun(pop(j,:));
end
% 个体最优更新
if fitness(j) < fitnessgbest(j)
gbest(j,:) = pop(j,:);
fitnessgbest(j) = fitness(j);
end
% 群体最优更新
if fitness(j) < fitnesszbest
zbest = pop(j,:);
fitnesszbest = fitness(j);
end
yy(i) = fitnesszbest;
end
toc
%% 结果分析
plot(yy);
title(['适应度曲线 ' '终止代数=' num2str(maxgen)]);
xlabel('进化代数');
ylabel('适应度');
fun函数如下
function y = fun(x)
y = -20*exp(-0.2*sqrt((x(1)^2+x(2)^2)/2)) - exp((cos(2*pi*x(1))+ cos(2*pi*x(2)))/2) + 20 + 2.71289;
clear
clc
tic
%% 参数初始化
% 粒子群算法中的两个参数
c1 = 1.49445;
c2 = 1.49445;
maxgen = 200; % 进化次数
sizepop = 20; % 种群规模
Vmax = 1;
Vmin = -1;
popmax = 5;
popmin = -5;
%% 产生初始粒子和速度
for i = 1:sizepop
% 随机产生一个种群
pop(i,:) = 5 * rands(1,2); % 初始种群
V(i,:) = rands(1,2); % 初始化速度
% 计算适应度
fitness(i) = fun(pop(i,:)); % 染色体的适应度
end
% 找最好的染色体
[bestfitness bestindex] = min(fitness);
zbest = pop(bestindex,:); % 全局最佳
gbest = pop; % 个体最佳
fitnessgbest = fitness; % 个体最佳适应度值
fitnesszbest = bestfitness; % 全局最佳适应度值
%% 迭代寻优
for i = 1:maxgen
for j = 1:sizepop
% 速度更新
V(j,:) = V(j,:) + c1*rand*(gbest(j,:) - pop(j,:)) + c2*rand*(zbest - pop(j,:));
V(j,find(V(j,:)>Vmax)) = Vmax;
V(j,find(V(j,:)<Vmin)) = Vmin;
%种群更新
pop(j,:) = pop(j,:) + 0.5*V(j,:);
pop(j,find(pop(j,:)>popmax)) = popmax;
pop(j,find(pop(j,:)<popmin)) = popmin;
% 自适应变异
if rand > 0.8
k = ceil(2*rand);
pop(j,k) = rand;
end
% 适应度值
fitness(j) = fun(pop(j,:));
end
% 个体最优更新
if fitness(j) < fitnessgbest(j)
gbest(j,:) = pop(j,:);
fitnessgbest(j) = fitness(j);
end
% 群体最优更新
if fitness(j) < fitnesszbest
zbest = pop(j,:);
fitnesszbest = fitness(j);
end
yy(i) = fitnesszbest;
end
toc
%% 结果分析
plot(yy);
title(['适应度曲线 ' '终止代数=' num2str(maxgen)]);
xlabel('进化代数');
ylabel('适应度');
fun函数如下
function y = fun(x)
y = -20*exp(-0.2*sqrt((x(1)^2+x(2)^2)/2)) - exp((cos(2*pi*x(1))+ cos(2*pi*x(2)))/2) + 20 + 2.71289;
追问
能给我发到邮、、箱吗?最好是能够直接打开运行的O(∩_∩)O谢谢啦
追答
已发 望采纳
富港检测技术(东莞)有限公司_
2024-04-02 广告
2024-04-02 广告
正弦振动多用于找出产品设计或包装设计的脆弱点。看在哪一个具体频率点响应最大(共振点);正弦振动在任一瞬间只包含一种频率的振动,而随机振动在任一瞬间包含频谱范围内的各种频率的振动。由于随机振动包含频谱内所有的频率,所以样品上的共振点会同时激发...
点击进入详情页
本回答由富港检测技术(东莞)有限公司_提供
推荐律师服务:
若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询