【WSN通信】基于matlab生物地理学优化HWSN节能聚类协议【含Matlab源码 1989期】
一、生物地理算法简介
1 基本思路
BBO 算法起源于生物地理学,它通过模拟多物种在不同栖息地的分布、迁移、突变等规律求解寻优问题,在多目标规划领域有广泛应用. 栖息地被认为是独立的区域,不同的栖息地拥有不同的适宜指数HSI(Habitat suitability index)。 HSI较高的栖息地物种丰富度较高,随着种群趋于饱和,其迁出率增高,迁入率减少,而HIS较低的栖息地与之相反,迁入率增高,迁出率减少. 当栖息地遭遇灾害或瘟疫等突发事件时,HIS将随之突变,打破动态平衡,为低HIS的栖息地添加了不可预见性,增大了搜索目标解的几率2.2 迁移和突变操作物种的迁移有其具体的物理模型,最常的有线性模型、二次模型、余弦模型等 . 以图 3线性模型为例,当某栖息地物种数目为 0 时迁入率最高,此刻 λ = I,随着迁入物种数目不断增加,受阳光、水、食物等资源限制,迁入率不断降低,迁出率不断增高 . 当栖息地物种数目为 S0时,恰好达到动态平衡,此时迁出率与迁入率相同 . 而栖息地达到饱和状态时,物种数量达到最大值Smax ,此刻不再有物种迁入,迁出率 μ = E.突变操作基于生物地理学统计公式完成:
式中:ms为栖息地发生突变的概率,mmax为最大突变率,用户可自行设定 . ps为栖息地容纳s种物种的概率, pmax代表容纳最大种群的概率。
二、部分源代码
%%
clc;
[bestfit, averagefit,CHNum,STATISTICS]=start();
function [Chromosome,Fitness,CHNum] = BBO(ProbFlag,Fitness,PopulationSize,NumberOfNodes,Chromosome,Sensor,Sink,ETX,ERX,Efs,Emp,EDA,do,NumofCH,Totenergy)
if ~exist('ProbFlag', 'var')
ProbFlag = true;
end
pmodify = 1; % habitat modification probability
pmutate = 0.5; % initial mutation probability
Keep = 2; % elitism parameter: how many of the best habitats to keep from one generation to the next
lambdaLower = 0.0; % lower bound for immigration probabilty per gene
lambdaUpper = 1; % upper bound for immigration probabilty per gene
dt = 1; % step size used for numerical integration of probabilities
I = 1; % max immigration rate for each island
E = 1; % max emigration rate, for each island
P = PopulationSize; %max species count, for each island
for j = 1 : size(Chromosome,1)
Prob(j) = 1 / size(Chromosome,1);
end
% Begin the optimization loop
for GenIndex = 1 : 20
% GenIndex
% Sorting of population
[Chromosome,indices,Fitness]=PopSort(Chromosome,Fitness);
MinFitness = [Fitness(1)];
% Compute the average cost
[AverageFitness] = ComputeAveCost(Chromosome,Fitness);
AvgFitness = [AverageFitness];
% Save the best habitats in a temporary array.
for j = 1 : Keep
chromKeep(j,:) = Chromosome(j,:);
costKeep(j) = Fitness(j);
end
% Map cost values to species counts.
for i = 1 : size(Chromosome,1)
if Fitness(i)< inf
SpeciesCount(i) = P - i;
else
SpeciesCount(i) = 0;
end
end
% Compute immigration rate and emigration rate for each species count.
for i = 1 : size(Chromosome,1)
lambda(i) = I * (1 - SpeciesCount(i) / P);
mu(i) = E * SpeciesCount(i) / P;
end
if ProbFlag
% Compute the time derivative of Prob(i) for each habitat i.
for j = 1 : size(Chromosome,1)
lambdaMinus = I * (1 - (SpeciesCount(j) - 1) / P);
muPlus = E * (SpeciesCount(j) + 1) / P;
if j < size(Chromosome,1)
ProbMinus = Prob(j+1);
else
ProbMinus = 0;
end
if j > 1
ProbPlus = Prob(j-1);
else
ProbPlus = 0;
end
ProbDot(j) = -(lambda(j) + mu(j)) * Prob(j) + lambdaMinus * ProbMinus + muPlus * ProbPlus;
end
% Compute the new probabilities for each species count.
Prob = Prob + ProbDot * dt;
Prob = max(Prob, 0);
Prob = Prob / sum(Prob);
end
% Now use lambda and mu to decide how much information to share between habitats.
lambdaMin = min(lambda);
lambdaMax = max(lambda);
for k = 1 : size(Chromosome,1)
if rand > pmodify
continue;
end
% Normalize the immigration rate.
lambdaScale = lambdaLower + (lambdaUpper - lambdaLower) * (lambda(k) - lambdaMin) / (lambdaMax - lambdaMin);
% Probabilistically input new information into habitat i
for j = 1 : NumberOfNodes
if (Chromosome(k,j) ~= -1) && rand < lambdaScale
% Pick a habitat from which to obtain a feature
RandomNum = rand * sum(mu);
Select = mu(1);
SelectIndex = 1;
while (RandomNum > Select) && (SelectIndex < PopulationSize)
SelectIndex = SelectIndex + 1;
Select = Select + mu(SelectIndex);
end
Chromosome(k,j) = Chromosome(SelectIndex,j);
else
Chromosome(k,j) = Chromosome(k,j);
end
end
end
if ProbFlag
% Mutation
Pmax = max(Prob);
MutationRate = pmutate * (1 - Prob / Pmax);
% Sorting of population
[Chromosome,indices,Fitness]=PopSort(Chromosome,Fitness);
% Mutate only the worst half of the solutions
for k = 1 : size(Chromosome,1)
for parnum = 1 : NumberOfNodes
if (Chromosome(k,parnum) ~= -1) && MutationRate(k) > rand
if( Chromosome(k,parnum) == 0)
Chromosome(k,parnum)= 1;
else
Chromosome(k,parnum) = 0;
end
end
end
end
- 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
三、运行结果
四、matlab版本及参考文献
1 matlab版本
2014a
2 参考文献
[1] 包子阳,余继周,杨杉.智能优化算法及其MATLAB实例(第2版)[M].电子工业出版社,2016.
[2]张岩,吴水根.MATLAB优化算法源代码[M].清华大学出版社,2017.
3 备注
简介此部分摘自互联网,仅供参考,若侵权,联系删除
文章来源: qq912100926.blog.csdn.net,作者:海神之光,版权归原作者所有,如需转载,请联系作者。
原文链接:qq912100926.blog.csdn.net/article/details/125859325
- 点赞
- 收藏
- 关注作者
评论(0)