欧美bbbwbbbw肥妇,免费乱码人妻系列日韩,一级黄片

python實現(xiàn)粒子群算法

 更新時間:2020年10月15日 09:49:54   作者:農(nóng)大魯迅  
這篇文章主要介紹了python如何實現(xiàn)粒子群算法,幫助大家更好的進行機器學(xué)習(xí),感興趣的朋友可以了解下

粒子群算法

粒子群算法源于復(fù)雜適應(yīng)系統(tǒng)(Complex Adaptive System,CAS)。CAS理論于1994年正式提出,CAS中的成員稱為主體。比如研究鳥群系統(tǒng),每個鳥在這個系統(tǒng)中就稱為主體。主體有適應(yīng)性,它能夠與環(huán)境及其他的主體進行交流,并且根據(jù)交流的過程“學(xué)習(xí)”或“積累經(jīng)驗”改變自身結(jié)構(gòu)與行為。整個系統(tǒng)的演變或進化包括:新層次的產(chǎn)生(小鳥的出生);分化和多樣性的出現(xiàn)(鳥群中的鳥分成許多小的群);新的主題的出現(xiàn)(鳥尋找食物過程中,不斷發(fā)現(xiàn)新的食物)。

PSO初始化為一群隨機粒子(隨機解)。然后通過迭代找到最優(yōu)解。在每一次的迭代中,粒子通過跟蹤兩個“極值”(pbest,gbest)來更新自己。
在找到這兩個最優(yōu)值后,粒子通過下面的公式來更新自己的速度和位置。

i 表示第 i 個粒子, d 表示粒子的第 d 個維度。r1, r2 表示兩個位于 [0, 1] 的隨機數(shù)(對于一個粒子的不同維度,r1, r2 的值不同)。pbest[i] 是指粒子取得最高(低)適應(yīng)度時的位置,gbest[i] 指的是整個系統(tǒng)取得最高(低)適應(yīng)度時的位置。

實踐

我們用 PSO 算法求解如下函數(shù)的最小值

可以在空間畫出圖像

下圖是使用 5 個粒子的收斂情況

可以看到,fitness 在第 12 輪就幾乎收斂到 -10.0。

下面是完整代碼

import numpy as np
import matplotlib.pyplot as plt
from mpl_toolkits.mplot3d import Axes3D


INF = 1e5

def plot_cost_func():
  """畫出適應(yīng)度函數(shù)"""
  fig = plt.figure()
  ax = Axes3D(fig)
  X = np.arange(-4, 4, 0.25)
  Y = np.arange(-4, 4, 0.25)
  X, Y = np.meshgrid(X, Y)
  Z = (X**2 + Y**2) - 10
  ax.plot_surface(X, Y, Z, rstride=1, cstride=1, cmap='rainbow')
  plt.show()

def fitness(x):
  return x[0]**2 + x[1]**2 - 10

class PSOSolver(object):
  def __init__(self, n_iter, weight=0.5, c1=2, c2=2, n_particle=5):
    self.n_iter = n_iter
    self.weight = weight
    self.c1 = c1
    self.c2 = c2
    self.n_particle = n_particle
    self.gbest = np.random.rand(2)
    # gbest 對應(yīng)的函數(shù)值
    self.gbest_fit = fitness(self.gbest)
    # 將位置初始化到 [-5, 5]
    self.location = 10 * np.random.rand(n_particle, 2) - 5
    # 將速度初始化到 [-1, 1]
    self.velocity = 2 * np.random.rand(n_particle, 2) - 1
    self.pbest_fit = np.tile(INF, n_particle)
    self.pbest = np.zeros((n_particle, 2))
    # 記錄每一步的最優(yōu)值
    self.best_fitness = []
  
  def new_velocity(self, i):
    r = np.random.rand(2, 2)
    v = self.velocity[i]
    x = self.location[i]
    pbest = self.pbest[i]
    return self.weight * v + self.c1 * r[0] * (pbest - x) + \
        self.c2 * r[1] * (self.gbest - x)

  def solve(self):
    for it in range(self.n_iter):
      for i in range(self.n_particle):
        v = self.new_velocity(i)
        x = self.location[i] + v
        fit_i = fitness(x)
        if fit_i < self.pbest_fit[i]:
          self.pbest_fit[i] = fit_i
          self.pbest[i] = x
          if fit_i < self.gbest_fit:
            self.gbest_fit = fit_i
            self.gbest = x
        self.velocity[i] = v
        self.location[i] = x
      self.best_fitness.append(self.gbest_fit)

  
if __name__ == '__main__':
  plot_cost_func()
  n_iter = 20
  s = PSOSolver(n_iter)
  s.solve()
  print(s.gbest_fit)
  plt.title("Fitness Curve")
  plt.xlabel("iter")
  plt.ylabel("fitness")
  plt.plot(np.arange(n_iter), np.array(s.best_fitness))
  plt.show()

以上就是python實現(xiàn)粒子群算法的詳細內(nèi)容,更多關(guān)于python 粒子群算法的資料請關(guān)注腳本之家其它相關(guān)文章!

相關(guān)文章

  • 為什么說Python可以實現(xiàn)所有的算法

    為什么說Python可以實現(xiàn)所有的算法

    在本篇文章里小編給各位整理的是關(guān)于一個Python就可以實現(xiàn)所有的算法的相關(guān)文章,需要的朋友們參考下。
    2019-10-10
  • python基礎(chǔ)知識小結(jié)之集合

    python基礎(chǔ)知識小結(jié)之集合

    本文給大家小結(jié)了一下Python中集合的基礎(chǔ)知識,非常的簡單易懂,有需要的小伙伴可以參考下。
    2015-11-11
  • pandas?如何將字符串映射為數(shù)字

    pandas?如何將字符串映射為數(shù)字

    這篇文章主要介紹了pandas?如何將字符串映射為數(shù)字,具有很好的參考價值,具有很好的參考價值,希望對大家有所幫助。如有錯誤或未考慮完全的地方,望不吝賜教
    2022-07-07
  • python 制作網(wǎng)站小說下載器

    python 制作網(wǎng)站小說下載器

    這篇文章主要介紹了python 如何制作網(wǎng)站小說下載器,幫助大家更好的理解和使用python,感興趣的朋友可以了解下
    2021-02-02
  • Python使用pandas和openpyxl讀取Excel表格的方法詳解

    Python使用pandas和openpyxl讀取Excel表格的方法詳解

    這篇文章主要介紹了Python讀取Excel表格數(shù)據(jù)的方法,Python提供了多種讀取Excel文件的方式,最常用的庫是pandas和openpyxl,下面我將詳細介紹如何使用這兩個庫來讀取Excel文件,并包含一些實用示例,需要的朋友可以參考下
    2024-10-10
  • 解決django跨域的問題小結(jié)(Hbuilder X)

    解決django跨域的問題小結(jié)(Hbuilder X)

    使用Django開發(fā)時,可能會遇到跨域問題,尤其是當后端與HbuilderX開發(fā)的前端結(jié)合使用時,解決此問題的關(guān)鍵步驟包括安裝django-cors-headers庫,并在Django的settings.py中進行相應(yīng)配置,本文給大家介紹解決django跨域的問題小結(jié),感興趣的朋友一起看看吧
    2024-10-10
  • pytorch DistributedDataParallel 多卡訓(xùn)練結(jié)果變差的解決方案

    pytorch DistributedDataParallel 多卡訓(xùn)練結(jié)果變差的解決方案

    這篇文章主要介紹了pytorch DistributedDataParallel 多卡訓(xùn)練結(jié)果變差的解決方案,具有很好的參考價值,希望對大家有所幫助。如有錯誤或未考慮完全的地方,望不吝賜教
    2021-06-06
  • python編碼問題匯總

    python編碼問題匯總

    這篇文章主要給大家分享的是python編碼問題匯總,字符編碼簡單介紹和發(fā)展史及使用方法的一些介紹,文章內(nèi)容詳細,具有一定的參考價值,需要的小伙伴可以參考一下
    2022-03-03
  • python網(wǎng)絡(luò)編程之TCP通信實例和socketserver框架使用例子

    python網(wǎng)絡(luò)編程之TCP通信實例和socketserver框架使用例子

    這篇文章主要介紹了python網(wǎng)絡(luò)編程之TCP通信實例和socketserver框架使用例子,需要的朋友可以參考下
    2014-04-04
  • Python+unittest+requests 接口自動化測試框架搭建教程

    Python+unittest+requests 接口自動化測試框架搭建教程

    這篇文章主要介紹了Python+unittest+requests 接口自動化測試框架搭建教程,文中通過示例代碼介紹的非常詳細,對大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧
    2020-10-10

最新評論