Python主要智能优化算法库汇总
最近幾年簡單瀏覽和對比了一些智能算法的庫。現將各種庫的主要信息、相關優缺點簡單整理如下,各位同學可根據自己的需求和喜好進行選擇。
文章目錄
- 1、DEAP
- 2、mealpy
- 3、scikit-opt (國產良心)
- 4、Geatpy2(國產用心)
- 5、pygmo2
- 6、pyswarms
- 7、SciPy(想不到吧)
- 小結
1、DEAP
項目地址:https://github.com/DEAP/deap
安裝:
pip install deap優點:
- 起點高,發表在Journal of Machine Learning Research
- 用法靈活,所有模塊均可自定義
缺點:
- 上手麻煩比較麻煩
比如它是這樣設置參數然后完成一個簡單的函數最大優化的:
import random from deap import creator, base, tools, algorithmscreator.create("FitnessMax", base.Fitness, weights=(1.0,)) creator.create("Individual", list, fitness=creator.FitnessMax)toolbox = base.Toolbox()toolbox.register("attr_bool", random.randint, 0, 1) toolbox.register("individual", tools.initRepeat, creator.Individual, toolbox.attr_bool, n=100) toolbox.register("population", tools.initRepeat, list, toolbox.individual)def evalOneMax(individual):return sum(individual),toolbox.register("evaluate", evalOneMax) toolbox.register("mate", tools.cxTwoPoint) toolbox.register("mutate", tools.mutFlipBit, indpb=0.05) toolbox.register("select", tools.selTournament, tournsize=3)population = toolbox.population(n=300)NGEN=40 for gen in range(NGEN):offspring = algorithms.varAnd(population, toolbox, cxpb=0.5, mutpb=0.1)fits = toolbox.map(toolbox.evaluate, offspring)for fit, ind in zip(fits, offspring):ind.fitness.values = fitpopulation = toolbox.select(offspring, k=len(population)) top10 = tools.selBest(population, k=10)-
速度慢(許多人都反應有這個問題)
-
集成的算法少(當然也可以通過自定義來修改,但這樣和完全自寫沒多大區別)
-
超過半年沒有更新(最近更新也只是安裝上的修改)
2、mealpy
項目地址:https://github.com/thieunguyen5991/mealpy
安裝:
pip install meaply優點:
- 算法豐富,集成了現有的62種算法,目測應該還在繼續更新添加
- 上手容易,代碼簡單,比如對標準函數庫的函數進行優化:
缺點:
- 整體設計似乎不太規范,文檔解釋不夠
- 語言上似乎還存在一點小問題,英語應用不夠規范(這可能也是作者沒有發表很好的雜志的原因之一)
- 集成了多種算法但未列舉參考文獻,不方便論文引用
3、scikit-opt (國產良心)
項目地址:https://github.com/guofei9987/scikit-opt
官文文檔地址:https://scikit-opt.github.io/scikit-opt/#/zh/README
安裝:
pip install scikit-opt優點:
-
上手容易,代碼簡單,尤其許多用法很像Matlab。比如官方文檔就提供了一些例子:使用遺傳算法進行曲線擬合
-
中文文檔,并且文檔很全。大佬的CSDN主頁。(作者自稱是京東算法工程師,這個庫也的確感覺得到一些情懷,方便實用的感覺)
-
在使用方便的基礎上,也提供了不少接口用于自行修改。尤其可以自定義算子。
-
一些較好玩的特性:GPU加速、斷點運行等。
缺點:
-
目前似乎還沒有集成足夠多的方法。大類有3類,共7種算法。
-
算法本身的優化似乎還不足(未仔細測試)
4、Geatpy2(國產用心)
項目地址:https://github.com/geatpy-dev/geatpy
官網地址:http://geatpy.com/
安裝:
pip install geatpy或者強制版本
pip install geatpy==2.5.1優點:
- 上手容易,實現簡單
- 文檔完整,示例豐富(中文文檔)
- 功能齊全,除算法以外也封裝了許多實用的功能,比如數據可視化等
缺點:
- 代碼風格詭異,比如
- 英文用語不規范,變量命名相對隨意,比如入門文檔中,將目標函數翻譯成"aimFunc",變量名稱XM?等。
- 文檔開展還顯得比較稚嫩,比如主頁文檔就用插件顯示,官網體驗還欠些火候
注:這個項目得多補充幾句,目測應該是碩士生寫的。總體的設計、DEMO、文檔上給人感覺都遠不如上面幾個老練(尤其和DEAP相比)。但幾個學生跨校合作,在不長的時間內能夠完成如此完整的一個工作也實非易事。也希望他們能夠繼續進步。綜合來看,這個項目個人認為屬于國產良心。
5、pygmo2
項目地址:https://github.com/esa/pygmo2
安裝:
pip install pygmo注:安裝還依賴如下環境
- the pagmo C++ library, 2.13 +;the Boost serialization library,1.60+;NumPy;cloudpickle.
其它可能會用到的環境:
- dill;Matplotlib;NetworkX
優點:
- 功能豐富
- 支持并行和分布式計算(本身運行效率也很高)
- 用法靈活
- 感覺測試相對穩定(未仔細測試)
缺點:
- 上手相對麻煩
- 依賴項較多,尤其要求對應C++版的軟件環境
- 算法有限
注:這個庫也吐槽一句,網傳很厲害,但真沒看出來除了看起來專業以外有何厲害之處。當然通常以C++為底層的東西有可能在大量級問題上的處理更加容易部署,但一般的用戶也用不到。
6、pyswarms
項目地址:https://github.com/ljvmiranda921/pyswarms
安裝:
pip install pyswarms優點:
- 簡單,易上手,基本上也屬于幾行代碼入門型
- 可視化,尤其動態可視化做得好。(亮點),比如畫出圖形,基本上就是一句代碼:
缺點:
- 算法少。只有基于PSO的各類問題的算法(本質上其實就只是一個算法)
- 靈活度不夠。
- 起點低。發表的論文既沒進入CCF推薦,也沒進入SCI。同時雖然號稱有許多研究論文用過,但仔細看級別都不高(基本都屬于三無型)
7、SciPy(想不到吧)
項目地址:https://github.com/scipy/scipy
官網:https://www.scipy.org/
官方文檔: https://docs.scipy.org/doc/
安裝(當然其實當你裝上Python的時候它就在了):
pip install scipy特別說明: scipy作為一個相對嚴謹和‘傳統’的數值計算庫,基本上常用的數值計算方法都有涉及。當然數值計算型的庫通常都不會把智能優化(啟發式算法)作為重點。它集成了十分有限的幾種優化算法:差分進化、模擬退火等。但它仍然有不少優點:
優點:
- 作為嚴謹的數值計算庫,它的正確性和穩定性值得信賴(超過800個contributor,其中有不少是名校的教師、博士等)
- 使用方便、簡單
- scipy也可以自定義優化算法
缺點:
- 自然就是算法太少了
- 雖然可以自定義,但麻煩程度幾乎相當于完全自己造輪子
小結
經過一番調研,發現在Python的包庫里面有質量的智能算法庫還真是非常有限(除上述庫以外,還有不少幾個算法就成一個庫的庫,實在不敢恭維,簡單玩玩就行了)。這里個人認為可能有以下幾個方面:
- 智能算法本身實現并不太難
- 在當前的大環境下,大規模的問題下智能算法并不具有明顯的優勢
- 專業做算法的通常仍然還是以Matlab為主(尤其數學類的)
- 智能算法,尤其進化算法,本質上差異并不大
或許就是以上原因導致現在我們看不到特別驚艷的庫,目前稍做得好一些的也就是在輔助功能上集成得較好而已。
當然,不管怎樣,目前有這些庫的話,對于不是完全專業從事相關算法研究的人員而言也完全夠用了。就個人目前體驗而言,綜合來看最推薦的庫為scikit-opt。當然終歸到底,自己用著好就是最好。
總結
以上是生活随笔為你收集整理的Python主要智能优化算法库汇总的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: Python之并行--基于joblib
- 下一篇: sklearn快速入门教程 -- 机器学