АЛГОРИТМ РОЯ ЧАСТИЦ PYTHON

Алгоритм роя частиц (PSO) - это метод оптимизации, который использует рой частиц, чтобы искать оптимальное решение задачи. PSO может использоваться для различных приложений, таких как оптимизация функций, нейронные сети, обработка сигналов и другие. В Python реализация алгоритма очень проста и может быть выполнена всего несколькими строками кода.

Вот пример реализации алгоритма роя частиц для оптимизации функции Розенброка:

import randomdef rosenbrock(x): return sum(100.0*(x[1:]-x[:-1]**2.0)**2.0 + (1-x[:-1])**2.0)class Particle: def __init__(self, x0): self.position_i = [] self.velocity_i = [] self.pos_best_i = [] self.err_best_i = -1 self.err_i = -1 for i in range(0, num_dimensions): self.velocity_i.append(random.uniform(-1,1)) self.position_i.append(x0[i]) def evaluate(self, costFunc): self.err_i = costFunc(self.position_i) if self.err_i < self.err_best_i or self.err_best_i == -1: self.pos_best_i = self.position_i self.err_best_i = self.err_i def update_velocity(self, pos_best_g): w = 0.5 c1 = 1 c2 = 2 for i in range(0, num_dimensions): r1 = random.random() r2 = random.random() vel_cognitive = c1*r1*(self.pos_best_i[i]-self.position_i[i]) vel_social = c2*r2*(pos_best_g[i]-self.position_i[i]) self.velocity_i[i] = w*self.velocity_i[i] + vel_cognitive + vel_social def update_position(self, bounds): for i in range(0, num_dimensions): self.position_i[i] = self.position_i[i] + self.velocity_i[i] if self.position_i[i] > bounds[i][1]: self.position_i[i] = bounds[i][1] if self.position_i[i] < bounds[i][0]: self.position_i[i] = bounds[i][0]class PSO(): def __init__(self, costFunc, x0, bounds, num_particles, maxiter): global num_dimensions num_dimensions = len(x0) err_best_g = -1 pos_best_g = [] swarm = [] for i in range(0, num_particles): swarm.append(Particle(x0)) for i in range(maxiter): for j in range(0, num_particles): swarm[j].evaluate(costFunc) if swarm[j].err_i < err_best_g or err_best_g == -1: pos_best_g = list(swarm[j].position_i) err_best_g = float(swarm[j].err_i) for j in range(0, num_particles): swarm[j].update_velocity(pos_best_g) swarm[j].update_position(bounds) print ('FINAL:') print (pos_best_g) print (err_best_g)bounds = [(-10, 10), (-10, 10), (-10, 10), (-10, 10)]PSO(rosenbrock, [0.1, -0.5, 0.3, 0.8], bounds, num_particles=15, maxiter=30)

В данном примере оптимизируется функция Розенброка с ограничениями в [-10, 10]. В итоге алгоритм выводит наилучший результат и значение функции в этой точке.

Создаём мозг для \

Particle Swarm Optimization in Python

Эвристические алгоритмы. Часть 4. Метод роя частиц

Learn Particle Swarm Optimization (PSO) in 20 minutes

Python Code for Particle Swarm Optimization (Sphere function)

Particle Swarm Optimization (PSO) with Python in 5 minutes

Алгоритм роя частиц

BLGPG-097FAAE88491-24-09-20-01

Новые материалы: