
COSCA:正余弦优化算法的复现与改进——包含反向学习策略初始化种群等优化措施
最近在折腾改进版的正余弦优化算法(COSCA),顺手把论文里的几个核心策略撸成了Python代码。
这篇主要聊聊怎么把反向学习策略、参数非线性调整和混沌搜索揉进传统SCA框架,顺便跑几个经典测试
函数看看效果。
先放个核心参数更新的代码片段,后面再拆解逻辑:
```python
def update_a(self, t):
# 非线性化参数调整(指数衰减比原论文线性变化更丝滑)
return self.a_max * np.exp(-5 * t / self.max_iter)
```
传统SCA最大的问题是参数a线性递减太死板,我们直接改成指数衰减。实验发现这种调整能让算法
前期更浪(全局探索),后期更稳(局部开发),收敛曲线明显平滑不少。
初始化阶段玩点花的——反向学习策略直接上代码:
```python
def opposition_based_initialization(self, pop_size, dim, lb, ub):
# 常规随机初始化
population = np.random.uniform(lb, ub, (pop_size, dim))
# 反向解生成(关键在这步)
opposition_pop = lb + ub - population
# 合并后选优
combined = np.vstack([population, opposition_pop])
fitness = np.array([self.func(ind) for ind in combined])
sorted_indices = np.argsort(fitness)
return combined[sorted_indices[:pop_size]]
```
这里有个魔鬼细节:lb和ub需要根据具体问题设定,对新手来说最容易踩的坑就是忘记处理越界问
题。实际操作中建议加个np.clip限制范围。
迭代过程中加入反向学习扰动,专治各种局部最优:
```python
def opposition_based_disturbance(self, best_pos, t):