粒子群演算法

2021-10-05 07:18:57 字數 2842 閱讀 7781

粒子群演算法(particle swarm optimization,pso):可以想象成這樣乙個場景:一群鳥在隨機的搜尋食物。在這個區域裡只有一塊食物,所有的鳥都不知道食物在哪。但是它們知道自己當前的位置距離食物還有多遠。那麼找到食物的最優策略是什麼?最簡單有效的就是搜尋目前離食物最近的鳥的周圍區域。

兩大更新公式

: self.w = w # 慣性權重

self.c1 = c1

self.c2 = c2

self.population_size = population_size # 粒子群數量

self.dim = dim # 搜尋空間的維度

self.max_steps = max_steps # 迭代次數

x =[[

]]for i in

range

(self.dim)

: self.x_bound = bound # 解空間範圍

self.x1 = np.random.uniform(self.x_bound[0]

, self.x_bound[1]

,(self.population_size,1)

)# 初始化粒子群位置

x = x.reshape(self.population_size, self.dim)

self.v = np.random.rand(self.population_size, self.dim)

# 初始化粒子群速度

fitness = self.calculate_fitness(self.x)

self.p = self.x # 個體的最佳位置

self.pg = self.x[np.argmin(fitness)

]# 全域性最佳位置

self.individual_best_fitness = fitness # 個體的最優適應度

self.global_best_fitness = np.

min(fitness)

# 全域性最佳適應度

defcalculate_fitness

(self, x)

:return np.

sum(np.square(x)

, axis=1)

defevolve

(self)

: fig = plt.figure(

)for step in

range

(self.max_steps)

: r1 = np.random.rand(self.population_size, self.dim)

r2 = np.random.rand(self.population_size, self.dim)

# 更新速度和權重

self.v = self.w*self.v+self.c1*r1*

(self.p-self.x)

+self.c2*r2*

(self.pg-self.x)

self.x = self.v + self.x

plt.clf(

) plt.scatter(self.x[:,

0], self.x[:,

1], s=

30, color=

'k')

plt.xlim(self.x_bound[0]

, self.x_bound[1]

) plt.ylim(self.x_bound[0]

, self.x_bound[1]

) plt.pause(

0.01

) fitness = self.calculate_fitness(self.x)

# 需要更新的個體

update_id = np.greater(self.individual_best_fitness, fitness)

self.p[update_id]

= self.x[update_id]

self.individual_best_fitness[update_id]

= fitness[update_id]

# 新一代出現了更小的fitness,所以更新全域性最優fitness和位置

if np.

min(fitness)

< self.global_best_fitness:

self.pg = self.x[np.argmin(fitness)

] self.global_best_fitness = np.

min(fitness)

print

('best fitness: %.5f, mean fitness: %.5f'

%(self.global_best_fitness, np.mean(fitness)))

pso = pso(

100,

100)

pso.evolve(

)plt.show(

)

粒子群優化演算法 粒子群演算法

粒子群演算法 particle swarm optimization,pso 屬於進化演算法的一種,該演算法最初是受到飛鳥集群活動的規律性啟發,進而利用群體智慧型建立的乙個簡化模型。粒子群演算法在對動物集群活動行為觀察基礎上,利用群體中的個體對資訊的共享使整個群體的運動在問題求解空間中產生從無序到有...

粒子群演算法

如前所述,pso模擬鳥群的捕食行為。設想這樣乙個場景 一群鳥在隨機搜尋食物。在這個區域裡只有一塊食物。所有的鳥都不知道食物在那裡。但是他們知道當前的位置離食物還有多遠。那麼找到食物的最優策略是什麼呢。最簡單有效的就是搜尋目前離食物最近的鳥的周圍區域。pso從這種模型中得到啟示並用於解決優化問題。ps...

粒子群演算法

一 粒子群演算法的歷史 粒子群演算法源於複雜適應系統 complex adaptive system,cas cas理論於1994年正式提出,cas中的成員稱為主體。比如研究鳥群系統,每個鳥在這個系統中就稱為主體。主體有適應性,它能夠與環境及其他的主體進行交流,並且根據交流的過程 學習 或 積累經驗...