1.约束的处理
实际问题或者项目通常是带有一定约束的优化问题,我在做一个材料方面的体系设计时,利用deap去进行体系的优化,当时没有了解约束的问题,只是觉得优化的结果不符合原子百分比之和为100的要求,所以对交叉函数和变异函数进行了自定义,虽然结果还可以,但始终觉得优化的有些问题,最近在比较不同基础优化算法的优化结果及效率时,才发现约束可以通过惩罚函数施加,部分库也提供了一些参数进行来引入约束函数。
约束的处理方式比较多,可以分为罚函数法、可行性法则、随机排序法、ᴈ-约束处理法、多目标优化法、混合法等 6 类。其中最简单的应该就是罚函数法了。
具体方式可以参见“小怪兽会微笑”博主的文章,链接在下面:
2.相关库的约束
在使用智能优化算法时,可供参考的库有不少,大家也都可以搜到,这里只讲讲三个库,DEAP库,sko库以及mealpy库。
2.1.1 deap库
deap主要是针对遗传算法的,遗传算法的各个部分都可以自定义,我之前做的就是初始种群,交叉函数,变异函数的自定义。它的约束是通过装饰器实现的,但实际上,也可以从下面文章中看出,对于静态约束,直接在适应度函数中添加惩罚项,也就不需要再用到装饰器了。
”哎呦-_-不错”博主给出了示例。
基于DEAP库的python进化算法-6.遗传算法中的约束处理_deap 因子-CSDN博客()http://t.csdnimg.cn/hnre0
2.1.2 sko库
sko库包含几个比较常见的智能优化算法,比如遗传算法,粒子群,模拟退火,差分进化等,sko也有约束的关键字,可以在官网的文档查看相关输入及输出。同样有博主给出了相关示例。
”guofei9987"博主的文章:
2.1.3 mealpy库
mealpy库包含的智能优化算法很多,共计215个算法,只是mealpy库建议用户自定义一个惩罚函数。示例官网上有,我也懒得写。
3.总结
实际上,罚函数可以直接通过适应度函数进行构建(如死亡惩罚,静态惩罚),或者在算法迭代过程中构建(如动态惩罚,自适应惩罚等),并不一定需要官方提供相应的功能或者关键字输入。
上面的三个库我都是简单的使用了一下,说一下想法。如果你只是单纯的使用智能优化算法,不需要各种算法比较,可以直接用sko的库,很简单。如果你需要做遗传算法的自定义,DEAP库不错,如果需要了解各种不同智能优化算法并进行对比,mealpy库是个不错的选择(相关问题在github上还有作者回答,十分感谢)。