python中的geatpy,python中的map函數

本文目錄一覽:

python中range()函數的用法

python中range()函數的用法:

(1)range(stop)

創建一個(0,stop)之間的整數序列,步長為1。

(2)range(start,stop)

創建一個(start,stop)之間的整數序列,步長為1。

(3)range(start,stop,step)

創建一個[start,stop)之間的整數序列,步長為step。

參數介紹:

start:表示從返回序列的起始編號,默認情況下從0開始。

stop:表示生成最多但不包括此數字的數字。

step:指的是序列中每個數字之間的差異,默認值為1。

相關介紹

range()是Python的內置函數,在用戶需要執行特定次數的操作時使用它,表示循環的意思。內置函數range()可用於以列表的形式生成數字序列。在range()函數中最常見用法是使用for和while循環迭代序列類型(List,string等)。

簡單的來說,range()函數允許用戶在給定範圍內生成一系列數字。根據用戶傳遞給函數的參數數量,用戶可以決定該系列數字的開始和結束位置以及一個數字與下一個數字之間的差異有多大。

使用流行的遺傳演算法python庫是哪個

建議使用由華南農業大學、暨南大學、華南理工大學高校碩博學生聯合團隊推出的Python高性能遺傳和進化演算法工具箱:Geatpy。它是目前進化計算領域與platemo、matlab遺傳演算法工具箱等有相當的權威和影響力的高性能實用型進化演算法工具箱,而其效率和易用性居於領先地位。

目前已得到多所高校研究生實驗室以及企業採用,為相關領域的研究和應用注入了全新的活力。

它支持GA、DE、ES等進化演算法,支持單目標、多目標進化優化、複雜約束優化等問題的求解,提供豐富的遺傳演算法和多目標進化優化演算法模板,採用高性能的C內核和mkl矩陣運算,提供功能強大的開源進化演算法框架,尤其適合數學建模和研究進化演算法的研究生們。

官網:Geatpy

多目標優化求解案例:

複雜約束單目標優化求解樣例:

旅行商問題求解樣例:

多目標背包問題求解樣例:

使用方法:

第一步:實例化一個問題類把待優化的問題寫在裡面。

第二步:編寫執行腳本調用遺傳或其他進化演算法模板,完成問題的求解。

官網教程:Geatpy教程

python中global的作用是什麼?

def func():

global x

x=3

return x

f=func()

print x

一般多用在函數內,聲明變數的作用域為全局作用域。

如例子中的x,如果不加global,則作用域僅為func()函數內部,print x時,會報錯;

加了global後,函數實例化後,就可以在函數外部直接訪問x了。

python有沒有簡單的遺傳演算法庫

首先遺傳演算法是一種優化演算法,通過模擬基因的優勝劣汰,進行計算(具體的演算法思路什麼的就不贅述了)。大致過程分為初始化編碼、個體評價、選擇,交叉,變異。

以目標式子 y = 10 * sin(5x) + 7 * cos(4x)為例,計算其最大值

首先是初始化,包括具體要計算的式子、種群數量、染色體長度、交配概率、變異概率等。並且要對基因序列進行初始化

[python] view plain copy

pop_size = 500      # 種群數量

max_value = 10      # 基因中允許出現的最大值

chrom_length = 10       # 染色體長度

pc = 0.6            # 交配概率

pm = 0.01           # 變異概率

results = [[]]      # 存儲每一代的最優解,N個二元組

fit_value = []      # 個體適應度

fit_mean = []       # 平均適應度

pop = geneEncoding(pop_size, chrom_length)

其中genEncodeing是自定義的一個簡單隨機生成序列的函數,具體實現如下

[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每個都代表了一個數。其值的計算方式為轉換為10進位,然後除以2的序列長度次方減一,也就是全一list的十進位減一。根據這個規則就能計算出所有list的值和帶入要計算式子中的值,代碼如下

[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

然後就是進行選擇,這是整個遺傳演算法最核心的部分。選擇實際上模擬生物遺傳進化的優勝劣汰,讓優秀的個體儘可能存活,讓差的個體儘可能的淘汰。個體的好壞是取決於個體適應度。個體適應度越高,越容易被留下,個體適應度越低越容易被淘汰。具體的代碼如下

[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

# 轉輪盤選擇法

while newin  pop_len:

if(ms[newin]  newfit_value[fitin]):

newpop[newin] = pop[fitin]

newin = newin + 1

else:

fitin = fitin + 1

pop = newpop

以上代碼主要進行了3個操作,首先是計算個體適應度總和,然後在計算各自的累積適應度。這兩步都好理解,主要是第三步,轉輪盤選擇法。這一步首先是生成基因總數個0-1的小數,然後分別和各個基因的累積個體適應度進行比較。如果累積個體適應度大於隨機數則進行保留,否則就淘汰。這一塊的核心思想在於:一個基因的個體適應度越高,他所佔據的累計適應度空隙就越大,也就是說他越容易被保留下來。

選擇完後就是進行交配和變異,這個兩個步驟很好理解。就是對基因序列進行改變,只不過改變的方式不一樣

交配:

[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

整個遺傳演算法的實現完成了,總的調用入口代碼如下

[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進位序列代表的數值

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      # 種群數量

max_value = 10      # 基因中允許出現的最大值

chrom_length = 10       # 染色體長度

pc = 0.6            # 交配概率

pm = 0.01           # 變異概率

results = [[]]      # 存儲每一代的最優解,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)        # 第一個存儲最優的解, 第二個存儲最優基因

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()

最後調用了一下matplotlib包,把500代最優解的變化趨勢表現出來。

完整代碼可以在github 查看

歡迎訪問我的個人博客

閱讀全文

global在python中是什麼意思

在Python中global指的是全局變數,只有指定後才表示同一變數(特殊情況:當變數為引用數據類型,在改變其值的時候也可以表示同一變數,如swap1),當要改變外部變數時候使用。

全局變數是編程術語中的一種,源自於變數之分。變數分為局部與全局,局部變數又可稱之為內部變數。由某對象或某個函數所創建的變數通常都是局部變數,只能被內部引用,而無法被其它對象或函數引用。

語言特點:

簡單:Python是一種代表簡單主義思想的語言。閱讀一個良好的Python程序就感覺像是在讀英語一樣。它使你能夠專註於解決問題而不是去搞明白語言本身。

易學:Python極其容易上手,因為Python有極其簡單的說明文檔。

易讀、易維護:風格清晰劃一、強制縮進。

原創文章,作者:小藍,如若轉載,請註明出處:https://www.506064.com/zh-tw/n/303461.html

(0)
打賞 微信掃一掃 微信掃一掃 支付寶掃一掃 支付寶掃一掃
小藍的頭像小藍
上一篇 2024-12-31 11:49
下一篇 2024-12-31 11:49

相關推薦

  • 如何查看Anaconda中Python路徑

    對Anaconda中Python路徑即conda環境的查看進行詳細的闡述。 一、使用命令行查看 1、在Windows系統中,可以使用命令提示符(cmd)或者Anaconda Pro…

    編程 2025-04-29
  • Python計算陽曆日期對應周幾

    本文介紹如何通過Python計算任意陽曆日期對應周幾。 一、獲取日期 獲取日期可以通過Python內置的模塊datetime實現,示例代碼如下: from datetime imp…

    編程 2025-04-29
  • Python中引入上一級目錄中函數

    Python中經常需要調用其他文件夾中的模塊或函數,其中一個常見的操作是引入上一級目錄中的函數。在此,我們將從多個角度詳細解釋如何在Python中引入上一級目錄的函數。 一、加入環…

    編程 2025-04-29
  • Python列表中負數的個數

    Python列表是一個有序的集合,可以存儲多個不同類型的元素。而負數是指小於0的整數。在Python列表中,我們想要找到負數的個數,可以通過以下幾個方面進行實現。 一、使用循環遍歷…

    編程 2025-04-29
  • Python周杰倫代碼用法介紹

    本文將從多個方面對Python周杰倫代碼進行詳細的闡述。 一、代碼介紹 from urllib.request import urlopen from bs4 import Bea…

    編程 2025-04-29
  • Python字典去重複工具

    使用Python語言編寫字典去重複工具,可幫助用戶快速去重複。 一、字典去重複工具的需求 在使用Python編寫程序時,我們經常需要處理數據文件,其中包含了大量的重複數據。為了方便…

    編程 2025-04-29
  • 蝴蝶優化演算法Python版

    蝴蝶優化演算法是一種基於仿生學的優化演算法,模仿自然界中的蝴蝶進行搜索。它可以應用於多個領域的優化問題,包括數學優化、工程問題、機器學習等。本文將從多個方面對蝴蝶優化演算法Python版…

    編程 2025-04-29
  • Python程序需要編譯才能執行

    Python 被廣泛應用於數據分析、人工智慧、科學計算等領域,它的靈活性和簡單易學的性質使得越來越多的人喜歡使用 Python 進行編程。然而,在 Python 中程序執行的方式不…

    編程 2025-04-29
  • Python清華鏡像下載

    Python清華鏡像是一個高質量的Python開發資源鏡像站,提供了Python及其相關的開發工具、框架和文檔的下載服務。本文將從以下幾個方面對Python清華鏡像下載進行詳細的闡…

    編程 2025-04-29
  • python強行終止程序快捷鍵

    本文將從多個方面對python強行終止程序快捷鍵進行詳細闡述,並提供相應代碼示例。 一、Ctrl+C快捷鍵 Ctrl+C快捷鍵是在終端中經常用來強行終止運行的程序。當你在終端中運行…

    編程 2025-04-29

發表回復

登錄後才能評論