杂草算法及其python实现过程
2024-09-10 00:00:07  阅读数 819

群智能算法来源于自然界中不同物种特有的生存法则,被广泛应用于复杂问题最优解计算当中。近年来,群智能研究领域出现诸多算法,如蚁群算法、粒子群算法(附完整代码)、蜂群算法、猫群算法、果蝇算法、杂草算法以及布谷鸟算法等。其中,杂草算法代码简单,易于实现,具有较强的自适应性和鲁棒性。

自然界中杂草生长简化流程

在一片荒芜的土壤的不同位置生长出了一些杂草

不同杂草在草原上的适应度不同,适应度高的个体生长旺盛,将会产生更多的子代种子。适应度低的个体生长缓慢,将产生更少的子代

现实世界中,杂草的种子随着动物的运动、风能等传播到父代个体周围。种子传播的距离服从正态分布。

自然选择按照优胜劣汰原则淘汰掉那些不适应当前环境的个体(杂草),留下那些适应当前环境的杂草。

杂草算法步骤:

1、初始化种群

随机生成一定数量的初始解(对应现实世界的杂草),这些初始解(杂草)随机地均匀地分布在搜索空间(草原)内。

2、种群繁殖

接近最优解的解具有更强的适应度,会产生更多的子代个体(下一代的解)。远离最优解的解具有较低适应度,会产生较少的下一代个体。因此,当前解产生子代种子个数公式如下:

seednum= \frac{Fx-Fmin}{Fmax-Fmin} \times (seedmax-seedmin) + +seedmin

其中,Fx代表当前解的适应度,Fmin代表当前种群中所有解的最小适应度,Fmax代表代表当前种群中所有解的最大适应度。seedmax和seedmin分别代表每次迭代过程中单个解能够随机生成的最大/最小种子个数。

注意,当搜索目标函数最大解时,

\frac{Fx-Fmin}{Fmax-Fmin} = \frac{Sx-Smin}{Smax-Smin}

当搜索目标函数最小解时

\frac{Fx-Fmin}{Fmax-Fmin} = \frac{Smax-Sx}{Smax-Smin}

其中Smax代表当前种群目标函数最大值,Smin代表当前种群目标函数最小值。(当搜索最小值的时候,函数值最小的解适应度最大)

3、空间搜索

最优解搜索过程中,当前解的子代服从正态分布,该正态分布的均值为当前解的位置,标准差定义为sigma,sigma随着时间的推移与当前迭代次数g成负相关,在sigma最大值sigma_max、sigma最小值sigma_min、最大迭代次数g_max以及非线性调节因子w给定的情况下:

sigma=sigma_{min} +  (sigma_{max} - sigma_{min}) \times (\frac{g_{max} - g}{g})^w

4、竞争淘汰

最优解搜索过程中,当我们当前解集合大于预设的max_weed_size时,按照优胜劣汰的原则淘汰那些适应度低的解而保留那些适应度高的个体,这样经过数次迭代后该算法能够收敛到最优解。

完整代码:杂草算法