【优化覆盖】基于matlab入侵杂草和花授粉混合算法无线传感器覆盖优化问题【含Matlab源码 1328期】

举报
海神之光 发表于 2022/05/28 23:50:37 2022/05/28
【摘要】 一、杂草算法简介 1 IWO定义 IWO是2006年由A. R. Mehrabian等提出的一种从自然界杂草进化原理演化而来的随机搜索算法,模仿杂草入侵的种子空间扩散、生长、繁殖和竞争性消亡的基本过程,...

一、杂草算法简介

1 IWO定义
IWO是2006年由A. R. Mehrabian等提出的一种从自然界杂草进化原理演化而来的随机搜索算法,模仿杂草入侵的种子空间扩散、生长、繁殖和竞争性消亡的基本过程,具有很强的鲁棒性和自适应性。

IWO算法是一种高效的随机智能优化算法,以群体中优秀个体来指导种群的进化,以正态分布动态改变标准差的方式将由优秀个体产生的子代个体叠加在父代个体周围,再经过个体之间的竞争,得到最优个体。算法兼顾了群体的多样性和选择力度。

2 IWO搜索与性能
IWO相比其他的进化算法拥有更大的搜索空间和更好的性能。
与GA相比,IWO算法简单,易于实现,不需要遗传操作算子,能简单有效地收敛问题的最优解,是一种强有力的智能优化工具。

3 IWO算法实现步骤
3.1 初始化种群
一定数据的杂草初始分布在搜索空间中,位置随机,个数根据实际情况调整;

3.2子代繁殖
分布在整个搜索空间的父代,根据父代的适应值产生下一代种子,种子的个数由适应度值决定,适应值高的产生的种子多,低的个体产生种子数少。

3.3 空间扩散
子代个体按照一定规律分布在父代个体周围,分布位置规律满足正态分布(父代为轴线(均值),标准差随着代数不断变化)。

3.4 竞争淘汰
当一次繁殖的个体数超过种群数量的上限时,将子代和父代一起排序,适应值低的个体将被清除。

二、部分源代码

% FPA
% IWO
% IWOFPA
%% 清空环境变量
clear
clc

%% 网络参数
L = 50;                         % 区域边长
V = 40;                         % 节点个数
Rs = 5;                           % 感知半径
Rc = 10;                        % 通信半径
Re = 0.1;                     % 感知误差
data = 1;                      % 离散粒度
%% 基本参数
N = 30;                    % 种群规模
dim = 2*V;               % 维数
maxgen = 300;         % 最大迭代次数
ub = L;
lb = 0;

%% 初始化种群位置
X = rand(N, dim).*(ub-lb)+lb;
for i = 1:N
    fitness(i) = fun(X(i, :), L, Rs, Re, data);
end

%% 传入函数变量
[bestvalue_FPA, gbest_FPA, Curve_FPA] = FPA(N, maxgen, Rs, Re, L, data, X, fitness, lb, ub, dim);
[bestvalue_IWO, gbest_IWO, Curve_IWO] = IWO(N, maxgen, Rs, Re, L, data, X, fitness, lb, ub, dim);
[bestvalue_IWOFPA, gbest_IWOFPA, Curve_IWOFPA] = IWOFPA(N, maxgen, Rs, Re, L, data, X, fitness, lb, ub, dim);

%% 绘图比较
figure;
t = 1:maxgen;
plot(t, Curve_FPA, 'bo-', t, Curve_IWO, 'g*-', t, Curve_IWOFPA, 'r^-',...
    'linewidth', 2, 'linewidth', 1.5, 'MarkerSize',7, 'MarkerIndices', 1:30:maxgen);
legend('FPA', 'IWO', 'IWOFPA');
xlabel '迭代次数';
ylabel '覆盖率';
function [bestfitness, gbest, BestCosts] = IIWO(N, MaxIt, Rs, Re, L, data, X, fitness, lb, ub, dim)

%% IIWO参数
Smin = 0;         % 繁殖种子数下限
Smax = 5;         % 繁殖种子数上限
Exponent = 3;             % 方差缩减指数(非线性调和因子)
sigma_initial = 0.5;      % 标准差初值
sigma_final = 0.001;	% 标准差终值

%% 初始化位置和适应度值
% X = rand(N, dim).*(ub-lb)+lb;
% 利用立方混沌算子随机产生杂草位置
X(1, :) = rands(1, dim);
for j = 1:dim
    for i = 1:N-1
        X(i+1, j) = 4*X(i, j)^3-3*X(i, j);
    end
end
X = lb+(1+X).*(ub-lb)/2;
for i = 1:N
    % 初始化适应度值
    fitness(i) = fun(X(i, :), L, Rs, Re, data);   
end
[bestfitness, bestindex] = max(fitness);
gbest = X(bestindex, :);      % 群体最优极值
fitnessgbest = bestfitness;           % 群体最优适应度值

%% 初始结果显示
x = gbest(1:2:end);
y = gbest(2:2:end);
disp('初始位置:' );
for i = 1:dim/2
    disp([num2str(x(i)), '     ', num2str(y(i))]);
end
disp(['初始覆盖率:', num2str(fitnessgbest)]);
% 初始覆盖图
figure
for i = 1:dim/2
    axis([0 L 0 L]);            % 限制坐标范围
    sita = 0:pi/100:2*pi;   % 角度[0, 2*pi]
    hold on;
    fill(x(i)+Rs*cos(sita), y(i)+Rs*sin(sita), 'b');
    plot(x(i)+Rs*cos(sita), y(i)+Rs*sin(sita), 'b');
end
plot(x, y, 'r+');
title '初始部署';

%% IWO迭代
for it = 1:MaxIt
    % 更新标准偏差
    sigma = ((MaxIt - it)/(MaxIt - 1))^Exponent * (sigma_initial - sigma_final) + sigma_final;
    % 获得最佳和最差的目标值
    Costs = fitness;
    BestCost = max(Costs);
    WorstCost = min(Costs);
    % 初始化子代种群
    new_X = [];
    % 繁殖
    for i = 1:N
        % 比例系数
        ratio = (fitness(i) - WorstCost)/(BestCost - WorstCost);
        % 每个杂草产生的种子数
        S = floor(Smin + (Smax - Smin)*ratio);
        for j = 1:S
            % 初始化子代
            newsol_X = [];         
            % 生成随机位置
            % randn是一种产生标准正态分布的随机数或矩阵的函数
            newsol_X = X(i, :) + sigma * randn([1, dim]); 
            % 边界(下限/上限)处理
            newsol_X = max(newsol_X, lb);
            newsol_X = min(newsol_X, ub);
            % 添加子代
            new_X = [new_X
                      newsol_X];  % #ok
        end
        % 高斯变异产生新个体
        V(i, :) = X(i, :)+randn([1, dim]).*(gbest-X(i, :));
        % 边界处理
        XU = max(X(i, :));
        XL = min(X(i, :));
        for j = 1:dim
            if V(i, j) > ub || V(i, j) < lb
                V(i, j) = XU+randn(1)*(XU-XL);
            end
        end
    end
    % 合并种群
    X = [X
           new_X
           V];
    % 计算新的适应度值
    for i = 1:size(X, 1)
        fitness(i) =  fun(X(i, :), L, Rs, Re, data);
    end
    % 种群排序
    [bestfitness, SortOrder] = sort(fitness, 'descend');
    % 竞争排除(删除额外成员)
    X = X(SortOrder(1:N), :);
    fitness = bestfitness(1:N);
    % 保存最佳种群
    BestSol = X(1, :);
    gbest = BestSol;
    % 保存最优函数值历史记录
    BestCosts(it) = bestfitness(1);
    % 显示迭代信息
    disp(['Iteration ' num2str(it) ': Best Cost = ' num2str(BestCosts(it))]);
end

bestfitness = BestCosts(end);
%% 结果显示
x = gbest(1:2:end);
y = gbest(2:2:end);
disp('最优位置:' );
for i = 1:dim/2
    disp([num2str(x(i)), '     ', num2str(y(i))]);
end
disp(['最优覆盖率:', num2str(BestCosts(end))]);
%% 绘图
figure;
plot(BestCosts, 'r', 'lineWidth', 2);          %  画出迭代图
title('算法训练过程', 'fontsize', 12);
xlabel('迭代次数', 'fontsize', 12);
ylabel('粒子覆盖率', 'fontsize', 12);
figure
for i = 1:dim/2
    axis([0 L 0 L]);            % 限制坐标范围
    sita = 0:pi/100:2*pi;   % 角度[0, 2*pi]
    hold on;
    fill(x(i)+Rs*cos(sita), y(i)+Rs*sin(sita), 'k');
end
plot(x, y, 'r+');
title 'IWO优化覆盖';
function Rcov = fun(Position, L, Rs, Re, data)
%% 适应度函数:WSN的覆盖率
x = Position(1:2:end);      % 获取x轴的坐标
y = Position(2:2:end);      % 获取y轴的坐标
lamda = 0.1;                           % 感知衰减系数
N = length(x);                          % 节点总个数
% 离散化区域内的点
m = 0:data:L;
n = 0:data:L;
k = 1;
for i = 1:numel(m)
    for j = 1:numel(n)
        p(k, :) = [m(i), n(j)];
        k = k+1;
    end
end
Total = size(p, 1);
% 计算覆盖率
for j = 1:size(p, 1)
    C = zeros(N, 1);
    for i = 1:N
        dij = sqrt((p(j, 1)-x(i))^2+(p(j, 2)-y(i))^2);
        if Rs-Re >= dij
            C(i) = 1;                                          % 改变覆盖状态
        elseif Rs > dij
            C(i) = exp(-lamda*(dij-(Rs-Re))/(Rs-dij));
        end
    end
    P(j) = 1-prod(1-C);
end
% 计算覆盖比例
Rcov = sum(P(1:end))/Total;        


  
 
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11
  • 12
  • 13
  • 14
  • 15
  • 16
  • 17
  • 18
  • 19
  • 20
  • 21
  • 22
  • 23
  • 24
  • 25
  • 26
  • 27
  • 28
  • 29
  • 30
  • 31
  • 32
  • 33
  • 34
  • 35
  • 36
  • 37
  • 38
  • 39
  • 40
  • 41
  • 42
  • 43
  • 44
  • 45
  • 46
  • 47
  • 48
  • 49
  • 50
  • 51
  • 52
  • 53
  • 54
  • 55
  • 56
  • 57
  • 58
  • 59
  • 60
  • 61
  • 62
  • 63
  • 64
  • 65
  • 66
  • 67
  • 68
  • 69
  • 70
  • 71
  • 72
  • 73
  • 74
  • 75
  • 76
  • 77
  • 78
  • 79
  • 80
  • 81
  • 82
  • 83
  • 84
  • 85
  • 86
  • 87
  • 88
  • 89
  • 90
  • 91
  • 92
  • 93
  • 94
  • 95
  • 96
  • 97
  • 98
  • 99
  • 100
  • 101
  • 102
  • 103
  • 104
  • 105
  • 106
  • 107
  • 108
  • 109
  • 110
  • 111
  • 112
  • 113
  • 114
  • 115
  • 116
  • 117
  • 118
  • 119
  • 120
  • 121
  • 122
  • 123
  • 124
  • 125
  • 126
  • 127
  • 128
  • 129
  • 130
  • 131
  • 132
  • 133
  • 134
  • 135
  • 136
  • 137
  • 138
  • 139
  • 140
  • 141
  • 142
  • 143
  • 144
  • 145
  • 146
  • 147
  • 148
  • 149
  • 150
  • 151
  • 152
  • 153
  • 154
  • 155
  • 156
  • 157
  • 158
  • 159
  • 160
  • 161
  • 162
  • 163
  • 164
  • 165
  • 166
  • 167
  • 168
  • 169
  • 170
  • 171
  • 172
  • 173
  • 174
  • 175
  • 176
  • 177
  • 178
  • 179
  • 180
  • 181
  • 182
  • 183
  • 184
  • 185
  • 186
  • 187
  • 188
  • 189
  • 190
  • 191
  • 192
  • 193
  • 194
  • 195
  • 196
  • 197
  • 198
  • 199
  • 200
  • 201
  • 202
  • 203
  • 204
  • 205
  • 206

三、运行结果

在这里插入图片描述
在这里插入图片描述
在这里插入图片描述

四、matlab版本及参考文献

1 matlab版本
2014a

2 参考文献
[1] 包子阳,余继周,杨杉.智能优化算法及其MATLAB实例(第2版)[M].电子工业出版社,2016.
[2]张岩,吴水根.MATLAB优化算法源代码[M].清华大学出版社,2017.
[3]周品.MATLAB 神经网络设计与应用[M].清华大学出版社,2013.
[4]陈明.MATLAB神经网络原理与实例精解[M].清华大学出版社,2013.
[5]方清城.MATLAB R2016a神经网络设计与应用28个案例分析[M].清华大学出版社,2018.

文章来源: qq912100926.blog.csdn.net,作者:海神之光,版权归原作者所有,如需转载,请联系作者。

原文链接:qq912100926.blog.csdn.net/article/details/120471976

【版权声明】本文为华为云社区用户转载文章,如果您发现本社区中有涉嫌抄袭的内容,欢迎发送邮件进行举报,并提供相关证据,一经查实,本社区将立刻删除涉嫌侵权内容,举报邮箱: cloudbbs@huaweicloud.com
  • 点赞
  • 收藏
  • 关注作者

评论(0

0/1000
抱歉,系统识别当前为高风险访问,暂不支持该操作

全部回复

上滑加载中

设置昵称

在此一键设置昵称,即可参与社区互动!

*长度不超过10个汉字或20个英文字符,设置后3个月内不可修改。

*长度不超过10个汉字或20个英文字符,设置后3个月内不可修改。