基于遗传优化算法优化蚁群算法关键参数。
Ga-ACO,解决蚁群优化受参数影响较大的问题,将阿尔法,贝塔,Q或者挥发因子等参数进行优化求解,避免人为经验选取,使效果更佳。
同理,可将该优化用于其他算法,作为自己的小创新
实验室调参侠的福音来了!今天咱们玩点有意思的——把遗传算法和蚁群算法搞个CP。
这俩算法单独用的时候总得手动调参,像极了相亲时互相嫌弃的男女,不如直接让它们内部消化(笑)
先看核心玩法:用遗传算法当红娘,给蚁群算法(ACO)的关键参数自动找对象。
阿尔法(信息素权重)、贝塔(启发式因子)、信息素挥发系数这三个参数小伙子的最佳组合,咱们让自然选择来决定。
上硬货!先看遗传算法的染色体怎么设计:
defcreate_individual():
]
这三个参数就像相亲对象的硬性条件,后面能不能成得看实际相处效果。
适应度函数直接用路径长度评估,越短越好:
deffitness(individual):
取倒数让数值越大越好
这里有个魔鬼细节:遗传算法的迭代次数要远小于ACO本身。
毕竟咱们只是找参数,不能让参数优化比原算法还费时(别问我怎么知道的,都是泪)
重点来了!交叉变异怎么玩才带劲?试试两点交叉:
defcrossover(parent1,
child
这种交叉方式比单点交叉更能维持参数多样性。
变异操作来个高斯扰动:
defmutate(individual):
individual
实际跑起来效果如何?在某物流路径数据集上对比:
传统ACO(固定参数):
基于遗传优化算法优化蚁群算法关键参数。
Ga-ACO,解决蚁群优化受参数影响较大的问题,将阿尔法,贝塔,Q或者挥发因子等参数进行优化求解,避免人为经验选取,使效果更佳。
同理,可将该优化用于其他算法,作为自己的小创新
迭代200次后最优路径:145km
GA-ACO(种群20代x10个体):
迭代总次数200次的情况下最优路径:132km
关键找到了意料之外的参数组合:alpha=3.21(偏高),说明信息素权重可以比常规设置更大,beta=1.07(偏低)说明不必过分依赖启发式信息。
这参数组合人类调参时根本想不到!
代码里藏了个骚操作——在遗传算法迭代时,每代保留ACO的历史最优路径信息素。
这样两个算法真正实现了信息共享,不是简单的串行调用。
最后说点人话:这种算法杂交的思路完全可以移植到其他场景。
比如把适应度函数换成聚类指标就能优化K-means的初始中心,换成准确率就能调神经网络的超参数。
只要改个适应度函数,发paper时就能多水几个实验章节(手动狗头)
- 上一篇: 重启电脑复制粘贴快捷键无效?一招解决,告别烦恼!
- 下一篇: 如何估算建设一个公园网站的预算?


