作家
登录

Go语言如何实现遗传算法

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

  •    return probableIndividuals 
    1. func main() { 
    2.    beforeQuadTime := time.Now() 
    3.    quadraticMain() 
    4.    afterQuadTime := time.Since(beforeQuadTime) 
    5.    fmt.Printf("%d\n", afterQuadTime) 
    6.  
    7.    before3dQuadTime := time.Now() 
    8.    quadratic3dMain() 
    9.    after3dQuatTime := time.Since(before3dQuadTime) 
    10.    fmt.Printf("%d\n", after3dQuatTime) 

    很像以前,一个新的人口被创造出来,人口的成员将会世代交配,而他们的后代可能携带突变。一小我的表示越好,就越有可能交配。跟着时光的推移,算法术敛到最好的谜底,或者至少是一个相当不错的谜底。

    那么当它运行时,它返回了什么呢?

    如今来计算每个项的机能,以求二次函数求出的二次函数来求出一个新的X值的办法:

    不坏!因为人口范围只有5、20代,并且输入典范围被限制在[0 100],这一搜刮就钉在了顶点上。

    如今,您可能想知道为什愦我定义了所有的接口办法来返回“接口{}”。这就像Go和generics一样。没有对象,是以没有对象类型返回,然则没有描述的大年夜小的数据仍然可以在客栈上传递。这本质上也是这个返回类型的含义:它传递一些已知的和类似的类型的对象。有了这个“泛型”,我就可以将GA移动到它本身的包中,并将雷同的代码移到多个不合类型的数据上。

    既然已经为二次实现创建了接口,那么GA本身须要完成:

    我们有两个输入的3D二次方程,而不是一个二维二次方程的单个输入。接口办法只须要很小的改变:

    1. type Quad3D struct { 
    2.    x, y float64 
    3. func makeNewQuadEntry(newX, newY float64) Quad3D { 
    4.    return Quad3D{ 
    5.       x: newX, 
    6.       y: newY, 
    7.    } 
    8.  
    9. func calculate3D(entry Quad3D) float64 { 
    10.    return math.Pow(entry.x, 2)- 6 * entry.x + math.Pow(entry.y, 2)- 6 * entry.y + 2 
    11.  
    12. type Quadratic3dGA struct { 
    13.  
    14. func (l Quadratic3dGA) GenerateInitialPopulation(populationSize int)[]interface{}{ 
    15.  
    16.    initialPopulation := make([]interface{}, 0, populationSize) 
    17.    for i:= 0; i < populationSize; i++ { initialPopulation = append(initialPopulation, makeNewQuadEntry(makeNewEntry(), makeNewEntry())) } return initialPopulation } func (l Quadratic3dGA) PerformCrossover(result1, result2 interface{}, mutationRate int) interface{}{ r1Entry, r2Entry := result1.(Quad3D), result2.(Quad3D) return makeNewQuadEntry((r1Entry.x + r2Entry.x) / 2, (r1Entry.y + r2Entry.y) / 2,) } func (l Quadratic3dGA) PerformMutation(_ interface{}) interface{}{ return makeNewQuadEntry(makeNewEntry(), makeNewEntry()) } func (l Quadratic3dGA) Sort(population []interface{}){ sort.Slice(population, func(i, j 

        推荐阅读

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

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


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

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

    关键词: 探索发现

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

    网友点评
    自媒体专栏

    评论

    热度

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