日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當(dāng)前位置: 首頁 > 编程语言 > python >内容正文

python

Python主要智能优化算法库汇总

發(fā)布時(shí)間:2025/4/16 python 38 豆豆
生活随笔 收集整理的這篇文章主要介紹了 Python主要智能优化算法库汇总 小編覺得挺不錯(cuò)的,現(xiàn)在分享給大家,幫大家做個(gè)參考.

最近幾年簡單瀏覽和對(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)化:
from opfunu.type_based.uni_modal import Functionsfrom mealpy.evolutionary_based.GA import BaseGAt1 = Functions()## Setting parametersobjective_func = t1._sum_squres__problem_size = 30domain_range = [-15, 15]log = Trueepoch = 100pop_size = 50pc = 0.95pm = 0.025md = BaseGA(objective_func, problem_size, domain_range, log, epoch, pop_size, pc, pm)best_position, best_fit, list_loss = md._train__()print(best_fit)

缺點(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?等。
def aimFunc(self, pop): # 目標(biāo)函數(shù)Vars = pop.Phen # 得到?jīng)Q策變量矩陣XM = Vars[:,(self.M-1):]g = 100 * (self.Dim - self.M + 1 + np.sum(((XM - 0.5)**2 - np.cos(20 * np.pi * (XM - 0.5))), 1, keepdims = True))ones_metrix = np.ones((Vars.shape[0], 1))f = 0.5 * np.fliplr(np.cumprod(np.hstack([ones_metrix, Vars[:,:self.M-1]]), 1)) * np.hstack([ones_metrix, 1 - Vars[:, range(self.M - 2, -1, -1)]]) * np.tile(1 + g, (1, self.M))pop.ObjV = f # 把求得的目標(biāo)函數(shù)值賦值給種群pop的ObjV
  • 文檔開展還顯得比較稚嫩,比如主頁文檔就用插件顯示,官網(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)),比如畫出圖形,基本上就是一句代碼:
plot_contour(pos_history=optimizer.pos_history, mesher=m, designer=d, mark=(0,0))

pos_history_3d = m.compute_history_3d(optimizer.pos_history) # preprocessing animation3d = plot_surface(pos_history=pos_history_3d,mesher=m, designer=d,mark=(0,0,0))

缺點(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)容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網(wǎng)站內(nèi)容還不錯(cuò),歡迎將生活随笔推薦給好友。