MATLAB算法多元宇宙优化器

小夏 科技 更新 2024-03-06

该算法的灵感主要来自宇宙学中的三个概念:白洞、黑洞和虫洞。 这三个概念的数学模型分别用于探索、开发和局部搜索。 2015年发表在SCI权威期刊《神经计算与应用》上。拥有近 2000+ 次引用,它仍然有很大的潜力。 多元宇宙优化算法利用白洞和虫洞的概念来探索搜索空间,相反,虫洞在多元宇宙优化算法中协助搜索空间的发展。 假设每个解都是一个宇宙,并且每个解中的变量都是宇宙中的对象。 在求解优化问题的过程中,多元宇宙优化算法应用了以下规则:物体可以通过白洞和黑洞隧道在不同的宇宙之间移动。 当在白洞和黑洞隧道之间建立两个宇宙时,宇宙有膨胀率,膨胀率较高的宇宙有白洞,膨胀率较低的宇宙被认为有黑洞,通过粒子从白洞转移到黑洞位置的原理,对宇宙中的粒子进行模拟通过虫洞。这种机制使得宇宙之间可以轻易地交换物体,无论宇宙中物质的膨胀速度如何,宇宙中的所有物质都会随机地通过虫洞移动,到达宇宙的最佳位置。 其中,整个宇宙的迭代次数,可以确保平均暴胀率的提高。 在每次迭代中,根据其通货膨胀率的分类,依靠轮盘机制来创建一个白洞。 算法个体的组成如下:

其中 d 是变量的数量,n 是宇宙的数量(候选解)。

step1.初始化控制参数:Universe数n,参数wep、tdr、阈值h和最大迭代次数itermax;

step2.初始化宇宙群,找到当前宇宙黑洞及其位置,计算其适应度值;

step3.根据步骤2中得到的计算值,初始化最优值和最优记录点。

step4.所有个体都从白洞转移到黑洞。 以当前最优宇宙定位点为中心,根据转移聚合规则生成新的最优定位点,并替换原有点。

step5.计算各点的拟合度,记录最优值和最优宇宙点。

step6.黑洞个人更新。 设置WEP,如果黑洞的2R WEP和更新后的个体适应度值优于原来,则按照更新后的公式(23)更新个人,否则不会更新。

step7.记录最佳值和最佳值。

step8.评估整个宇宙群落并分析结果。

step9.如果迭代次数小于指定的迭代次数,请执行步骤4,否则执行步骤10。

step10.如果满足算法的最终先决条件,则输出最优解并完成结束,否则继续步骤 4。

为了验证结果,将MVO算法与灰狼优化算法GWO、粒子群优化算法PSO、遗传算法GA和引力搜索算法GSA进行了对比。 结果证明,该算法能够提供非常有竞争力的结果,并且在大多数测试平台上优于文献中的最佳算法。 实际案例研究的结果也证明了MVO在解决具有未知搜索空间的实际问题方面的潜力。

function[best_universe_inflation_rate,best_universe,convergence_curve]=mvo(n,max_time,lb,ub,dim,fobj)%two variables for s**ing the position and inflation rate (fitness) of the best universebest_universe=zeros(1,dim);best_universe_inflation_rate=inf;%initialize the positions of universesuniverses=initialization(n,dim,ub,lb);%minimum and maximum of wormhole existence probability (min and max in% eq.(3.3) in the **wep_max=1;wep_min=0.2;convergence_curve=zeros(1,max_time);%iteration(time) countertime=1;%main loopwhile time %eq. (3.3) in the **wep=wep_min+time*((wep_max-wep_min)/max_time); tr**elling distance rate (formula): eq. (3.4) in the **tdr=1-((time)^(1/6)/(max_time)^(1/6));inflation rates (i) (fitness values) inflation_rates=zeros(1,size(universes,1));for i=1:size(universes,1) %boundary checking (to bring back the universes inside search % space if they go beyoud the boundaries flag4ub=universes(i,:)ub; flag4lb=universes(i,:)universes(i,:)=(universes(i,:)flag4ub+flag4lb)))ub.*flag4ub+lb.*flag4lb; %calculate the inflation rate (fitness) of universes inflation_rates(1,i)=fobj(universes(i,:)elitism if inflation_rates(1,i) best_universe_inflation_rate=inflation_rates(1,i); best_universe=universes(i,:)end end [sorted_inflation_rates,sorted_indexes]=sort(inflation_rates); for newindex=1:n sorted_universes(newindex,:)=universes(sorted_indexes(newindex),:end %normaized inflation rates (ni in eq. (3.1) in the **normalized_sorted_inflation_rates=normr(sorted_inflation_rates); universes(1,:)= sorted_universes(1,:)update the position of universes for i=2:size(universes,1)%starting from 2 since the firt one is the elite back_hole_index=i; for j=1:size(universes,2) r1=rand();if r1 white_hole_index=roulettewheelselection(-sorted_inflation_rates);%for maximization problem -sorted_inflation_rates should be written as sorted_inflation_rates if white_hole_index==-1 white_hole_index=1; end %eq. (3.1) in the **universes(back_hole_index,j)=sorted_universes(white_hole_index,j); end if (size(lb,2)==1) %eq. (3.2) in the **if the boundaries are all the same r2=rand();if r2 r3=rand();if r3<0.5 universes(i,j)=best_universe(1,j)+tdr*((ub-lb)*rand+lb); end if r3>0.5 universes(i,j)=best_universe(1,j)-tdr*((ub-lb)*rand+lb); end end end if (size(lb,2)~=1) %eq. (3.2) in the **if the upper and lower bounds are %different for each variables r2=rand();if r2 r3=rand();if r3<0.5 universes(i,j)=best_universe(1,j)+tdr*((ub(j)-lb(j))*rand+lb(j));end if r3>0.5 universes(i,j)=best_universe(1,j)-tdr*((ub(j)-lb(j))*rand+lb(j));end end end end end %update the convergence curve convergence_curve(time)=best_universe_inflation_rate; %print the best universe details after every 50 iterations% if mod(time,50)==0% display(['at iteration ', num2str(time), ' the best universes fitness is ', num2str(best_universe_inflation_rate)])end time=time+1;endendfunction choice = roulettewheelselection(weights) accumulation = cumsum(weights); p = rand() accumulation(end); chosen_index = -1; for index = 1 : length(accumulation) if (accumulation(index) >p) chosen_index = index; break; end end choice = chosen_index;end

相似文章

    MATLAB 算法排序算法(如下)。

    这次MATLAB算法的主题是排序算法 下图 参考资料和方法基本都是网络上第一,比如维基百科 CSDN等。会附上原理部分,上面也会有 便于直观理解,就不多说了。.插入排序。直接插入 由于 MATLAB 中的向量长度不确定,因此写出的 看起来很简单。但实际上,插入排序要复杂得多。由于二进制搜索在MATL...

    AI算法项目优化流程

    算法优化的调试过程可能会因具体情况而异,但通常包括以下关键步骤,希望对您有所帮助。通过以程,可以有效地识别和解决算法优化过程中的问题,提高算法的性能和稳定性。北京木琪移动科技是国内最专业的软件外包开发公司,欢迎前来交流合作。测试初始版本 实现并测试算法的初始版本,以确保其有效并产生可用的结果。绩效评...

    享受多元宇宙之旅,VR宇宙公园将带来一场感官的神奇盛宴

    作为中国宫殿级的豪华地标购物中心,上海国际金融中心致力于打造世界顶级购物中心的顶级商业空间,引领时尚风尚。欢乐的颂歌响起,圣诞节如期而至,上海国金中心商场将举行 享受多元宇宙我们邀请了日本著名艺术家Kota Yamaji打造一个多元宇宙圣诞公园,增添了设计感和互动的节日装置场景,如VR宇宙飞船 失重...

    编程思维在算法优化中的应用

    随着计算机技术的不断发展,算法优化已成为计算机科学的一个重要研究方向。编程思维在算法优化中起着至关重要的作用。本文将从编程思维的角度入手,探讨其在算法优化中的应用。.编程思维概述。编程思维是一种解决问题的思维方式,它采用计算机的操作方式,将现实世界的问题转化为计算机可以理解和处理的数字和符号。在算法...

    推荐系统多目标优化算法研究

    推荐系统作为信息检索和过滤的重要应用领域,近年来受到广泛关注。在众多的推荐系统算法中,多目标优化算法由于可以同时考虑多个目标并找到它们之间的平衡点,逐渐成为研究热点。本文将对推荐系统中的多目标优化算法进行深入研究,包括其核心思想 常用方法和未来发展方向。.多目标优化算法概述。传统的推荐系统算法往往只...