使用 scikit-opt 遗传算法
scikit-opt 遗传算法库简单使用
资料来源:
https://github.com/guofei9987/scikit-opt
https://scikit-opt.github.io/scikit-opt/#/zh/README更新
1
2021.12.16 初始
导语
这两个月项目中使用到了非常多的库,接下来的总结过程估计需要好几天.
这一篇是 scikit-opt 库.
scikit-opt 包含了众多启发式算法,包括遗传算法、蚁群、粒子群等,这里项目中选择了最熟悉的遗传算法.
遗传算法通常用在最优化问题上,需要一个进化方向,不停迭代变异种群,直到到达迭代次数或达到要求.
使用
使用前
1 | pip install scikit-opt |
官方例程 -> demo_ga.py
整体流程非常简单,定义函数,调库,即结束.
1 | import numpy as np |
1 | from sko.GA import GA |
GA 函数
- func: 需要最优化的函数
- n_dim: func 的变量数量
- size_pop: 种群大小
- max_iter: 最大迭代次数
- prob_mut: 突变的概率
- lb: 变量的上线,可以传入等维度数组,或一个值.
- ub: 变量的下线,可以传入等维度数组,或一个值.
- precision: 变量精度.
当变量是一个矩阵时,需要转为一维数组传入.
默认优化方向是最小化,需要最大化时,取负号,是某个具体值取个等式.
小批量问题,运行足够快了,但是还有其他加速办法
加速
官方文档有 4 种方式
- 矢量化
- 多线程
- 多进程
- 缓存化
按照示例是 矢量化 >> 多进程/多线程 > 不加速. 取值有限上缓存.
- 能矢量化就矢量化,对函数有要求,按照示例看似乎是要求尽量用 numpy 库完成操作.
- 多线程对应 io 密集/多进程对应 cpu 密集
- 取值空间有限,上缓存,缓存每次计算结果.
这里以缓存话为例,其他流程相同:
1 | mode = 'cached' |
然后正常运行…(就这)
结语
scikit-opt 还有封装了其他很多启发式算法,预计接下来的工作中会长期使用,谨记录下来备忘.