国产精品电影_久久视频免费_欧美日韩国产激情_成年人视频免费在线播放_日本久久亚洲电影_久久都是精品_66av99_九色精品美女在线_蜜臀a∨国产成人精品_冲田杏梨av在线_欧美精品在线一区二区三区_麻豆mv在线看

GAFT:一個使用Python實現的遺傳算法框架

開發 后端 算法
對于遺傳算法來說,就非常適合寫個相對固定的框架然后給算子、參數等留出空間以便對新算法進行測試和改進。于是就動手寫了個遺傳算法的小框架gaft,本文對此框架進行一些介紹并分別以一個一維搜索和二維搜索為例子對使用方法進行了介紹。

前言

最近需要用到遺傳算法來優化一些東西,最初是打算直接基于某些算法實現一個簡單的函數來優化,但是感覺單純寫個非通用的函數運行后期改進算子或者別人使用起來都會帶來困難,同時遺傳算法基本概念和運行流程相對固定,改進也一般通過編碼機制,選擇策略,交叉變異算子以及參數設計等方面,對于算法的整體結構并沒有大的影響。這樣對于遺傳算法來說,就非常適合寫個相對固定的框架然后給算子、參數等留出空間以便對新算法進行測試和改進。于是就動手寫了個遺傳算法的小框架gaft,本文對此框架進行一些介紹并分別以一個一維搜索和二維搜索為例子對使用方法進行了介紹。

  • GitHub: https://github.com/PytLab/gaft
  • PyPI: https://pypi.python.org/pypi/gaft

目前框架只是完成了最初的版本,比較簡陋,內置了幾個基本的常用算子,使用者可以根據接口規則實現自定義的算子并放入框架中運行。我自己也會根據自己的需求后續添加更多的改進算子,同時改進框架使其更加通用.

 

正文

遺傳算法介紹

這里我對遺傳算法的基本概念進行簡要的介紹,并闡述gaft的設計原則。

簡單而言,遺傳算法使用群體搜索技術,將種群代表一組問題的可行解,通過對當前種群施加選擇,交叉,變異等一些列遺傳操作來產生新一代的種群,并逐步是種群進化到包含近似全局***解的狀態。下面我將遺傳學和遺傳算法相關術語的對應關系總結一下:

術語 

 

算法特點

  1. 以決策變量的編碼作為運算對象,使得優化過程借鑒生物學中的概念成為可能
  2. 直接以目標函數作為搜索信息,確定搜索方向很范圍,屬于無導數優化
  3. 同時使用多個搜索點的搜索信息,算是一種隱含的并行性
  4. 是一種基于概率的搜索技術
  5. 具有自組織,自適應和自學習等特性

算法流程

 

gaft 設計原則

由于遺傳算法的流程相對固定,我們優化算法基本上也是在流程整體框架下對編碼機制,算子,參數等進行修改,因此在寫框架的時候,我便想把那些固定的遺傳算子,適應度函數寫成接口,并使用元類、裝飾器等方式實現對接口的限制和優化,這樣便可以方便后續自定義算符和適應度函數定制。***將各個部分組合到一起組成一個engine然后根據算法流程運行遺傳算法對目標進行優化.

這樣我們便脫離每次都要寫遺傳算法流程的繁瑣,每次只需要像寫插件一樣實現自己的算子和適應度函數便可以將其放入gaft開始對算法進行測試或者對目標函數進行優化了。

GAFT文件結構

此部分我對自己實現的框架的整體結構進行下介紹.

  1.  
  2. ├── LICENSE 
  3.  
  4. ├── MANIFEST.in 
  5.  
  6. ├── README.rst 
  7.  
  8. ├── examples 
  9.  
  10. │ ├── ex01 
  11.  
  12. │ └── ex02 
  13.  
  14. ├── gaft 
  15.  
  16. │ ├── __init__.py 
  17.  
  18. │ ├── __pycache__ 
  19.  
  20. │ ├── analysis 
  21.  
  22. │ ├── components 
  23.  
  24. │ ├── engine.py 
  25.  
  26. │ ├── operators 
  27.  
  28. │ └── plugin_interfaces 
  29.  
  30. ├── setup.cfg 
  31.  
  32. ├── setup.py 
  33.  
  34. └── tests 
  35.  
  36. ├── flip_bit_mutation_test.py 
  37.  
  38. ├── gaft_test.py 
  39.  
  40. ├── individual_test.py 
  41.  
  42. ├── population_test.py 
  43.  
  44. ├── roulette_wheel_selection_test.py 
  45.  
  46. └── uniform_crossover_test.py  

目前的文件結果如上所示,

  • /gaft/components中定義了內置的個體和種群類型,提供了兩種不同的遺傳編碼方式:二進制編碼和實數編碼。
  • /gaft/plugin_interfaces中是插件接口定義,所有的算子定義以及on-the-fly分析的接口規則都在里面,使用者可以根據此來編寫自己的插件并放入到engine中。
  • /gaft/operators里面是內置遺傳算子,他們也是遵循/gaft/plugin_interfaces中的規則進行編寫,可以作為編寫算子的例子。其中算子我目前內置了roulette wheel選擇算子,uniform 交叉算子和flipbit變異算子,使用者可以直接使用內置算子來使用gaft對自己的問題進行優化。
  • /gaft/analysis里面是內置的on-the-fly分析插件,他可以在遺傳算法迭代的過程中對迭代過程中的變量進行分析,例如我在里面內置了控制臺日志信息輸出,以及迭代適應度值的保存等插件方便對進化曲線作圖。
  • /gaft/engine便是遺傳算法的流程控制模塊了,他將所有的之前定義的各個部分組合到一起使用遺傳算法流程進行優化迭代。

使用GAFT

下面我就以兩個函數作為例子來使用GAFT對目標函數進行優化.

一維搜索

首先我們先對一個簡單的具有多個局部極值的函數進行優化,我們來使用內置的算子求函數 f(x)=x+10sin(5x)+7cos(4x)的極大值,x的取值范圍為[0,10]

1. 先導入需要的模塊

  1. from math import sin, cos 
  2.  
  3.   
  4.  
  5. # 導入種群和內置算子相關類 
  6.  
  7. from gaft import GAEngine 
  8.  
  9. from gaft.components import GAIndividual 
  10.  
  11. from gaft.components import GAPopulation 
  12.  
  13. from gaft.operators import RouletteWheelSelection 
  14.  
  15. from gaft.operators import UniformCrossover 
  16.  
  17. from gaft.operators import FlipBitMutation 
  18.  
  19.   
  20.  
  21. # 用于編寫分析插件的接口類 
  22.  
  23. from gaft.plugin_interfaces.analysis import OnTheFlyAnalysis 
  24.  
  25.   
  26.  
  27. # 內置的存檔適應度函數的分析類 
  28.  
  29. from gaft.analysis.fitness_store import FitnessStoreAnalysis 
  30.  
  31.   
  32.  
  33. # 我們將用兩種方式將分析插件注冊到遺傳算法引擎中  

2. 創建引擎

  1. # 定義種群 
  2.  
  3. indv_template = GAIndividual(ranges=[(0, 10)], encoding='binary', eps=0.001) 
  4.  
  5. population = GAPopulation(indv_template=indv_template, size=50) 
  6.  
  7.   
  8.  
  9. # 創建遺傳算子 
  10.  
  11. selection = RouletteWheelSelection() 
  12.  
  13. crossover = UniformCrossover(pc=0.8, pe=0.5) 
  14.  
  15. mutation = FlipBitMutation(pm=0.1) 
  16.  
  17.   
  18.  
  19. # 創建遺傳算法引擎, 分析插件和適應度函數可以以參數的形式傳入引擎中 
  20.  
  21. engine = GAEngine(population=population, selection=selection, 
  22.  
  23.                   crossover=crossover, mutation=mutation, 
  24.  
  25.                   analysis=[FitnessStoreAnalysis])  

3. 自定義適應度函數

可以通過修飾符的方式將,適應度函數注冊到引擎中。

  1. @engine.fitness_register 
  2.  
  3. def fitness(indv): 
  4.  
  5.     x, = indv.variants 
  6.  
  7.     return x + 10*sin(5*x) + 7*cos(4*x)  

4. 自定義on-the-fly分析插件

也可以通過修飾符在定義的時候直接將插件注冊到引擎中

  1. @engine.analysis_register 
  2.  
  3. class ConsoleOutputAnalysis(OnTheFlyAnalysis): 
  4.  
  5.     interval = 1 
  6.  
  7.   
  8.  
  9.     def register_step(self, ng, population, engine): 
  10.  
  11.         best_indv = population.best_indv(engine.fitness) 
  12.  
  13.         msg = 'Generation: {}, best fitness: {:.3f}'.format(ng, engine.fitness(best_indv)) 
  14.  
  15.         engine.logger.info(msg) 
  16.  
  17.   
  18.  
  19.     def finalize(self, population, engine): 
  20.  
  21.         best_indv = population.best_indv(engine.fitness) 
  22.  
  23.         x = best_indv.variants 
  24.  
  25.         y = engine.fitness(best_indv) 
  26.  
  27.         msg = 'Optimal solution: ({}, {})'.format(x, y) 
  28.  
  29.         engine.logger.info(msg)  

5. Ok, 開始跑(優化)吧!

我們這里跑100代種群.

  1. if '__main__' == __name__: 
  2.  
  3.     # Run the GA engine. 
  4.  
  5.     engine.run(ng=100)  

內置的分析插件會在每步迭代中記錄得到的每一代的***個體,并生成數據保存。

繪制一下函數本身的曲線和我們使用遺傳算法得到的進化曲線:

 

優化過程動畫:

 

二維搜索

下面我們使用GAFT內置算子來搜索同樣具有多個極值點的二元函數f(x)=ysin(2πx)+xcos(2πy) 的***值,x, y 的范圍為 [−2,2] .

這里我們就不自定義分析插件了,直接使用內置的分析類,并在構造引擎時直接傳入.

  1. ''
  2.  
  3. Find the global maximum for binary function: f(x) = y*sim(2*pi*x) + x*cos(2*pi*y) 
  4.  
  5. ''
  6.  
  7.   
  8.  
  9. from math import sin, cos, pi 
  10.  
  11.   
  12.  
  13. from gaft import GAEngine 
  14.  
  15. from gaft.components import GAIndividual 
  16.  
  17. from gaft.components import GAPopulation 
  18.  
  19. from gaft.operators import RouletteWheelSelection 
  20.  
  21. from gaft.operators import UniformCrossover 
  22.  
  23. from gaft.operators import FlipBitMutation 
  24.  
  25.   
  26.  
  27. # Built-in best fitness analysis. 
  28.  
  29. from gaft.analysis.fitness_store import FitnessStoreAnalysis 
  30.  
  31. from gaft.analysis.console_output import ConsoleOutputAnalysis 
  32.  
  33.   
  34.  
  35. # Define population. 
  36.  
  37. indv_template = GAIndividual(ranges=[(-2, 2), (-2, 2)], encoding='binary', eps=0.001) 
  38.  
  39. population = GAPopulation(indv_template=indv_template, size=50) 
  40.  
  41.   
  42.  
  43. Create genetic operators. 
  44.  
  45. selection = RouletteWheelSelection() 
  46.  
  47. crossover = UniformCrossover(pc=0.8, pe=0.5) 
  48.  
  49. mutation = FlipBitMutation(pm=0.1) 
  50.  
  51.   
  52.  
  53. Create genetic algorithm engine. 
  54.  
  55. # Here we pass all built-in analysis to engine constructor. 
  56.  
  57. engine = GAEngine(population=population, selection=selection, 
  58.  
  59.                   crossover=crossover, mutation=mutation, 
  60.  
  61.                   analysis=[ConsoleOutputAnalysis, FitnessStoreAnalysis]) 
  62.  
  63.   
  64.  
  65. # Define fitness function
  66.  
  67. @engine.fitness_register 
  68.  
  69. def fitness(indv): 
  70.  
  71.     x, y = indv.variants 
  72.  
  73.     return y*sin(2*pi*x) + x*cos(2*pi*y) 
  74.  
  75.   
  76.  
  77. if '__main__' == __name__: 
  78.  
  79.     engine.run(ng=100)  

進化曲線:

 

二維函數面: 

 

搜索過程動畫:

 

可見目前內置的基本算子都能很好的找到例子中函數的***點。

總結

本文主要介紹了本人開發的一個用于遺傳算法做優化計算的Python框架,框架內置了遺傳算法中常用的組件,包括不同編碼方式的個體,種群,以及遺傳算子等。同時框架還提供了自定義遺傳算子和分析插件的接口,能夠方便快速搭建遺傳算法流程并用于算法測試。

目前框架僅僅處于初步階段,后續會在自己使用的過程中逐步完善更多的內置算子,是框架更加通用。本文中的兩個優化例子均能在GitHub上找到源碼(https://github.com/PytLab/gaft/tree/master/examples)

目前的計劃:1. 添加更多的內置算子; 2. 給內置算子和組件添加C++ backend; 3. 并行化

參考

  • 《智能優化算法及其MATLAB實例》
  • 《MATLAB***化計算》 
責任編輯:龐桂玉 來源: Python開發者
相關推薦

2017-10-17 14:25:56

機器學習算法優化

2025-01-16 07:10:00

2024-09-12 10:06:21

2017-11-16 15:25:54

Go語言算法代碼

2024-07-03 08:00:00

2017-08-21 10:00:23

遺傳算法Python生物學

2020-06-11 08:32:50

Python遺傳算法代碼

2021-03-16 11:30:33

2017-09-22 15:03:08

Python遺傳算法GAFT框架

2021-03-10 15:49:20

人工智能遺傳算法

2017-07-12 14:23:25

遺傳算法java自然選擇

2020-10-26 13:42:28

Python算法垃圾

2025-06-19 02:11:00

2009-08-14 09:41:03

C#遺傳算法

2014-11-28 16:08:33

射頻識別RFID

2020-08-07 10:40:56

Node.jsexpress前端

2009-07-22 17:15:04

C#實現

2020-08-17 08:20:16

iOSAOP框架

2010-05-11 11:00:44

遺傳算法宋詞

2017-06-08 15:53:38

PythonWeb框架
點贊
收藏

51CTO技術棧公眾號

97国产在线观看| 琪琪五月天综合婷婷| 日韩中文字幕视频在线观看| 资源视频在线播放免费| 26uuu精品一区二区| 日韩av一区二区三区在线| 一区二区三区在线观看免费| 国产成人精品网站| 亚洲最好看的视频| 午夜精品久久久久久久久久久久| 欧洲精品久久久久毛片完整版| 日韩精品欧美国产精品忘忧草 | 性伦欧美刺激片在线观看| 成人免费福利在线| 性欧美欧美巨大69| 96精品久久久久中文字幕| 欧美1级片网站| 成人精品福利视频| 欧美日韩爆操| 精品免费视频123区| 性欧美长视频| 欧美日韩精品不卡| 免费在线观看成人| 男女激烈动态图| 高清不卡在线观看| 免费在线观看毛片网站| 国产午夜精品久久久久久免费视| 欧美伦理视频在线观看| 中文字幕日韩一区二区| 久久白虎精品| 欧美日韩色综合| 麻豆视频在线免费观看| 欧美不卡一区二区三区四区| 亚洲第一av| 九九热视频这里只有精品| 美女网站色精品尤物极品姐弟| 538国产精品视频一区二区| 国产二区精品| 五月天国产一区| 99r精品视频| 轻轻色免费在线视频| 欧美丰满嫩嫩电影| 国产综合色区在线观看| 午夜精品一区二区三区在线| 一区二区在线影院| 日韩一区国产在线观看| 在线伊人免费视频| 欧美日韩免费一区二区三区| а√在线天堂官网| 欧美成年人视频网站| 波多野结衣的一区二区三区| 久久精品99久久| 91亚洲精品久久久蜜桃| 污网站在线播放| 日韩精品中文字幕久久臀| 久久精品福利| 蜜桃成人免费视频| 国产日韩欧美制服另类| 国产精品二线| 久久精品福利视频| 1024精品久久久久久久久| 亚洲午夜精品久久久中文影院av | 国产成人综合在线播放| 国产又大又黄又粗又爽| 欧美综合久久久| 国产福利91精品一区二区| 国产区亚洲区欧美区| 国内一区二区在线| 首播影院在线观看免费观看电视| 亚洲精品一区二区三区婷婷月| 精品国产一区二区三区av片| av电影一区二区三区| 亚洲国产精品精华液网站| 午夜伦理福利在线| 91久久久亚洲精品| 99久久精品99国产精品| 幼a在线观看| 国内精品久久久| 日本不卡不码高清免费观看| 久久午夜剧场| 亚洲欧美日韩爽爽影院| 欧美精品成人| 国产三级视频| 一个人www欧美| 亚洲黄色成人| 米奇777在线影院线| 在线免费看av不卡| 免费在线成人| 一级毛片在线观| 欧美高清在线播放| 加勒比av一区二区| avtt亚洲| 国产精品欧美激情在线播放| 9久草视频在线视频精品| bt在线麻豆视频| 成人精品久久一区二区三区| 国产人妖乱国产精品人妖| 毛片在线网站| 蜜桃成人在线| 色综合欧美在线视频区| 欧州一区二区三区| 先锋影音男人资源| 欧美另类z0zxhd电影| 精品久久久久久久久久久aⅴ| 欧美 国产 日本| 亚洲乱码av中文一区二区| 亚洲影院一区| 亚洲国产日韩欧美在线观看| 99国产高清| 偷拍欧美精品| 久久久影院一区二区三区| 国产蜜臀av在线一区二区三区| 成人ssswww在线播放| 青青草综合视频| 久久久av电影| 国产精品免费丝袜| 欧美人成网站| 欧美伊人久久| 精品产国自在拍| 欧美一级鲁丝片| 日b视频免费观看| 久久久人成影片一区二区三区| 国产精品三级视频| 国产女同性恋一区二区| 蜜桃av一区二区在线观看| 久久久一本精品99久久精品| 亚洲电影二区| 经典三级在线一区| 毛片不卡一区二区| 一级欧洲+日本+国产| 久久亚洲导航| 国产成人无码一二三区视频| 668精品在线视频| 亚洲欧美一区二区三区四区| 国产拍欧美日韩视频二区| 欧亚精品一区| аⅴ资源天堂资源库在线| 免费h片在线观看| 久草综合在线观看| 中文有码久久| 亚洲欧美一区二区原创| 成人免费视频网站| 欧美日韩在线观看一区| 亚洲成人蜜桃| 精品欧美国产| 国产伊人精品在线| 国产视色精品亚洲一区二区| 国产1区2区3区中文字幕| 欧美视频中文字幕| 亚洲麻豆视频| 国产在线高潮| 偷拍盗摄高潮叫床对白清晰| 国产亚洲精品一区二555| 99久久精品费精品国产一区二区| 91精品丝袜国产高跟在线| 欧美日本在线一区| 久久精品人人做人人爽电影蜜月| h片在线观看下载| 欧美韩国日本在线| 国产91精品久久久| 日本韩国欧美一区二区三区| 天堂成人国产精品一区| 成人亚洲免费| igao视频网在线视频| 欧美人与性禽动交精品| 亚洲女人天堂成人av在线| 国产欧美中文在线| 99久久综合| 阿v视频在线| 1069男同网址| 精品免费二区三区三区高中清不卡 | 免费一区二区视频| 国产精品天堂蜜av在线播放| 国产视频97| 精品久久久久久乱码天堂| 伊人久久久久久久久久久久久| 国产精品区一区二区三区| 中文字幕一区二区三区在线视频 | 欧美日韩免费区域视频在线观看| 噜噜噜91成人网| 精品国产一区二| 三级理论午夜在线观看| 日韩中文字幕亚洲精品欧美| 日本免费久久高清视频| 亚洲成人网在线观看| 亚洲欧洲国产日韩| 免费高清不卡av| 精品国产中文字幕第一页| www.综合网.com| 最新日本视频| 亚洲区成人777777精品| 国产精品久久视频| 亚洲男人7777| 色成年激情久久综合| 91啪亚洲精品| 一区二区三区四区五区在线 | 精品va天堂亚洲国产| 亚洲乱码国产乱码精品精98午夜| 美女视频黄免费的久久| 久久福利综合|