新聞中心
python有沒有簡單的遺傳算法庫
首先遺傳算法是一種優(yōu)化算法,通過模擬基因的優(yōu)勝劣汰,進行計算(具體的算法思路什么的就不贅述了)。大致過程分為初始化編碼、個體評價、選擇,交叉,變異。
創(chuàng)新互聯(lián)建站服務項目包括普安網(wǎng)站建設、普安網(wǎng)站制作、普安網(wǎng)頁制作以及普安網(wǎng)絡營銷策劃等。多年來,我們專注于互聯(lián)網(wǎng)行業(yè),利用自身積累的技術優(yōu)勢、行業(yè)經(jīng)驗、深度合作伙伴關系等,向廣大中小型企業(yè)、政府機構(gòu)等提供互聯(lián)網(wǎng)行業(yè)的解決方案,普安網(wǎng)站推廣取得了明顯的社會效益與經(jīng)濟效益。目前,我們服務的客戶以成都為中心已經(jīng)輻射到普安省份的部分城市,未來相信會繼續(xù)擴大服務區(qū)域并繼續(xù)獲得客戶的支持與信任!
以目標式子 y = 10 * sin(5x) + 7 * cos(4x)為例,計算其最大值
首先是初始化,包括具體要計算的式子、種群數(shù)量、染色體長度、交配概率、變異概率等。并且要對基因序列進行初始化
[python]?view plain?copy
pop_size?=?500??????#?種群數(shù)量
max_value?=?10??????#?基因中允許出現(xiàn)的最大值
chrom_length?=?10???????#?染色體長度
pc?=?0.6????????????#?交配概率
pm?=?0.01???????????#?變異概率
results?=?[[]]??????#?存儲每一代的最優(yōu)解,N個二元組
fit_value?=?[]??????#?個體適應度
fit_mean?=?[]???????#?平均適應度
pop?=?geneEncoding(pop_size,?chrom_length)
其中genEncodeing是自定義的一個簡單隨機生成序列的函數(shù),具體實現(xiàn)如下
[python]?view plain?copy
def?geneEncoding(pop_size,?chrom_length):
pop?=?[[]]
for?i?in?range(pop_size):
temp?=?[]
for?j?in?range(chrom_length):
temp.append(random.randint(0,?1))
pop.append(temp)
return?pop[1:]
編碼完成之后就是要進行個體評價,個體評價主要是計算各個編碼出來的list的值以及對應帶入目標式子的值。其實編碼出來的就是一堆2進制list。這些2進制list每個都代表了一個數(shù)。其值的計算方式為轉(zhuǎn)換為10進制,然后除以2的序列長度次方減一,也就是全一list的十進制減一。根據(jù)這個規(guī)則就能計算出所有l(wèi)ist的值和帶入要計算式子中的值,代碼如下
[python]?view plain?copy
#?0.0?coding:utf-8?0.0
#?解碼并計算值
import?math
def?decodechrom(pop,?chrom_length):
temp?=?[]
for?i?in?range(len(pop)):
t?=?0
for?j?in?range(chrom_length):
t?+=?pop[i][j]?*?(math.pow(2,?j))
temp.append(t)
return?temp
def?calobjValue(pop,?chrom_length,?max_value):
temp1?=?[]
obj_value?=?[]
temp1?=?decodechrom(pop,?chrom_length)
for?i?in?range(len(temp1)):
x?=?temp1[i]?*?max_value?/?(math.pow(2,?chrom_length)?-?1)
obj_value.append(10?*?math.sin(5?*?x)?+?7?*?math.cos(4?*?x))
return?obj_value
有了具體的值和對應的基因序列,然后進行一次淘汰,目的是淘汰掉一些不可能的壞值。這里由于是計算最大值,于是就淘汰負值就好了
[python]?view plain?copy
#?0.0?coding:utf-8?0.0
#?淘汰(去除負值)
def?calfitValue(obj_value):
fit_value?=?[]
c_min?=?0
for?i?in?range(len(obj_value)):
if(obj_value[i]?+?c_min??0):
temp?=?c_min?+?obj_value[i]
else:
temp?=?0.0
fit_value.append(temp)
return?fit_value
然后就是進行選擇,這是整個遺傳算法最核心的部分。選擇實際上模擬生物遺傳進化的優(yōu)勝劣汰,讓優(yōu)秀的個體盡可能存活,讓差的個體盡可能的淘汰。個體的好壞是取決于個體適應度。個體適應度越高,越容易被留下,個體適應度越低越容易被淘汰。具體的代碼如下
[python]?view plain?copy
#?0.0?coding:utf-8?0.0
#?選擇
import?random
def?sum(fit_value):
total?=?0
for?i?in?range(len(fit_value)):
total?+=?fit_value[i]
return?total
def?cumsum(fit_value):
for?i?in?range(len(fit_value)-2,?-1,?-1):
t?=?0
j?=?0
while(j?=?i):
t?+=?fit_value[j]
j?+=?1
fit_value[i]?=?t
fit_value[len(fit_value)-1]?=?1
def?selection(pop,?fit_value):
newfit_value?=?[]
#?適應度總和
total_fit?=?sum(fit_value)
for?i?in?range(len(fit_value)):
newfit_value.append(fit_value[i]?/?total_fit)
#?計算累計概率
cumsum(newfit_value)
ms?=?[]
pop_len?=?len(pop)
for?i?in?range(pop_len):
ms.append(random.random())
ms.sort()
fitin?=?0
newin?=?0
newpop?=?pop
#?轉(zhuǎn)輪盤選擇法
while?newin??pop_len:
if(ms[newin]??newfit_value[fitin]):
newpop[newin]?=?pop[fitin]
newin?=?newin?+?1
else:
fitin?=?fitin?+?1
pop?=?newpop
以上代碼主要進行了3個操作,首先是計算個體適應度總和,然后在計算各自的累積適應度。這兩步都好理解,主要是第三步,轉(zhuǎn)輪盤選擇法。這一步首先是生成基因總數(shù)個0-1的小數(shù),然后分別和各個基因的累積個體適應度進行比較。如果累積個體適應度大于隨機數(shù)則進行保留,否則就淘汰。這一塊的核心思想在于:一個基因的個體適應度越高,他所占據(jù)的累計適應度空隙就越大,也就是說他越容易被保留下來。
選擇完后就是進行交配和變異,這個兩個步驟很好理解。就是對基因序列進行改變,只不過改變的方式不一樣
交配:
[python]?view plain?copy
#?0.0?coding:utf-8?0.0
#?交配
import?random
def?crossover(pop,?pc):
pop_len?=?len(pop)
for?i?in?range(pop_len?-?1):
if(random.random()??pc):
cpoint?=?random.randint(0,len(pop[0]))
temp1?=?[]
temp2?=?[]
temp1.extend(pop[i][0:cpoint])
temp1.extend(pop[i+1][cpoint:len(pop[i])])
temp2.extend(pop[i+1][0:cpoint])
temp2.extend(pop[i][cpoint:len(pop[i])])
pop[i]?=?temp1
pop[i+1]?=?temp2
變異:
[python]?view plain?copy
#?0.0?coding:utf-8?0.0
#?基因突變
import?random
def?mutation(pop,?pm):
px?=?len(pop)
py?=?len(pop[0])
for?i?in?range(px):
if(random.random()??pm):
mpoint?=?random.randint(0,?py-1)
if(pop[i][mpoint]?==?1):
pop[i][mpoint]?=?0
else:
pop[i][mpoint]?=?1
整個遺傳算法的實現(xiàn)完成了,總的調(diào)用入口代碼如下
[python]?view plain?copy
#?0.0?coding:utf-8?0.0
import?matplotlib.pyplot?as?plt
import?math
from?calobjValue?import?calobjValue
from?calfitValue?import?calfitValue
from?selection?import?selection
from?crossover?import?crossover
from?mutation?import?mutation
from?best?import?best
from?geneEncoding?import?geneEncoding
print?'y?=?10?*?math.sin(5?*?x)?+?7?*?math.cos(4?*?x)'
#?計算2進制序列代表的數(shù)值
def?b2d(b,?max_value,?chrom_length):
t?=?0
for?j?in?range(len(b)):
t?+=?b[j]?*?(math.pow(2,?j))
t?=?t?*?max_value?/?(math.pow(2,?chrom_length)?-?1)
return?t
pop_size?=?500??????#?種群數(shù)量
max_value?=?10??????#?基因中允許出現(xiàn)的最大值
chrom_length?=?10???????#?染色體長度
pc?=?0.6????????????#?交配概率
pm?=?0.01???????????#?變異概率
results?=?[[]]??????#?存儲每一代的最優(yōu)解,N個二元組
fit_value?=?[]??????#?個體適應度
fit_mean?=?[]???????#?平均適應度
#?pop?=?[[0,?1,?0,?1,?0,?1,?0,?1,?0,?1]?for?i?in?range(pop_size)]
pop?=?geneEncoding(pop_size,?chrom_length)
for?i?in?range(pop_size):
obj_value?=?calobjValue(pop,?chrom_length,?max_value)????????#?個體評價
fit_value?=?calfitValue(obj_value)??????#?淘汰
best_individual,?best_fit?=?best(pop,?fit_value)????????#?第一個存儲最優(yōu)的解,?第二個存儲最優(yōu)基因
results.append([best_fit,?b2d(best_individual,?max_value,?chrom_length)])
selection(pop,?fit_value)???????#?新種群復制
crossover(pop,?pc)??????#?交配
mutation(pop,?pm)???????#?變異
results?=?results[1:]
results.sort()
X?=?[]
Y?=?[]
for?i?in?range(500):
X.append(i)
t?=?results[i][0]
Y.append(t)
plt.plot(X,?Y)
plt.show()
最后調(diào)用了一下matplotlib包,把500代最優(yōu)解的變化趨勢表現(xiàn)出來。
完整代碼可以在github?查看
歡迎訪問我的個人博客
閱讀全文
二級Python----Python的內(nèi)置函數(shù)及標準庫(DAY 8)
python的內(nèi)置函數(shù)(68個)
Python考核31個內(nèi)置函數(shù),
python內(nèi)置了很多內(nèi)置函數(shù)、類方法屬性及各種模塊。當我們想要當我們想要了解某種類型有哪些屬性方法以及每種方法該怎么使用時,我們可以使用dir()函數(shù)和help()函數(shù)在python idle交互式模式下獲得我們想要的信息。
? dir()函數(shù)獲得對象中可用屬性的列表
Python中的關鍵詞有哪些?
dir(__builtins__):查看python內(nèi)置函數(shù)
help(‘keywords‘):查看python關鍵詞
如微分積分方程的求解程序、訪問互聯(lián)網(wǎng)、獲取日期和時間、機器學習算法等。這些程序往往被收入程序庫中,構(gòu)成程序庫。
只有經(jīng)過嚴格檢驗的程序才能放在程序庫里。檢驗,就是對程序作充分的測試。通常進行的有正確性測試、精度測試、速度測試、邊界條件和出錯狀態(tài)的測試。經(jīng)過檢驗的程序不但能保證計算結(jié)果的正確性,而且對錯誤調(diào)用也能作出反應。程序庫中的程序都是規(guī)范化的。所謂規(guī)范化有三重含義:①同一庫里所有程序的格式是統(tǒng)一的;② 對這些程序的調(diào)用方法是相同的;③ 每個程序所需參數(shù)的數(shù)目、順序和類型都是嚴格規(guī)定好的。
Python的庫包含標準庫和第三方庫
標準庫:程序語言自身擁有的庫,可以直接使用。help('modules')
第三方庫:第三方者使用該語言提供的程序庫。
標準庫: turtle 庫(必選)、 random 庫(必選)、 time 庫(可選)。
? turtle 庫:圖形繪制庫
原理如同控制一只海龜,以不同的方向和速度進行位移而得到其運動軌跡。
使用模塊的幫助時,需要先將模塊導入。
例如:在IDLE中輸入import turtle
dir(turtle)
help(turtle.**)
1.畫布
畫布就是turtle為我們展開用于繪圖區(qū)域, 我們可以設置它的大小和初始位置。
setup()方法用于初始化畫布窗口大小和位置,參數(shù)包括畫布窗口寬、畫布窗口高、窗口在屏幕的水平起始位置和窗口在屏幕的垂直起始位置。
參數(shù):width, height: 輸入寬和高為整數(shù)時,表示 像素 ;為小數(shù)時,表示占據(jù)電腦屏幕的比例。(startx,starty):這一坐標表示
矩形窗口左上角頂點的位置,如果為空,則窗口位于屏幕中心:
例如:setup(640,480,300,300)表示在桌面屏幕(300,300)位置開始創(chuàng)建640×480大小的畫布窗體。
2、畫筆
? color() 用于設置或返回畫筆顏色和填充顏色。
例如:color(‘red’)將顏色設為紅色,也可用fillcolor()方法設置或返回填充顏色,或用pencolor()方法設置或返回筆觸顏色。
Python基礎之查看Python庫、函數(shù)和模塊
1.dir函數(shù)式可以查看對象的屬性
使用方法很簡單,舉os類型為例,在Python命令窗口輸入?dir(‘os’)?即可查看os模塊的屬性
打開cmd命令窗口:
2.如何查看對象某個屬性的幫助文檔:兩種方法如下:
3.如何查看某個對象的詳細:
3.如何查看某個對象的函數(shù):
python的科學計算庫有哪些
1、Numpy庫簡介
在Python中很多高級庫都是基本Numpy科學庫去做的。之前如果用Python對數(shù)據(jù)進行操作,需要一行一行或者一個一個數(shù)據(jù)的去進行操作。而在Numpy中,則是封裝了一系列矩陣的操作:首先把數(shù)據(jù)轉(zhuǎn)換成一系列矩陣的格式,然后再對矩陣進行操作。這樣既高效,也省時。Numpy封裝了一系列的函數(shù)函數(shù),方便我們?nèi)ゲ僮骶仃嚒umpy中一行代碼就頂Python中十幾行的代碼。
2、Pandas庫簡介
在Pandas 是基于Numpy的一種工具,該工具是為了解決數(shù)據(jù)分析任務而創(chuàng)建的。Pandas
納入了大量庫和一些標準的數(shù)據(jù)模型,提供了高效地操作大型數(shù)據(jù)集所需的工具。Pandas提供了大量能使我們快速便捷地處理數(shù)據(jù)的函數(shù)和方法。你很快就會發(fā)現(xiàn),它是使Python成為強大而高效的數(shù)據(jù)分析環(huán)境的重要因素之一。
3、Matplotlib庫簡介
Matplotlib 是一個 Python 的 2D繪圖庫,它以各種硬拷貝格式和跨平臺的交互式環(huán)境生成出版質(zhì)量級別的圖形,通過
Matplotlib,開發(fā)者可以僅需要幾行代碼,便可以生成繪圖,直方圖,功率譜,條形圖,錯誤圖,散點圖等。
想知道Python標準庫math中用來求冪運算的函數(shù)是?
Python標準庫math中用來求冪運算的函數(shù)是pow(x,y)
pow(x,y)函數(shù)和x**y是等效的,都是計算x的y次方
用法:
import math
print(math.pow(4,2))
python常用到哪些庫?
Python作為一個設計優(yōu)秀的程序語言,現(xiàn)在已廣泛應用于各種領域,依靠其強大的第三方類庫,Python在各個領域都能發(fā)揮巨大的作用。
下面我們就來看一下python中常用到的庫:
數(shù)值計算庫:
1. NumPy
支持多維數(shù)組與矩陣運算,也針對數(shù)組運算提供大量的數(shù)學函數(shù)庫。通常與SciPy和Matplotlib一起使用,支持比Python更多種類的數(shù)值類型,其中定義的最重要的對象是稱為ndarray的n維數(shù)組類型,用于描述相同類型的元素集合,可以使用基于0的索引訪問集合中元素。
2. SciPy
在NumPy庫的基礎上增加了眾多的數(shù)學、科學及工程計算中常用的庫函數(shù),如線性代數(shù)、常微分方程數(shù)值求解、信號處理、圖像處理、稀疏矩陣等,可進行插值處理、信號濾波,以及使用C語言加速計算。
3. Pandas
基于NumPy的一種工具,為解決數(shù)據(jù)分析任務而生。納入大量庫和一些標準的數(shù)據(jù)模型,提供高效地操作大型數(shù)據(jù)集所需的工具及大量的能快速便捷處理數(shù)據(jù)的函數(shù)和方法,為時間序列分析提供很好的支持,提供多種數(shù)據(jù)結(jié)構(gòu),如Series、Time-Series、DataFrame和Panel。
數(shù)據(jù)可視化庫:
4. Matplotlib
第一個Python可視化庫,有許多別的程序庫都是建立在其基礎上或者直接調(diào)用該庫,可以很方便地得到數(shù)據(jù)的大致信息,功能非常強大,但也非常復雜。
5. Seaborn
利用了Matplotlib,用簡潔的代碼來制作好看的圖表。與Matplotlib最大的區(qū)別為默認繪圖風格和色彩搭配都具有現(xiàn)代美感。
6. ggplot
基于R的一個作圖庫ggplot2,同時利用了源于《圖像語法》(The Grammar of Graphics)中的概念,允許疊加不同的圖層來完成一幅圖,并不適用于制作非常個性化的圖像,為操作的簡潔度而犧牲了圖像的復雜度。
7. Bokeh
跟ggplot一樣,Bokeh也基于《圖形語法》的概念。與ggplot不同之處為它完全基于Python而不是從R處引用。長處在于能用于制作可交互、可直接用于網(wǎng)絡的圖表。圖表可以輸出為JSON對象、HTML文檔或者可交互的網(wǎng)絡應用。
8. Plotly
可以通過Python notebook使用,與Bokeh一樣致力于交互圖表的制作,但提供在別的庫中幾乎沒有的幾種圖表類型,如等值線圖、樹形圖和三維圖表。
9. pygal
與Bokeh和Plotly一樣,提供可直接嵌入網(wǎng)絡瀏覽器的可交互圖像。與其他兩者的主要區(qū)別在于可將圖表輸出為SVG格式,所有的圖表都被封裝成方法,且默認的風格也很漂亮,用幾行代碼就可以很容易地制作出漂亮的圖表。
10. geoplotlib
用于制作地圖和地理相關數(shù)據(jù)的工具箱。可用來制作多種地圖,比如等值區(qū)域圖、熱度圖、點密度圖。必須安裝Pyglet(一個面向?qū)ο缶幊探涌冢┓娇墒褂谩?/p>
11. missingno
用圖像的方式快速評估數(shù)據(jù)缺失的情況,可根據(jù)數(shù)據(jù)的完整度對數(shù)據(jù)進行排序或過濾,或者根據(jù)熱度圖或樹狀圖對數(shù)據(jù)進行修正。
web開發(fā)庫:
12. Django
一個高級的Python Web框架,支持快速開發(fā),提供從模板引擎到ORM所需的一切東西,使用該庫構(gòu)建App時,必須遵循Django的方式。
13. Socket
一個套接字通訊底層庫,用于在服務器和客戶端間建立TCP或UDP連接,通過連接發(fā)送請求與響應。
14. Flask
一個基于Werkzeug、Jinja 2的Python輕量級框架(microframework),默認配備Jinja模板引擎,也包含其他模板引擎或ORM供選擇,適合用來編寫API服務(RESTful rervices)。
15. Twisted
一個使用Python實現(xiàn)的基于事件驅(qū)動的網(wǎng)絡引擎框架,建立在deferred object之上,一個通過異步架構(gòu)實現(xiàn)的高性能的引擎,不適用于編寫常規(guī)的Web Apps,更適用于底層網(wǎng)絡。
數(shù)據(jù)庫管理:
16. MySQL-python
又稱MySQLdb,是Python連接MySQL最流行的一個驅(qū)動,很多框架也基于此庫進行開發(fā)。只支持Python 2.x,且安裝時有許多前置條件。由于該庫基于C語言開發(fā),在Windows平臺上的安裝非常不友好,經(jīng)常出現(xiàn)失敗的情況,現(xiàn)在基本不推薦使用,取代品為衍生版本。
17. mysqlclient
完全兼容MySQLdb,同時支持Python 3.x,是Django ORM的依賴工具,可使用原生SQL來操作數(shù)據(jù)庫,安裝方式與MySQLdb一致。
18. PyMySQL
純Python實現(xiàn)的驅(qū)動,速度比MySQLdb慢,最大的特點為安裝方式簡潔,同時也兼容MySQL-python。
19. SQLAlchemy
一種既支持原生SQL,又支持ORM的工具。ORM是Python對象與數(shù)據(jù)庫關系表的一種映射關系,可有效提高寫代碼的速度,同時兼容多種數(shù)據(jù)庫系統(tǒng),如SQLite、MySQL、PostgreSQL,代價為性能上的一些損失。
自動化運維:
20. jumpsever跳板機
一種由Python編寫的開源跳板機(堡壘機)系統(tǒng),實現(xiàn)了跳板機的基本功能,包含認證、授權(quán)和審計,集成了Ansible、批量命令等。
支持WebTerminal Bootstrap編寫,界面美觀,自動收集硬件信息,支持錄像回放、命令搜索、實時監(jiān)控、批量上傳下載等功能,基于SSH協(xié)議進行管理,客戶端無須安裝agent。主要用于解決可視化安全管理,因完全開源,容易再次開發(fā)。
21. Magedu分布式監(jiān)控系統(tǒng)
一種用Python開發(fā)的自動化監(jiān)控系統(tǒng),可監(jiān)控常用系統(tǒng)服務、應用、網(wǎng)絡設備,可在一臺主機上監(jiān)控多個不同服務,不同服務的監(jiān)控間隔可以不同,同一個服務在不同主機上的監(jiān)控間隔、報警閾值可以不同,并提供數(shù)據(jù)可視化界面。
22. Magedu的CMDB
一種用Python開發(fā)的硬件管理系統(tǒng),包含采集硬件數(shù)據(jù)、API、頁面管理3部分功能,主要用于自動化管理筆記本、路由器等常見設備的日常使用。由服務器的客戶端采集硬件數(shù)據(jù),將硬件信息發(fā)送至API,API負責將獲取的數(shù)據(jù)保存至數(shù)據(jù)庫中,后臺管理程序負責對服務器信息進行配置和展示。
23. 任務調(diào)度系統(tǒng)
一種由Python開發(fā)的任務調(diào)度系統(tǒng),主要用于自動化地將一個服務進程分布到其他多個機器的多個進程中,一個服務進程可作為調(diào)度者依靠網(wǎng)絡通信完成這一工作。
24. Python運維流程系統(tǒng)
一種使用Python語言編寫的調(diào)度和監(jiān)控工作流的平臺,內(nèi)部用于創(chuàng)建、監(jiān)控和調(diào)整數(shù)據(jù)管道。允許工作流開發(fā)人員輕松創(chuàng)建、維護和周期性地調(diào)度運行工作流,包括了如數(shù)據(jù)存儲、增長分析、Email發(fā)送、A/B測試等諸多跨多部門的用例。
GUI編程:
25. Tkinter
一個Python的標準GUI庫,可以快速地創(chuàng)建GUI應用程序,可以在大多數(shù)的UNIX平臺下使用,同樣可以應用在Windows和Macintosh系統(tǒng)中,Tkinter 8.0的后續(xù)版本可以實現(xiàn)本地窗口風格,并良好地運行在絕大多數(shù)平臺中。
26. wxPython
一款開源軟件跨平臺GUI庫wxWidgets的Python封裝和Python模塊,是Python語言的一套優(yōu)秀的GUI圖形庫,允許程序員很方便地創(chuàng)建完整的、功能健全的GUI用戶界面。
27. PyQt
一個創(chuàng)建GUI應用程序的工具庫,是Python編程語言和Qt的成功融合,可以運行在所有主要操作系統(tǒng)上,包括UNIX、Windows和Mac。PyQt采用雙許可證,開發(fā)人員可以選擇GPL和商業(yè)許可,從PyQt的版本4開始,GPL許可證可用于所有支持的平臺。
28. PySide
一個跨平臺的應用程式框架Qt的Python綁定版本,提供與PyQt類似的功能,并相容API,但與PyQt不同處為其使用LGPL授權(quán)。
更多Python知識請關注Python自學網(wǎng)。
網(wǎng)頁標題:python算法庫函數(shù),python數(shù)據(jù)庫函數(shù)
網(wǎng)站URL:http://www.ef60e0e.cn/article/dsioide.html