作家
登录

Go语言如何实现遗传算法

作者: 来源: 2017-11-16 17:01:24 阅读 我要评论

Tech Neo技巧沙龙 | 11月25号,九州云/ZStack与您一路商量云时代收集界线治理实践


出于好玩的心态,我决定进修一下Go说话。我认为进修新说话最好的办法就是深刻进修,并且尽可能多犯缺点。如许做固然可能会很慢,然则可以确保在后面的过程中再也不会出现编译的缺点。

Go说话与我习惯的其他说话不合。Go更爱好本身零丁实现,而其他像Java这类说话更爱好持续。其实袈溱Go说话琅绫擎根本没有持续这种概念,因为它压根就没有对象这一说法。比如说C说话,它有构造体,然则没有类。然则如许它照样可以有像“构造者”如许的常见思惟和设计模式(一种在这种情况下有序地产生构造体的方法)。

Go说话若何实现遗传算法

Go说话果断拥戴组合(composition),同时也很否决持续的做法,在收集上引起了强烈的评论辩论,同时也让人们从新思虑了说话该往哪个偏向成长。所以,大年夜这个角度来看,Go说话与其它说话的差别可能也没有那么大年夜。

本文将重点介绍若何用Go说话实现遗传算法。如不雅你还没有参加过GoLang Tour,我还建议你快速看一下这门说话的介绍。

话不多说,让我们开端大年夜代码说起吧!第一个例子与我以前做过的很类似:找到一个二次的最小值。

  1. type GeneticAlgorithmSettings struct { 
  2.   PopulationSize int 
  3.   MutationRate int 
  4.   CrossoverRate int 
  5.   NumGenerations int 
  6.   KeepBestAcrossPopulation bool 
  7.  
  8. type GeneticAlgorithmRunner interface { 
  9.   GenerateInitialPopulation(populationSize int) []interface{} 
  10.   PerformCrossover(individual1, individual2 interface{}, mutationRate int) interface{} 
  11.   PerformMutation(individual interface{}) interface{} 
  12.   Sort([]interface{}) 

我立马定义了一组设置,以便在稍后启动的算法顶用到。

第二部分的GeneticAlgorithmRunner这个看起来竽暌剐点奇怪。GeneticAlgorithmRunner是一个接口,询问若何生成初始种群,履行corssovers和mutataions,并对谜底进行排序,以便在Population中保持最好的个别,如许下一代才会加倍优良。我认为这看起来很奇怪,因为“接口”平日用于面向对象的说话,平日会请求对象实现某些特点和办法。这琅绫腔有什么差别。这一小段代码实际上是在说,它正在请求一些器械来定义这些办法的细节。我是如许做的:

  1. type QuadraticGA struct {} 
  2.  
  3. func (l QuadraticGA) GenerateInitialPopulation(populationSize int) []interface{}{ 
  4.   initialPopulation := make([]interface{}, 0, populationSize) 
  5.   for i:= 0; i < populationSize; i++ { 
  6.     initialPopulation = append(initialPopulation, makeNewEntry()) 
  7.   } 
  8.   return initialPopulation 
  9.  
  10. func (l QuadraticGA) PerformCrossover(result1, result2 interface{}, _ int) interface{}{ 
  11.   return (result1.(float64) + result2.(float64)) / 2 
  12.  
  13. func (l QuadraticGA) PerformMutation(_ interface{}, _ int) interface{}{ 
  14.   return makeNewEntry() 
  15.  
  16. func (l QuadraticGA) Sort(population []interface{}){ 
     1/6    1 2 3 4 5 6 下一页 尾页

      推荐阅读

      主流浏览器之战:Edge惨遭微软“抛弃”,IE开始逆袭

    Tech Neo技巧沙龙 | 11月25号,九州云/ZStack与您一路商量云时代收集界线治理实践 10 月浏览器市场份额数据显示,Chrome 市场份额持续晋升,下个月有望冲破 60% 。Edge 浏览器的份额出现下>>>详细阅读


    本文标题:Go语言如何实现遗传算法

    地址:http://www.17bianji.com/lsqh/38942.html

关键词: 探索发现

乐购科技部分新闻及文章转载自互联网,供读者交流和学习,若有涉及作者版权等问题请及时与我们联系,以便更正、删除或按规定办理。感谢所有提供资讯的网站,欢迎各类媒体与乐购科技进行文章共享合作。

网友点评
自媒体专栏

评论

热度

精彩导读
栏目ID=71的表不存在(操作类型=0)