《集体智慧编程》第8章

1.P175
在计算高斯函数时,代码中的默认标准差为10.0,如果默认标准差为10是得不到正文中的数据的,这里的默认值应该改为1.0
附上高斯函数的公式和图像

公式中的a代表高斯函数的最大值,b代表平均值(即当高斯函数取最大值时x的值),c代表标准差,c^2表示方差。
《集体智慧编程》第8章_第1张图片
上图表示a=1,b=0, c=1
《集体智慧编程》第8章_第2张图片
上图表示a=1, b=0, c=10(注意横坐标数值)
★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★
注意此处标准差为1,但是在后边P181计算按比例缩放后的预测结果时,此处的标准差应该改回10,否则会导致分母为0的错误(error:float division),切记。
2.P182
本页下方为了对缩放结果进行优化时,调用了第五章的代码,但是我们不能直接把第五章的optimization.py文件直接拷贝过来,我们还要对其进行一些修改,或者读者如果下载了本书的配套代码就可以直接把\PCI_Code Folder\chapter8中的optimization.py复制过来,但要注意调用第二个geneticoptimize()函数时,chapter8中的文件把函数名称改为了swarmoptimize(),也就是说原文中的

>>>optimization.geneticoptimize(numpredict.weightdomain, costf, popsize = 5, lrate = 1, maxv = 4, iters = 20)

应改为

>>>optimization.swarmoptimize(numpredict.weightdomain, costf, popsize = 5, lrate = 1, maxv = 4, iters = 20)

没有下载配套代码的,应该把geneticoptimize()函数改为

def geneticoptimize(domain,costf,popsize=20,lrate=0.1,maxv=2.0,iters=50):

  # Initialize individuals

  # current solutions

  x=[]



  # best solutions

  p=[]



  # velocities

  v=[]



  for i in range(0,popsize):

    vec=[float(random.randint(domain[i][0],domain[i][1])) 

         for i in range(len(domain))]

    x.append(vec)

    p.append(vec[:])

    v.append([0.0 for i in vec])





  for ml in range(0,iters):

    for i in range(0,popsize):

      # Best solution for this particle

      if costf(x[i])# Best solution for any particle

      for j in range(0,popsize):

        if costf(p[j])for d in range(len(x[i])):

        # Update the velocity of this particle

        v[i][d]+=lrate*(p[i][d]-x[i][d])+lrate*(p[g][d]-x[i][d])



        # constrain velocity to a maximum

        if v[i][d]>maxv: v[i][d]=maxv

        elif v[i][d]<-maxv: v[i][d]=-maxv



        # constrain bounds of solutions

        x[i][d]+=v[i][d]

        if x[i][d]0]: x[i][d]=domain[d][0]

        elif x[i][d]>domain[d][1]: x[i][d]=domain[d][1]



    #print p[g],costf(p[g])

  return p[g]

就可以得到结果了

你可能感兴趣的:(集体智慧编程,集体智慧编程)