Python主要智能优化算法库汇总
最近幾年簡單瀏覽和對(duì)比了一些智能算法的庫。現(xiàn)將各種庫的主要信息、相關(guān)優(yōu)缺點(diǎn)簡單整理如下,各位同學(xué)可根據(jù)自己的需求和喜好進(jìn)行選擇。
文章目錄
- 1、DEAP
- 2、mealpy
- 3、scikit-opt (國產(chǎn)良心)
- 4、Geatpy2(國產(chǎn)用心)
- 5、pygmo2
- 6、pyswarms
- 7、SciPy(想不到吧)
- 小結(jié)
1、DEAP
項(xiàng)目地址:https://github.com/DEAP/deap
安裝:
pip install deap優(yōu)點(diǎn):
- 起點(diǎn)高,發(fā)表在Journal of Machine Learning Research
- 用法靈活,所有模塊均可自定義
缺點(diǎn):
- 上手麻煩比較麻煩
比如它是這樣設(shè)置參數(shù)然后完成一個(gè)簡單的函數(shù)最大優(yōu)化的:
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)-
速度慢(許多人都反應(yīng)有這個(gè)問題)
-
集成的算法少(當(dāng)然也可以通過自定義來修改,但這樣和完全自寫沒多大區(qū)別)
-
超過半年沒有更新(最近更新也只是安裝上的修改)
2、mealpy
項(xiàng)目地址:https://github.com/thieunguyen5991/mealpy
安裝:
pip install meaply優(yōu)點(diǎn):
- 算法豐富,集成了現(xiàn)有的62種算法,目測應(yīng)該還在繼續(xù)更新添加
- 上手容易,代碼簡單,比如對(duì)標(biāo)準(zhǔn)函數(shù)庫的函數(shù)進(jìn)行優(yōu)化:
缺點(diǎn):
- 整體設(shè)計(jì)似乎不太規(guī)范,文檔解釋不夠
- 語言上似乎還存在一點(diǎn)小問題,英語應(yīng)用不夠規(guī)范(這可能也是作者沒有發(fā)表很好的雜志的原因之一)
- 集成了多種算法但未列舉參考文獻(xiàn),不方便論文引用
3、scikit-opt (國產(chǎn)良心)
項(xiàng)目地址:https://github.com/guofei9987/scikit-opt
官文文檔地址:https://scikit-opt.github.io/scikit-opt/#/zh/README
安裝:
pip install scikit-opt優(yōu)點(diǎn):
-
上手容易,代碼簡單,尤其許多用法很像Matlab。比如官方文檔就提供了一些例子:使用遺傳算法進(jìn)行曲線擬合
-
中文文檔,并且文檔很全。大佬的CSDN主頁。(作者自稱是京東算法工程師,這個(gè)庫也的確感覺得到一些情懷,方便實(shí)用的感覺)
-
在使用方便的基礎(chǔ)上,也提供了不少接口用于自行修改。尤其可以自定義算子。
-
一些較好玩的特性:GPU加速、斷點(diǎn)運(yùn)行等。
缺點(diǎn):
-
目前似乎還沒有集成足夠多的方法。大類有3類,共7種算法。
-
算法本身的優(yōu)化似乎還不足(未仔細(xì)測試)
4、Geatpy2(國產(chǎn)用心)
項(xiàng)目地址:https://github.com/geatpy-dev/geatpy
官網(wǎng)地址:http://geatpy.com/
安裝:
pip install geatpy或者強(qiáng)制版本
pip install geatpy==2.5.1優(yōu)點(diǎn):
- 上手容易,實(shí)現(xiàn)簡單
- 文檔完整,示例豐富(中文文檔)
- 功能齊全,除算法以外也封裝了許多實(shí)用的功能,比如數(shù)據(jù)可視化等
缺點(diǎn):
- 代碼風(fēng)格詭異,比如
- 英文用語不規(guī)范,變量命名相對(duì)隨意,比如入門文檔中,將目標(biāo)函數(shù)翻譯成"aimFunc",變量名稱XM?等。
- 文檔開展還顯得比較稚嫩,比如主頁文檔就用插件顯示,官網(wǎng)體驗(yàn)還欠些火候
注:這個(gè)項(xiàng)目得多補(bǔ)充幾句,目測應(yīng)該是碩士生寫的。總體的設(shè)計(jì)、DEMO、文檔上給人感覺都遠(yuǎn)不如上面幾個(gè)老練(尤其和DEAP相比)。但幾個(gè)學(xué)生跨校合作,在不長的時(shí)間內(nèi)能夠完成如此完整的一個(gè)工作也實(shí)非易事。也希望他們能夠繼續(xù)進(jìn)步。綜合來看,這個(gè)項(xiàng)目個(gè)人認(rèn)為屬于國產(chǎn)良心。
5、pygmo2
項(xiàng)目地址:https://github.com/esa/pygmo2
安裝:
pip install pygmo注:安裝還依賴如下環(huán)境
- the pagmo C++ library, 2.13 +;the Boost serialization library,1.60+;NumPy;cloudpickle.
其它可能會(huì)用到的環(huán)境:
- dill;Matplotlib;NetworkX
優(yōu)點(diǎn):
- 功能豐富
- 支持并行和分布式計(jì)算(本身運(yùn)行效率也很高)
- 用法靈活
- 感覺測試相對(duì)穩(wěn)定(未仔細(xì)測試)
缺點(diǎn):
- 上手相對(duì)麻煩
- 依賴項(xiàng)較多,尤其要求對(duì)應(yīng)C++版的軟件環(huán)境
- 算法有限
注:這個(gè)庫也吐槽一句,網(wǎng)傳很厲害,但真沒看出來除了看起來專業(yè)以外有何厲害之處。當(dāng)然通常以C++為底層的東西有可能在大量級(jí)問題上的處理更加容易部署,但一般的用戶也用不到。
6、pyswarms
項(xiàng)目地址:https://github.com/ljvmiranda921/pyswarms
安裝:
pip install pyswarms優(yōu)點(diǎn):
- 簡單,易上手,基本上也屬于幾行代碼入門型
- 可視化,尤其動(dòng)態(tài)可視化做得好。(亮點(diǎn)),比如畫出圖形,基本上就是一句代碼:
缺點(diǎn):
- 算法少。只有基于PSO的各類問題的算法(本質(zhì)上其實(shí)就只是一個(gè)算法)
- 靈活度不夠。
- 起點(diǎn)低。發(fā)表的論文既沒進(jìn)入CCF推薦,也沒進(jìn)入SCI。同時(shí)雖然號(hào)稱有許多研究論文用過,但仔細(xì)看級(jí)別都不高(基本都屬于三無型)
7、SciPy(想不到吧)
項(xiàng)目地址:https://github.com/scipy/scipy
官網(wǎng):https://www.scipy.org/
官方文檔: https://docs.scipy.org/doc/
安裝(當(dāng)然其實(shí)當(dāng)你裝上Python的時(shí)候它就在了):
pip install scipy特別說明: scipy作為一個(gè)相對(duì)嚴(yán)謹(jǐn)和‘傳統(tǒng)’的數(shù)值計(jì)算庫,基本上常用的數(shù)值計(jì)算方法都有涉及。當(dāng)然數(shù)值計(jì)算型的庫通常都不會(huì)把智能優(yōu)化(啟發(fā)式算法)作為重點(diǎn)。它集成了十分有限的幾種優(yōu)化算法:差分進(jìn)化、模擬退火等。但它仍然有不少優(yōu)點(diǎn):
優(yōu)點(diǎn):
- 作為嚴(yán)謹(jǐn)?shù)臄?shù)值計(jì)算庫,它的正確性和穩(wěn)定性值得信賴(超過800個(gè)contributor,其中有不少是名校的教師、博士等)
- 使用方便、簡單
- scipy也可以自定義優(yōu)化算法
缺點(diǎn):
- 自然就是算法太少了
- 雖然可以自定義,但麻煩程度幾乎相當(dāng)于完全自己造輪子
小結(jié)
經(jīng)過一番調(diào)研,發(fā)現(xiàn)在Python的包庫里面有質(zhì)量的智能算法庫還真是非常有限(除上述庫以外,還有不少幾個(gè)算法就成一個(gè)庫的庫,實(shí)在不敢恭維,簡單玩玩就行了)。這里個(gè)人認(rèn)為可能有以下幾個(gè)方面:
- 智能算法本身實(shí)現(xiàn)并不太難
- 在當(dāng)前的大環(huán)境下,大規(guī)模的問題下智能算法并不具有明顯的優(yōu)勢
- 專業(yè)做算法的通常仍然還是以Matlab為主(尤其數(shù)學(xué)類的)
- 智能算法,尤其進(jìn)化算法,本質(zhì)上差異并不大
或許就是以上原因?qū)е卢F(xiàn)在我們看不到特別驚艷的庫,目前稍做得好一些的也就是在輔助功能上集成得較好而已。
當(dāng)然,不管怎樣,目前有這些庫的話,對(duì)于不是完全專業(yè)從事相關(guān)算法研究的人員而言也完全夠用了。就個(gè)人目前體驗(yàn)而言,綜合來看最推薦的庫為scikit-opt。當(dāng)然終歸到底,自己用著好就是最好。
總結(jié)
以上是生活随笔為你收集整理的Python主要智能优化算法库汇总的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: Python之并行--基于joblib
- 下一篇: Python轻量级IDE推荐 -- Ju