种群的勘探(Exploration)与开发(Exploitation)(含MATLAB代码)

先做一个声明:文章是由我的个人公众号中的推送直接复制粘贴而来,因此对智能优化算法感兴趣的朋友,可关注我的个人公众号:启发式算法讨论。我会不定期在公众号里分享不同的智能优化算法,经典的,或者是近几年提出的新型智能优化算法,并附MATLAB代码。

上一次更新还是在大年初一……

因为前段时间忙着一项工作的收尾,一直没时间做推送。这一期给大家讲一下群智能优化算法中,种群的勘探(Exploration)和开发(Exploitation)。另外,下面这种图,有同学不会画,今天给大家详细讲一下~

先做以下定义:

对于一个群智能优化算法(例如PSO、ACO、ABC、CS、FA等等),它的种群规模为N,优化问题的维度为D。这样一来,xij就代表种群中第i个个体的第j维变量值,其中,i=1,2…Nj=1,2,…D

接下来,根据图1进行阐述。

图1 N×D的种群表示

如图1所示,个体维度之间的差异可以推断种群个体在问题空间中是发散还是聚集。当算法发散时,种群个体之间维数值的差异增大,意味着种群个体在搜索环境中是分散的。这在群智能优化算法的研究中,被称为Exploration或者 Diversification。另一方面,当种群收敛时,差异减小,种群个体聚集到一个集中区域。这被称为Exploitation或者Intensification。在迭代过程中,不同的群智能优化算法采用不同的策略来实现群体个体的ExplorationExploitation

这两个概念在任何群智能优化算法中都无处不在。通过Exploration,算法能够访问搜索环境中不可见的邻域,以最大限度地提高找到全局最优位置的效率。相反,Exploitation可以使群体个体成功地收敛到一个潜在的领域,并极有可能获得全局最优解。这两种能力之间的平衡是一个需要着重考虑的问题。这两种能力都较差的算法无法产生有效的结果,只偏向于其中一种能力也不能带来理想的性能。Exploration可以理解为全局搜索,Exploitation则对应于局部搜索,这两种搜索理念都对算法性能都至关重要。因此,有必要对算法的ExplorationExploitation进行衡量,以便对影响这两个因素的搜索策略进行实际分析。尤其我们在改进算法时,需要对改进策略进行分析,探讨它对ExplorationExploitation的具体影响。

研究收敛图以及在一定次数的迭代中收敛到的解的平均值、最佳值、最差值和标准差并不能帮助理解种群的搜索行为。因此,这样的最终结果仍然对群智能优化算法的性能、效率留下了没有得到研究问题。也就是说,对于基于种群的元启发式算法,分析种群中每个个体的行为以及整个种群的行为是非常重要的。基于此,文献[2]根据文献[1]的研究,提出了维度多样性测量法。式子(1)原本是使用平均值进行计算,文献[2]替换为了中位数,因为它更能有效地反映了种群的中心。

利用上面的式子,就可以计算出每次迭代中,种群的勘探和开发百分占比,然后绘制成曲线,就可以画出最开始的那种图了~

下面就结合图2来阐述和分析:

图 2

如图2所示,从子图(b)中选取了6个点c、d、e、f、g和h来举例说明解的多样性(分布)及其各自的平衡评价。点c表示算法的早期阶段(大约20次迭代),此时的占比大约为XPL%=90和XPT%=10。在这样的百分比下,算法对搜索空间明显倾向勘探。这种效应可以由图2(c)所示,解集保持了在搜索空间中的高度分散。点d对应于60次迭代,在这个节点,此时的占比大约XPL%=70和XPT%=30。在这种行为中,算法仍以勘探为主,开发程度较低。这种行为的解集构型可以在图2(d)中举例说明,其中一些相似解组的多样性很高。点e和点f分别对应于150和250次迭代,其中平衡评估的值分别为XPL% =25, XPT% =75和XPL% =08, XPT% = 92。在此比例下,算法的种群行为发生反转,促进了更多的开发而不是勘探。图2(e)和(f)显示了图2(b)中点e和点f的解集分布。在这种配置下,解决方案分布在几个集群中,降低了种群多样性。最后,点g和点h表示种群搜索的最后阶段。此时,算法明显倾向于开发最好的解决方案,而不考虑任何探索机制。图2(g)和(h)对应于点g和点h的解集分布。

为了进一步分析,这里我们随便用一个算法来画一下,优化问题选择CEC2005中的Ackely函数。横轴为迭代次数,纵轴为百分占比。蜣螂优化(DBO)算法的勘探和开发百分比如图3所示。

图3 DBO在Ackely上的勘探和开发情况

根据图3可以看到,DBO的种群最后在ExplorationExploitation取得了良好的平衡。正常情况下,Exploitation要趋近于1。因为进化后期种群逐渐逼近最优解,整个解集是集中在最优解附近的,因此后期主要是局部搜索,即Exploitation。此外,ExplorationExploitation的百分比随着迭代的进行,应该有一个交替的过程:红色的线要上去,最终接近1;蓝色的线要下来,最终接近0。观察图3也可以发现,DBO的收敛速度非常快,种群很快就靠近最优解了。根据最新的研究结论[3],勘探和开发在搜索过程中的占比分别为10%和90%且达到平衡时,算法有最佳性能。那么DBO基本是符合这个要求,种群的勘探最后占比90%左右,开发占比10%左右。或许这也是DBO自2022年11月27日提出以来,就被广泛推崇的原因,算法性能可以~

同样是使用Ackley函数,最大迭代次数相同,接下来看看白鲸优化(BWO)、金豺优化(GJO)、蜜獾算法(HBA)、哈里斯鹰优化(HHO)、鲸鱼优化算法(WOA)在迭代中的勘探和开发占比变化如图4至图8所示,就不再进一步讨论了。

图4 BWO在Ackely上的勘探和开发情况

图5 GJO在Ackely上的勘探和开发情况

图6 HBA在Ackely上的勘探和开发情况

图7 HHO在Ackely上的勘探和开发情况

图8 WOA在Ackely上的勘探和开发情况

另外想说的是,这种图实际上和收敛曲线一个道理,是随机的。就是说每次运行得到的都不一样,只是稳定性好的算法基本是差不多的效果。上面例举的算法都比较稳定,每次的效果差不多。但是,严格来讲,这个和收敛图一样,也应该用多次运行后的均值或者中位数来画。这样才能避免偶然性,不然完全有可能是你画了多次,恰好有个效果好的就放到论文里了。

举个例子,例如去年新提出的孔雀优化算法(POA)。同样使用Ackley函数,最大迭代次数相同。多次运行,它在迭代中的勘探和开发占比变化就相差很大,如图9所示:

图9 POA在Ackely上的勘探和开发情况

这就说明,POA的性能很不稳定。你很可能就是把恰好看着还可以的第一张放到论文里~

这也证明勘探和开发只是考察算法的一个方面,还有其他很多方面需要兼顾,例如收敛精度、收敛速度、稳定性、复杂度等。因此,为了学术的严谨性,还是建议大家多次独立运行,然后计算均值或中位数来画勘探与开发百分占比的变化曲线。

MATLAB代码:

蜣螂优化(DBO)算法的勘探(Exploration)和开发(Exploitation)占比分析

白鲸优化(BWO)算法的勘探(Exploration)和开发(Exploitation)占比分析:

金豺优化(GJO)算法的勘探(Exploration)和开发(Exploitation)占比分析:

蜜獾算法(HBA)的勘探(Exploration)和开发(Exploitation)占比分析:

哈里斯鹰优化(HHO)算法的勘探(Exploration)和开发(Exploitation)占比分析:

鲸鱼优化算法(WOA)的勘探(Exploration)和开发(Exploitation)占比分析:

孔雀优化算法(POA)探(Exploration)和开发(Exploitation)占比分析

(公众号里有,关注:启发式算法讨论)

解释得不一定很清楚,所以还是推荐大家好好去读下面的参考文献:

[1] Cheng S, Shi Y, Qin Q, et al. Population diversity maintenance in brain storm optimization algorithm[J]. Journal of Artificial Intelligence and Soft Computing Research, 2014, 4(2): 83-97.

[2] Hussain K, Salleh M N M, Cheng S, et al. On the exploration and exploitation in popular swarm-based metaheuristic algorithms[J]. Neural Computing and Applications, 2019, 31: 7665-7683.

[3] Morales-Castañeda B, Zaldivar D, Cuevas E, et al. A better balance in metaheuristic algorithms: Does it exist?[J]. Swarm and Evolutionary Computation, 2020, 54: 100671.

  • 5
    点赞
  • 25
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论
以下是DQN算法Matlab代码,用于实现深度强化学习的智能体训练: ```matlab % DQN Algorithm % Initialize replay memory D D = []; % Initialize Q-network with random weights Q = randn(inputSize, numActions); % Initialize target Q-network with same weights as Q-network QTarget = Q; % Initialize action selection parameters epsilon = 1; % exploration rate minEpsilon = 0.1; % minimum exploration rate epsilonDecayRate = 0.0001; % exploration rate decay rate % Initialize other hyperparameters batchSize = 32; % minibatch size gamma = 0.99; % discount factor maxSteps = 10000; % maximum number of steps per episode % Start training for episode = 1:numEpisodes % Initialize state state = env.reset(); % Initialize episode variables totalReward = 0; step = 0; % Loop over steps in episode while step < maxSteps % Choose action according to epsilon-greedy policy if rand() < epsilon action = randi(numActions); else [~, action] = max(Q(state,:)); end % Take action and observe next state and reward [nextState, reward, done] = env.step(action); % Store transition in replay memory D = [D; state, action, reward, nextState, done]; % Update state and total reward state = nextState; totalReward = totalReward + reward; % Sample minibatch from replay memory minibatch = D(randi(size(D,1),batchSize,1),:); % Compute target Q-values targetQ = minibatch(:,3) + gamma*max(QTarget(minibatch(:,4),:),[],2).*(~minibatch(:,5)); % Compute predicted Q-values predictedQ = Q(minibatch(:,1),minibatch(:,2)); % Compute loss and update Q-network loss = mean((targetQ - predictedQ).^2); Q(minibatch(:,1),minibatch(:,2)) = Q(minibatch(:,1),minibatch(:,2)) + alpha*(targetQ - predictedQ); % Update target Q-network every C steps if mod(step,C) == 0 QTarget = Q; end % Decay exploration rate epsilon = max(minEpsilon, epsilon - epsilonDecayRate); % Check if episode is done if done break; end % Increment step counter step = step + 1; end % Print episode statistics fprintf('Episode %d: total reward = %.2f, epsilon = %.2f\n', episode, totalReward, epsilon); end ``` 请注意,这只是一个示例代码,您需要根据您自己的环境和要解决的问题进行适当修改。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

algorithmzzy

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值