智能优化算法:黏菌优化算法 - 附代码

智能优化算法:黏菌优化算法


摘要:黏菌优化算法(Slime mould algorithm,SMA)由 Li等于 2020 年提出,其灵感来自于黏菌的扩散和觅食行为,属于元启发算法。具有收敛速度快,寻优能力强的特点。

1.算法原理

该算法主要模拟了黏菌在觅食过程中的行为和形态变化,而未对其完整生命周期进行建模。通过权值指标模拟黏菌静脉状管的形态变化和收缩模式之间的三种相关性。

黏菌觅食过程,首先根据空气中气味接近食物,食物浓度越高,生物振荡器波越强,细胞质流动越快,黏菌静脉状管越粗。通过函数表达模拟该其逼近行为,其位置更新公式如下:
X n e w = { r a n d . ( U B − L B ) + L B , r a n d < z X b ( t ) + v b . ( W . X A ( t ) − X B ( t ) ) , r < p v c . X ( t ) , r ≥ p (1) X_{new}=\begin{cases} rand.(UB-LB)+LB,rand<z \\ X_b(t)+vb.(W.X_A(t)-X_B(t)),r<p\\ vc.X(t),r\geq p \end{cases}\tag{1} Xnew=rand.(UBLB)+LB,rand<zXb(t)+vb.(W.XA(t)XB(t)),r<pvc.X(t),rp(1)

p = t a n h ∣ S ( i ) − D F ∣ (2) p=tanh|S(i)-DF| \tag{2} p=tanhS(i)DF(2)

其中 L B LB LB U B UB UB 表示搜索范围的上下边界, v b vb vb的参数
取值范围是 [ − a , a ] [-a,a] [a,a], v c vc vc 从1线性减少至0. t t t 表示当前迭代, X b X_b Xb表示当前发现食物气味浓度最高位置, X X X 表示黏菌当前位置, X A X_A XA X B X_B XB表示随机选取的两个黏菌位置, W W W表示黏菌重量, S ( i ) S(i) S(i)表示 X X X 的适应度,而 D F DF DF 表示所有迭代中的最佳适应度。其中,参数 a a a 的函数函数表达为:
a = a r c t a n h ( − 1 m a x T + 1 ) (3) a = arctanh(-\frac{1}{maxT}+1)\tag{3} a=arctanh(maxT1+1)(3)
其中, m a x T maxT maxT表示最大迭代次数。而 W W W的表达式为:
W ( S m e l l I n d e x ( i ) ) = { 1 + r . l o g ( b F − S ( i ) b F − w F + 1 ) , c o n d i t i o n 1 − r . l o g ( b F − S ( i ) b F − w F + 1 ) , o t h e r s (4) W(SmellIndex(i)) = \begin{cases} 1+r.log(\frac{bF-S(i)}{bF-wF}+1),condition\\ 1-r.log(\frac{bF-S(i)}{bF-wF}+1),others \end{cases}\tag{4} W(SmellIndex(i))={1+r.log(bFwFbFS(i)+1),condition1r.log(bFwFbFS(i)+1),others(4)

s m e l l I n d e x = s o r t ( S ) (5) smellIndex =sort(S)\tag{5} smellIndex=sort(S)(5)

其中 c o n d i t i o n condition condition表示 S ( i ) S(i) S(i)排在前一半的种群, r r r表示[0,1]区间内的随机值, b F bF bF表示在当前迭代过程中获得的最优适应度, w F wF wF,表示当前迭代过程中得到的最差适应度值, s m e l l I n d e x smellIndex smellIndex表示适应度序列(最小值问题中为递增序列)

公式(1)表示的黏菌逼近食物行为,搜索黏菌个体位置 X 可以根据目前获得的 X B X_B XB最佳位置进行更新,同时 v b vb vb v c vc vc W W W参数的微调可以改变黏菌位置。黏菌搜索个体在三维空间中的位置变化,可通过 r a n d rand rand函数使个体形成任意角度的搜索向量,此概念同样可扩展至更高维空间.

算法流程:

Step1.初始化种群,设定相应参数。

Step2.计算适应度值,并且排序。

Step3.利用式(1),更新种群位置。

Step4.计算适应度值,并且更新全家最优位置,当前最优位置。

Step5.是否达到结束条件,如果达到则输出最优结果,否则重复执行步骤2-5.

2.实验结果

在这里插入图片描述

3.参考文献

[1] Li S, Chen H, Wang M, et al. Slime mould algorithm: A newmethod for stochastic optimization[J]. Future Generation Computer Systems. 2020, 111(1): 300-323.

[1]高铖铖,陈锡程,张瑞,宋秋月,易东,伍亚舟.三种新型智能算法在疫情预警模型中的应用——基于百度搜索指数的COVID-19疫情预警[J/OL].计算机工程与应用:1-11[2021-02-05].http://kns.cnki.net/kcms/detail/11.2127.tp.20210204.1030.002.html.

4.Matlab代码

改进算法matlab代码

名称说明或者参考文献
精英反向与二次插值改进的黏菌算法(ISMA)[1]郭雨鑫,刘升,张磊,黄倩.精英反向与二次插值改进的黏菌算法[J/OL].计算机应用研究:1-7[2021-11-10].https://doi.org/10.19734/j.issn.1001-3695.2021.02.0175.
混沌精英黏菌算法(CESMA)[1]肖亚宁,孙雪,李三平,姚金言.基于混沌精英黏菌算法的无刷直流电机转速控制[J].科学技术与工程,2021,21(28):12130-12138.

5.python代码

上述代码见个人资料介绍

  • 10
    点赞
  • 108
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 10
    评论
多目标黏菌优化算法是一种基于生物黏菌聚集行为的优化算法,可以用于解决多目标优化问题。以下是一个简单的 Python 实现: ```python import random import numpy as np # 定义目标函数 def f1(x): return x[0]**2 + x[1]**2 def f2(x): return (x[0]-1)**2 + x[1]**2 # 定义多目标黏菌优化算法 def MOA(num_particles, num_iterations, num_objectives, search_space, w, c1, c2): # 初始化粒子群 particles = np.zeros((num_particles, len(search_space))) velocities = np.zeros((num_particles, len(search_space))) personal_best = np.zeros((num_particles, len(search_space))) personal_best_fitness = np.zeros((num_particles, num_objectives)) global_best = np.zeros((len(search_space))) global_best_fitness = np.zeros((num_objectives)) for i in range(num_particles): for j in range(len(search_space)): particles[i][j] = random.uniform(search_space[j][0], search_space[j][1]) personal_best[i] = particles[i] personal_best_fitness[i][0] = f1(particles[i]) personal_best_fitness[i][1] = f2(particles[i]) # 迭代优化 for t in range(num_iterations): for i in range(num_particles): # 计算粒子间距离 distances = np.zeros((num_particles)) for j in range(num_particles): distances[j] = np.linalg.norm(particles[i] - particles[j]) # 计算吸引力和斥力 attraction = np.zeros((len(search_space))) repulsion = np.zeros((len(search_space))) for j in range(num_particles): if i == j: continue if personal_best_fitness[j][0] < personal_best_fitness[i][0] and personal_best_fitness[j][1] < personal_best_fitness[i][1]: attraction += (personal_best[j] - particles[i]) / distances[j] if personal_best_fitness[j][0] > personal_best_fitness[i][0] or personal_best_fitness[j][1] > personal_best_fitness[i][1]: repulsion += (particles[i] - particles[j]) / distances[j]**2 # 更新速度和位置 velocities[i] = w * velocities[i] + c1 * random.uniform(0, 1) * attraction + c2 * random.uniform(0, 1) * repulsion particles[i] += velocities[i] # 限制位置在搜索空间内 for j in range(len(search_space)): if particles[i][j] < search_space[j][0]: particles[i][j] = search_space[j][0] if particles[i][j] > search_space[j][1]: particles[i][j] = search_space[j][1] # 更新个体最优解和全局最优解 fitness = np.zeros((num_objectives)) fitness[0] = f1(particles[i]) fitness[1] = f2(particles[i]) if all(fitness <= personal_best_fitness[i]): personal_best[i] = particles[i] personal_best_fitness[i] = fitness if all(fitness <= global_best_fitness): global_best = particles[i] global_best_fitness = fitness print("Iteration {}: f1 = {}, f2 = {}".format(t, global_best_fitness[0], global_best_fitness[1])) return global_best, global_best_fitness # 测试算法 search_space = [(-5, 5), (-5, 5)] w = 0.5 c1 = 0.5 c2 = 0.5 num_particles = 10 num_iterations = 100 num_objectives = 2 best_solution, best_fitness = MOA(num_particles, num_iterations, num_objectives, search_space, w, c1, c2) print("Best solution: {}, Best fitness: {}".format(best_solution, best_fitness)) ``` 在上述代码中,我们首先定义了两个目标函数 `f1` 和 `f2`。接着,我们实现了多目标黏菌优化算法 `MOA`,其中包括初始化粒子群、迭代优化等步骤。最后,我们使用一个简单的测试案例来演示算法的使用。在本例中,我们使用了两个目标函数,搜索空间为二维平面上的一个矩形区域,粒子数为 10,迭代次数为 100。算法的输出为最优解和最优解的适应度值。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 10
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

打赏作者

智能算法研学社(Jack旭)

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

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

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

打赏作者

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

抵扣说明:

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

余额充值