【布局优化】基于差分进化算法的无线传感器网(WSN)覆盖优化
一、WSN模型1.1 动机近年来,随着对等网络、云计算和网格计算等分布式环境的发展,无线传感器网络(WSN)得到了广泛的应用。无线传感器网络(WSN)是一种新兴的计算和网络模式,它可以被定义为一个由称为传感器节点的微小、小型、昂贵和高度智能化的设备组成的网络。传感器节点位于被观测空间内的不同位置,通过无线通信信道交换从监测领域收集的数据。收集的数据被发送到sink节点,sink节点要么本地处理数据
一、WSN模型
1.1 动机
近年来,随着对等网络、云计算和网格计算等分布式环境的发展,无线传感器网络(WSN)得到了广泛的应用。无线传感器网络(WSN)是一种新兴的计算和网络模式,它可以被定义为一个由称为传感器节点的微小、小型、昂贵和高度智能化的设备组成的网络。传感器节点位于被观测空间内的不同位置,通过无线通信信道交换从监测领域收集的数据。收集的数据被发送到sink节点,sink节点要么本地处理数据,要么将数据发送到处理能力更强的其他网络。
无线传感器网络最基本的挑战之一是节点定位。节点定位问题的实例很多,属于NP难优化问题。传统的确定性技术和算法不能在合理的计算时间内解决NP-hard问题。在这种情况下,最好采用非确定性(随机)算法,如元启发式算法。
群体智能元启发式算法模拟自然界中的生物群体,如鸟和鱼的群体、蜜蜂和蚂蚁的群体、蝙蝠和杜鹃鸟的群体等。这些算法是基于种群的、随机的和迭代的搜索方法,基于四个自组织原则:正反馈、负反馈,多重相互作用和波动。
1.2 无线传感器网络中的定位问题
定位问题是无线传感器网络中研究最多的问题之一,因为如果传感器节点的位置未知,则覆盖、功率和路由都将无法确定最佳。定位是无线传感器网络的关键。一些传感器节点的位置可以由全球定位系统(GPS)来定义,这些节点被称为锚节点或信标节点,而其他传感器节点则随机分布在搜索空间中。这些节点称为未知节点或传感器节点。由于每个节点的电池寿命、成本、气候条件等因素,只有少数节点的位置是由GPS坐标确定的,而其他节点的位置则需要采用定位算法进行估计。
针对无线传感器网络中传感器节点的定位问题,提出了锚节点和未知节点两种定位算法。第一阶段称为测距阶段,算法确定未知节点和相邻锚节点之间的距离。针对无线传感器网络中传感器节点的定位问题,提出了锚节点和未知节点两种定位算法。第一阶段称为测距阶段,算法确定未知节点和相邻锚节点之间的距离。第二阶段通过在第一阶段使用各种方法收集测距信息来估计节点的位置,如到达角(AOA)、到达时间(TOA)、到达时差(TDOA)、往返时间(RTT)、无线信号强度(RSS)等。
1.3 问题陈述
在由M个传感器节点组成的无线传感器网络中,定位问题的目标是利用M-N个锚节点的位置信息,在传输范围为R的情况下,估计N个未知节点的位置,如果一个传感器节点在三个或更多锚节点的传输范围内,则认为它是定位的。这是一个总坐标数为2n的二维定位问题。
本文采用RSS方法估计节点间距离。无论采用何种测距方法,都可能出现不精确的测量。N个未知节点坐标的位置估计可以表示为一个优化问题,涉及表示节点定位误差的目标函数的最小化[19]。该问题的目标函数由N个未知节点和M N个相邻锚节点之间的误差平方和表示[19]。
随着RSS的出现,三边测量将被用来解决WSN中的定位问题。该方法的原理是基于三个锚节点的已知位置。未知节点的位置可以在三个锚节点的传输范围内估计。
每个节点估计到第i个锚点的距离为d̂=di+ni,其中ni是高斯噪声,di是使用以下等式计算的实际距离:
应最小化的目标函数表示为计算节点坐标的实际和估计距离与实际节点坐标之间的均方误差(MSE):
其中di是实际距离,d̂i是估计距离(从噪声范围测量获得的值di),M≥3(传感器节点的位置在传输范围R内至少需要三个锚)。
由于节点定位中的距离测量是有噪声的,为了估计节点之间的足够距离,采用了群体智能元启发式等优化方法。
二、差分进化算法
Differential Evolution(DE)是由Storn等人于1995年提出的,和其它演化算法一样,DE是一种模拟生物进化的随机模型,通过反复迭代,使得那些适应环境的个体被保存了下来。但相比于进化算法,DE保留了基于种群的全局搜索策略,采用实数编码、基于差分的简单变异操作和一对一的竞争生存策略,降低了遗传操作的复杂性。同时,DE特有的记忆能力使其可以动态跟踪当前的搜索情况,以调整其搜索策略,具有较强的全局收敛能力和鲁棒性,且不需要借助问题的特征信息,适于求解一些利用常规的数学规划方法所无法求解的复杂环境中的优化问题。目前,DE已经在许多领域得到了应用,譬如人工神经元网络、化工、电力、机械设计、机器人、信号处理、生物信息、经济学、现代农业、食品安全、环境保护和运筹学等。
DE 算法主要用于求解连续变量的全局优化问题,其主要工作步骤与其他进化算法基本一致,主要包括变异(Mutation)、交叉(Crossover)、选择(Selection)三种操作。算法的基本思想是从某一随机产生的初始群体开始,利用从种群中随机选取的两个个体的差向量作为第三个个体的随机变化源,将差向量加权后按照一定的规则与第三个个体求和而产生变异个体,该操作称为变异。然后,变异个体与某个预先决定的目标个体进行参数混合,生成试验个体,这一过程称之为交叉。如果试验个体的适应度值优于目标个体的适应度值,则在下一代中试验个体取代目标个体,否则目标个体仍保存下来,该操作称为选择。在每一代的进化过程中,每一个体矢量作为目标个体一次,算法通过不断地迭代计算,保留优良个体,淘汰劣质个体,引导搜索过程向全局最优解逼近。
算法图解:
算法伪代码:
三、代码
function demo2
%DEMO2 Demo for usage of DIFFERENTIALEVOLUTION.
\
%
% See also DIFFERENTIALEVOLUTION, FOXHOLES.
% Set title
optimInfo.title = 'Demo 2 (Shekel''s Foxholes)';
% Specify objective function
objFctHandle = @foxholes;
% Define parameter names, ranges, quantizations and initial values:
% Here: single vector-valued parameter with no name, as function foxholes is
% called with a parameter vector as only input
paramDefCell1 = {'', [-25 65; -65 65], [0; 0], [0; 0]};
paramDefCell2 = {'', [-65 65; -65 65], [0; 0], [0; 0]};
% Note: paramDefCell1 is used in first optimization run, paramDefCell2
% in continuation using a saved result file. Paraemter range paramDefCell1
% does not contain the optimum parameter set!
% No additional function parameters needed
objFctSettings = {};
% No parameter vector needed
objFctParams = [];
% Get default DE parameters
DEParams = getdefaultparams;
% Set number of population members (often 10*D is suggested; here we use
% more as we know that the Foxholes functions has many local minima).
DEParams.NP = 50;
% Do not use slave processes here. If you want to, set feedSlaveProc to 1 and
% run startmulticoreslave.m in at least one additional Matlab session.
DEParams.feedSlaveProc = 0;
% Set times
DEParams.maxiter = 20;
DEParams.maxtime = 30; % in seconds
DEParams.maxclock = [];
% Set display options
DEParams.infoIterations = 1;
DEParams.infoPeriod = 10; % in seconds
% Do not send E-mails
emailParams = [];
% Set random state in order to always use the same population members here
setrandomseed(1);
% Start differential evolution
[bestmem, bestval, bestFctParams, nrOfIterations, resultFileName] = differentialevolution(...
DEParams, paramDefCell1, objFctHandle, objFctSettings, objFctParams, emailParams, optimInfo); %#ok
disp(' ');
disp('Best parameter set returned by function differentialevolution:');
disp(bestmem);
% Continue optimization by loading result file
if DEParams.saveHistory
disp(' ');
disp(textwrap2(sprintf(...
'Now continuing optimization by loading result file %s.', resultFileName)));
disp(' ');
DEParams.maxiter = 200;
DEParams.maxtime = 90; % in seconds
[bestmem, bestval, bestFctParams] = differentialevolution(...
DEParams, paramDefCell2, objFctHandle, objFctSettings, objFctParams, emailParams, optimInfo, ...
resultFileName); %#ok
disp(' ');
disp('Best parameter set returned by function differentialevolution:');
disp(bestFctParams);
end
四、参考文献
更多推荐
所有评论(0)