python遗传算法实现数据拟合

python据说功能强大,触角伸到各个领域,网上搜了一下其科学计算和工程计算能力也相当强,具备各种第三方包,除了性能软肋外,其他无可指摘,甚至可以同matlab等专业工具一较高下。

从网上找了一个使用遗传算法实现数据拟合的例子学习了一下,确实Python相当贴合自然语言,终于编程语言也能说人话了,代码整体简洁、优雅。。

代码功能:给出一个隐藏函数 例如 z=x^2+y^2,生成200个数据,利用这200个数据,使用遗传算法猜测这些数据是什么公式生成的。 (说的太直白,一点都不高大上)

代码如下:

 
 
                                                   result = deepcopy(t)
                               result.children = [self.mutate(c, pc, probchange)               
                                                                                                  
                          
                   rows = []
                              x = randint(0, 10)
                 x=uniform(-1,1)
                 y = randint(0, 10)
                 y=uniform(-1,1)
                 rows.append([x, y, self.hiddenfunction(x, y)])
                           
               dif = 0
                                                  
                             scores = [(self.scorefunction(t, dataset), t)              scores.sort()
                       
                                                                     scores = rankfunction(population)
                                                                                                               newpop.append(
                         self.mutate(self.crossover(scores[selectindex()][1], scores[selectindex()][1], probswap=breedingrate), pc,
                                probchange=mutationrate))
                                       newpop.append(self.makerandomtree(pc))
             population = newpop
                
 
 
      e=opera()
               
 
                               a=opera()
     row2=a.buildhiddenset()
          
 
          fig = plt.figure()
     ax = fig.add_subplot(111, projection=     X = [1, 1, 2, 2]
     Y = [3, 4, 4, 3]
     Z = [1, 2, 1, 1]
     rx=[]
     ry=[]
     rz=[]
              rx.append(i[0])
         ry.append(i[1])
         rz.append(i[2])
 
     ax.plot_trisurf(rx, ry, rz)
     rz2=[]
     rf = a.getrankfunction(row2)
     final = a.evolve(2, 100, rf, mutationrate=0.2, breedingrate=0.1, pexp=0.7, pnew=0.1,maxgen=500)
          final.display()
              rz2.append(final.evaluate([rx[j],ry[j]]))
     fig2 = plt.figure()
     ax2 = fig2.add_subplot(111, projection=     ax2.plot_trisurf(rx, ry, rz2)
 
     plt.show()
 
 
           
 
 
 
      main(0)

看懂不一定写的出来,这是这次写这个程序最大的体会, 得定时拿出来复习复习。

上一篇:SDOI2019 省选前模板整理


下一篇:java Random.nextInt()方法