遗传-粒子群自适应优化算法--MATLAB 两个算法融合且加入自适应变化的权重和学习因子

📅 发布时间:2026/7/11 23:03:52 👁️ 浏览次数:
遗传-粒子群自适应优化算法--MATLAB 两个算法融合且加入自适应变化的权重和学习因子
遗传-粒子群自适应优化算法--MATLAB 两个算法融合且加入自适应变化的权重和学习因子当遗传算法和粒子群开始组CP优化界突然有了新的打开方式。这俩算法一个擅长全局撒网一个精于局部突击把他们的优势揉碎了重组再配上自适应参数调节效果堪比算法界的鸳鸯锅——清汤红汤自由切换。先看核心的自适应公式设计。权重ω这个调节器要是能自己变聪明算法就能在勘探和开发模式间丝滑切换% 自适应惯性权重计算 omega omega_max - (omega_max - omega_min) * (iter/Max_iter)^2; c1 c1_max - (c1_max - c1_min) * iter/Max_iter; c2 c2_min (c2_max - c2_min) * iter/Max_iter;这个设计挺有意思——初期让惯性权重保持较大值方便全局探索随着迭代次数平方衰减后期收缩更快。社会学习因子c2反向操作越往后越重视群体经验避免早熟。遗传-粒子群自适应优化算法--MATLAB 两个算法融合且加入自适应变化的权重和学习因子交叉变异操作是遗传算法的精髓这里用锦标赛选择搭配两点交叉% 遗传操作部分 parent1 pop(randi(pop_size), :); parent2 pop(randi(pop_size), :); cross_point sort(randperm(dim,2)); child [parent1(1:cross_point(1)),... parent2(cross_point(1)1:cross_point(2)),... parent1(cross_point(2)1:end)];注意这里交叉点随机选两个位置比单点交叉能保留更多模式。变异操作加了高斯扰动标准差随迭代减小mutate_gene rand(1,dim) mutate_rate; child(mutate_gene) child(mutate_gene) sigma*randn(1,sum(mutate_gene));主循环里粒子更新逻辑藏着小心机——每5代来一次群体大换血if mod(iter,5) 0 [~,idx] sort(fitness); pop(idx(1:replace_num),:) init_pop(replace_num,dim,lb,ub); end这种周期性重启机制专治各种局部最优卡壳相当于给算法打强心针。速度更新公式把PSO的经典操作和GA的交叉变异缝合得毫无违和感v omega*v c1*rand*(pbest - pop) c2*rand*(gbest - pop); pop pop v; pop max(min(pop,ub),lb); % 越界处理拿Sphere函数试刀迭代曲线前100代下降迅猛到300代左右开始精细调参。有意思的是对比纯PSO版本混合算法在后期仍保持明显震荡说明全局搜索能力持续在线。这种混血算法最大的爽点在于当粒子们开始扎堆内卷时突然一波遗传变异直接把舒适区掀翻。参数的自适应调整就像自动驾驶前期广撒网后期精收网省去了手动调参的玄学操作。测试代码可自行替换目标函数建议先用-5.12~5.12范围的经典测试函数开箱体验。注意交叉概率别超过0.3变异率控制在0.1以下否则容易变成布朗运动现场