# 遺傳算法(Python) #4 DEAP框架入門
遺傳算法(Python) #4 DEAP框架入門
1. DEAP框架簡介
DEAP(Distributed Evolutionary Algorithms in Python)是一個熱門的Python進化算法框架,我們可以用這個框架在Python內實現遺傳算法的應用,本文將介紹DEAP中主要模塊的定義與用法,而下一期我們將用DEAP框架解決OneMax問題。
2. base 模組
base模組內有Toolbox和Fitness兩個類,一般我們用Toolbox來創建方程,將所有遺傳算法的方程都儲存于Toolbox內有利于編程的封裝;Fitness類用來儲存個體適應度,如果要完整使用DEAP框架,必須同時使用Toolbox和Fitness。
2.1 Toolbox
Toolbox主要用來封裝方程,其用法如下
from deap import base
def get_abc(a,b,c):
print(f"a:{a}; b:{b}; c:{c}")
tools = base.Toolbox()
tools.register("get", get_abc, 1,c=3) # register function
tools.get(2) # once registered, functions can be used directly in tools
>>> a:1; b:2; c:3
由上例可見,register的參數分別為:原函數的別名;原函數;原函數的參數(可為關鍵或非關鍵參數)。使用Toolbox可以大大減少代碼量,并通過將其他函數封裝進Toolbox使代碼簡單明了。
2.2 Fitness
Fitness主要和creator模組一起使用來初始化個體的適應度,具體內容將在下一期介紹。
3. creator 模組
我們一般使用creator.create來創建個體與種群。create方程可以拓展其他的類,并同時添加特性(attribute),示例如下:
from deap import creator
creator.create("styledText",str,size=9,style=dict)
# creator.styledText is almost equivalent to
class styledText(str):
size = 9
def __init__(self):
self.style = dict()
4. tools 模組
tools模組包含一系列已定義好的方程,具體內容如下(來源:DEAP官網):
其中初始化(Initialization)方程可以讓我們快速構建個體與種群:
例: 用initRepeat創建長度為4的列表,每一個列表上的元素為0或1
import random
from deap import tools
random.seed(39)
def randomZeroOne():
return(random.randint(0,1))
individual = tools.initRepeat(list,randomZeroOne,4)
print(individual)
>>> [0, 1, 1, 0]
例:用initIterate創建長度為4的列表,列表內容為0-3順序隨機的整數
import random
from deap import tools
random.seed(39)
def random4():
return(random.sample(range(4),4))
individual = tools.initIterate(list,random4)
print(individual)
>>> [1, 3, 2, 0]
交叉(Crossover),突變(Mutate),選擇(Selection)為具體的遺傳算法方法,脫離了具體例子很難解釋,這些方法的應用將在今后的文章中逐一介紹,若對這些概念不了解的,可以查看本系列第二期。
5. 其他模組
DEAP框架內還有algorithms模組,和用以統計每一代數據的tools.Statistics和tools.Logbook,這些內容將在以后的文章中注意介紹。
6.小結
本期文章介紹了DEAP框架內的主要模組/方程,下一期將使用DEAP框架解決OneMax問題,并進一步展示DEAP框架的應用。
智能推薦
看完必會的 python DEAP遺傳算法庫講解+實戰(中級)
文章目錄 TSP問題 問題描述 代碼精講 整體代碼(方便復制) 結果展示(不重要) TSP問題 之前用遺傳算法解決了:多項式求極大值的問題。這個問題實在是太簡單了,現在我們來處理一下更困難的問題——TSP旅行商問題 問題描述 TSP旅行商問題,traveling Salesman problem - 如果旅行商從A地到B地的花費與B地到A地的花費相等,我們稱之為對稱旅行商問...
看完必會的 python DEAP遺傳算法庫講解+實戰(初級)
文章目錄 一個簡單的遺傳算法 代碼詳細講解 一個簡單的遺傳算法 我們來找這個函數的最大值: 該函數的最大值應該出現在處28.309,值為1657.423。 可以看到該函數有很多局部極值作為干擾項,如果進化算法過早收斂,很容易陷入某個局部最優。 我們用二進制編碼來解決這樣的問題 如果要求精度是六位的話,從-30到30,總共需要考慮60×10660 \times 10^660×...
Deap : 遺傳算法算法解決 背包問題
特殊 自定義評價函數 同前 自定義交叉函數 &=,^= python中的位運算符 建議在新標簽頁打開圖片 自定義變異函 使用短版本的遺傳算法 此處與之前的文章效果類似 - 粒子群優化算法 - 短版本可以參考官網介紹 源代碼...
猜你喜歡
freemarker + ItextRender 根據模板生成PDF文件
1. 制作模板 2. 獲取模板,并將所獲取的數據加載生成html文件 2. 生成PDF文件 其中由兩個地方需要注意,都是關于獲取文件路徑的問題,由于項目部署的時候是打包成jar包形式,所以在開發過程中時直接安照傳統的獲取方法沒有一點文件,但是當打包后部署,總是出錯。于是參考網上文章,先將文件讀出來到項目的臨時目錄下,然后再按正常方式加載該臨時文件; 還有一個問題至今沒有解決,就是關于生成PDF文件...
電腦空間不夠了?教你一個小秒招快速清理 Docker 占用的磁盤空間!
Docker 很占用空間,每當我們運行容器、拉取鏡像、部署應用、構建自己的鏡像時,我們的磁盤空間會被大量占用。 如果你也被這個問題所困擾,咱們就一起看一下 Docker 是如何使用磁盤空間的,以及如何回收。 docker 占用的空間可以通過下面的命令查看: TYPE 列出了docker 使用磁盤的 4 種類型: Images:所有鏡像占用的空間,包括拉取下來的鏡像,和本地構建的。 Con...
requests實現全自動PPT模板
http://www.1ppt.com/moban/ 可以免費的下載PPT模板,當然如果要人工一個個下,還是挺麻煩的,我們可以利用requests輕松下載 訪問這個主頁,我們可以看到下面的樣式 點每一個PPT模板的圖片,我們可以進入到詳細的信息頁面,翻到下面,我們可以看到對應的下載地址 點擊這個下載的按鈕,我們便可以下載對應的PPT壓縮包 那我們就開始做吧 首先,查看網頁的源代碼,我們可以看到每一...
Linux C系統編程-線程互斥鎖(四)
互斥鎖 互斥鎖也是屬于線程之間處理同步互斥方式,有上鎖/解鎖兩種狀態。 互斥鎖函數接口 1)初始化互斥鎖 pthread_mutex_init() man 3 pthread_mutex_init (找不到的情況下首先 sudo apt-get install glibc-doc sudo apt-get install manpages-posix-dev) 動態初始化 int pthread_...