文章 "种群优化算法:细菌觅食优化(BFO)"

 

新文章 种群优化算法:细菌觅食优化(BFO)已发布:

大肠杆菌觅食策略激发出科学家创建 BFO 优化算法的灵感。 该算法包含原创思路和有前景的优化方法,值得深入研究。

细菌觅食优化(BFO)算法是一种引人入胜的优化技术,可在极其复杂或不可能的数值函数里找到最大化/最小化问题得近似解。 该算法被广泛认为应对分布式优化和控制的全局优化算法。 BFO 的灵感来自大肠杆菌的社会觅食行为。 BFO 已经引起了研究人员的注意,因为它已表现出在多个应用领域中解决实际优化问题方面的有效性。 大肠杆菌觅食策略背后的生物学,是以原始方式模拟,并作为一种简单的优化算法。

细菌,如大肠杆菌或沙门氏菌,是地球上最成功的生物之一。 这些灵动的细菌具有称为鞭毛的半刚性附属物,它们通过扭曲运动推动自己。 当所有的鞭毛逆时针旋转时,会产生螺旋桨效应,推动细菌或多或少地沿直线方向移动。 在这种情况下,细菌执行称为游泳的运动。 所有鞭毛都顺同一方向旋转。

鞭毛帮助大肠杆菌翻滚或游泳,这是细菌在觅食期间执行的两项主要操作。 当它们顺时针旋转鞭毛时,每个鞭毛都会反向推动细胞。 当鞭毛向不同方向旋转时,细菌就会翻滚。 细菌在有利的环境中移动时翻滚较少,而在有害的环境中,它经常翻滚,从而感知营养梯度。 鞭毛的逆时针运动有助于细菌以非常高的速度游泳。

在上述算法中,细菌的行为是由一种称为细菌趋化性的机制决定的,该机制是这些微生物对环境中化学刺激的运动反应。 这种机制允许细菌向引诱剂(最常见的营养物质)移动,并远离驱虫剂(对细菌有潜在危害的物质)。 检测引诱剂和驱虫剂的受体位于细菌的两极。

由于细菌体积小,它无法捕捉两极之间有用和有害物质浓度的差异。 细菌通过测量运动过程中浓度的变化来判定这些物质的梯度。 这种运动的速度可以达到每秒几十个细菌长度。 例如,大肠杆菌通常以每秒 10-20 倍其体长的速度移动。


parent_clone

图例 1. 复制:分为原始(保持运动向量)和克隆(运动向量变化)细菌。
翻滚 - 细菌运动向量的变化

作者:Andrey Dik

 

最好能在更多的真实数据上测试所有这些优化算法,在这些数据中,参数为 5 个或更多,组合数量很大。

 
Aliaksandr Hryshyn #:

最好能在更多的真实数据上测试所有这些优化算法,在这些数据中,参数为 5 个或更多,组合数量很大。

测试中使用了三种类型的测试函数(平滑函数、带 "针 "极值的平滑函数和离散函数),每种函数的测试参数分别为10、50 和 1000(共 9 次测试)。

步长为 0 意味着精确到第 16 位数字的精度是双倍,这意味着 1000 个参数的步长是 0.0000000000000001,所以,数数你得到了多少个组合。

好吧,我来算算。大概是 10e10^1000,也就是 10e16000。

 

这是参数的数量:

input int    Test1FuncRuns_P    = 5;     //1) 测试中的功能数量
input int    Test2FuncRuns_P    = 25;    //2) 测试中的功能数量
input int    Test3FuncRuns_P    = 500;   //3) 测试中的功能数量

这就是种群数量:

input int    BatsNumber_P       = 50;    //蝙蝠数量

计算历时的次数

int epochCount = NumbTestFuncRuns_P / BatsNumber_P;

我的代码都正确吗?

 
Aliaksandr Hryshyn #:

1- 这是参数的数量:

这是群体的大小:

3.估计的历元数:

我的代码都正确吗?

1.测试函数是二维的,例如:

input int    Test1FuncRuns_P    = 5;     //1) 测试中的功能数量
指俄语中的 5 个测试函数,因此乘以 2 - 10 个优化参数

25 - 50 个优化参数

500 - 1000 个优化参数

2.是

3.是的,没错,估计历元数的目的是使 FF 运行的总次数相同,而不取决于算法中种群规模的选择,也就是说,在不同算法中,不同种群规模参数下的算法测试是公平的。

 

好的,谢谢。

这一系列文章中的所有算法都是可对等的,其他的还没看吗?我觉得我可以用它,它很有用,只是要优化的函数比较复杂,它有动态的参数数,既有实数参数,也有整数参数,而且范围不同,你必须事后解决问题

 
Aliaksandr Hryshyn #:

我明白了,谢谢。

这一系列文章中的所有算法都是可对等的,其他的还没看吗?我觉得我可以用它,它很有用,只是被优化的函数更复杂,它的参数数量是动态的,既有实数参数,也有整数参数,而且范围不同,你必须事后解决问题。


是的,当然。
 
干得好👏
 
Lorentzos Roussos #:
干得漂亮👏
谢谢!)