茶碗余香 2023-03-17 16:39 采纳率: 50%
浏览 65
已结题

关于有关粒子群填入参数的问题。Matlab!

请帮忙根据提示填入参数。有关粒子群的。一共两个
第一个是

%% 一元函数的优化 y = sin(10 * pi *x) ./ x
% 1.补全代码,找到(0.9525,1.049)附近的最优解,迭代多少次求最优解?
% 2.添加惯性因子 w=0.9。 对比实验结果(在第几代求得最优解)。惯性因子可参考提供的参考文献。
%   修改w数值进行实验对比,思考w对实验结果的影响。

% 提醒:*rands()生成[-1,1]之间的随机数据;rands(1,2)生成值为[-1,1]的一行两列数据
      
%% 1 清空环境
clc 
clear all

%% 2 绘制目标函数曲线
x = 1:0.01:2;
y = sin(10*pi*x)./x;

figure 
plot(x,y)
hold on

%% 3 参数初始化
c1 = 
c2 = 

maxgen =      %进化次数
sizepop =     %种群规模

Vmax =        %速度最大值
Vmin =        %速度最小值

popmin = 2;
popmax = 1 ;   %位置边界

%% 4 产生初始化粒子和速度
for i = 1:sizepop
    % rand 随机产生一个种群[注意范围] 
    pop(i,:) =              %随机初始化位置,与定义的范围对应
    V(i,:) =                %随机初始化速度, 与定义的速度最大值和最小值一致
    
    %计算适应度
    fitness(i) =            %计算各个粒子的适应度
end

%% 5 个体极值和群体极值
[bestfitness bestindex] = max(fitness)
gbest = pop(bestindex,:)%global全局最佳,value
pbest = pop;            %particle个体最佳,matrix
fitnesspbest = fitness;%个体最佳适应度
fitnessgbest = bestfitness;%全局最佳适应度

%% 6 迭代寻优
for i = 1:maxgen
    for j = 1:sizepop
        %速度更新
        V(j,:) =                      ;          %速度更新公式                                      
        V(j,find(V(j,:)>Vmax)) = Vmax;          %速度边界约束
        V(j,find(V(j,:)<Vmin)) = Vmin;
        
        %种群更新
        pop(j,:) =                           ;   %位置更新公式
        pop(j,find(pop(j,:)>popmax)) = popmax;  %位置边界约束
        pop(j,find(pop(j,:)<popmin)) = popmin;
        
        %适应度值更新
        fitness(j) =     ;%调用fun函数计算适应度值
    end
    
    for j = 1:sizepop
        %个体最优更新
        %各个粒子与上一次进行对比和更新
        if                           %if the fitness value is better than p_best_j
            pbest(j,:) = pop(j,:);
            fitnesspbest(j) = fitness(j);
        end
        
        %群体最优更新
        if                           %if the fitness value is better than g_best_j
            gbest = pop(j,:);
            fitnessgbest = fitness(j);
        end
    end
    
    result(i) =     ;%Output全局最优还是局部最优?
end

%% 7 输出结果并绘图
[fitnessgbest gbest]
plot(gbest,fitnesszbest,'r*')

figure
plot(result)
title('最优个体适应度','fontsize',12);
xlabel('进化代数','fontsize',12); 
ylabel('适应度','fontsize',12);
        



第二个是


%% 一元函数的优化 y = sin(10 * pi *x) ./ x
% 1.学习使用自适应惯性权重。参考:On the Performance of Linear Decreasing Inertia Weight Particle Swarm Optimization for Global Optimization——Linear decreasing inertia weight (LDIW) strategy(3.1)
%   
% 
%% 1 清空环境
clc 
clear all

%% 2 绘制目标函数曲线
x = 1:0.01:2;
y = sin(10*pi*x)./x; 
figure 
plot(x,y)
hold on

%% 3 参数初始化
c1 =         ;
c2 =        ;


w_start =        ;  %权重,从全局搜索到局部搜索
w_end   =        ;

maxgen =     ; %进化次数
sizepop =     ; %种群规模

Vmax =      ;%速度最大值
Vmin =      ;

popmax = 2    ;%位置边界
popmin = 1    ;%根据x范围定义得到
%% 4 产生初始化粒子和速度
for i = 1:sizepop
    % 随机产生一个种群
    pop(i,:) =      ;  %范围是x范围保持一致
    V(i,:) =        ;  %初始化速度,与定义的速度最大值和最小值一致
    %计算适应度
    fitness(i) = fun(pop(i,:));
end

%% 5 个体极值和群体极值
[bestfitness bestindex] = max(fitness)
gbest = pop(bestindex,:)%全局最佳
pbest = pop;%个体最佳
fitnesspbest = fitness;%个体最佳适应度
fitnessgbest = bestfitness;%全局最佳适应度

%% 6 迭代寻优
for i = 1:maxgen
    w =                       ;%Linear decreasing inertia weight (LDIW) strategy
    for j = 1:sizepop
        %速度更新公式
        V(j,:) =                                                ;
        
        V(j,find(V(j,:)>Vmax)) = Vmax;%边界约束
        V(j,find(V(j,:)<Vmin)) = Vmin;
        
        %种群更新
        pop(j,:) = pop(j,:) + V(j,:);
        pop(j,find(pop(j,:)>popmax)) = popmax;
        pop(j,find(pop(j,:)<popmin)) = popmin;
        
        %适应度值更新
        fitness(j) =            ;
    end
    %粒子位置全部更新;各个粒子适应度值全部更新
    
    for j = 1:sizepop
        %个体最优更新
        %各个粒子与上一次进行对比和更新
        if                                 %if the fitness value is better than p_best_j
            pbest(j,:) = pop(j,:);
            fitnesspbest(j) = fitness(j);
        end 
            %更新局部最优解
        
        %群体最优更新
        if                                  %if the fitness value is better than g_best_j
            gbest = pop(j,:);
            fitnessgbest = fitness(j);
        end
    end
    result(i) =     ;output
       
end

%% 7 输出结果

[fitnessgbest gbest]

%绘图
plot(gbest,fitnessgbest,'r*')%把找到的点以星号的形式表达出来
figure
plot(result)
title('最优个体适应度','fontsize',12);
xlabel('进化代数','fontsize',12); 
ylabel('适应度','fontsize',12);

求帮忙

  • 写回答

5条回答 默认 最新

  • CodeBytes 2023-03-17 17:26
    关注

    第一个问题

    img

    本回答被题主选为最佳回答 , 对您是否有帮助呢?
    评论
查看更多回答(4条)

报告相同问题?

问题事件

  • 系统已结题 3月25日
  • 已采纳回答 3月17日
  • 创建了问题 3月17日

悬赏问题

  • ¥15 前后端分离的学习疑问?
  • ¥15 stata实证代码答疑
  • ¥15 MATLAB数据处理插值
  • ¥50 husky+jaco2实现在gazebo与rviz中联合仿真
  • ¥15 dpabi预处理报错:Error using y_ExtractROISignal (line 251)
  • ¥15 在虚拟机中配置flume,无法将slave1节点的文件采集到master节点中
  • ¥15 husky+kinova jaco2 仿真
  • ¥15 zigbee终端设备入网失败
  • ¥15 金融监管系统怎么对7+4机构进行监管的
  • ¥15 硬件IIC从模式的数据发送,中断数据的接收,不能用HAL库(按照时序图)