0% found this document useful (0 votes)
53 views3 pages

Soft Computing - Assignment 7: Particle Swarm Optimisation (PSO) Algorithm

This document contains code implementing the Particle Swarm Optimization (PSO) algorithm. The code defines a function to optimize, initializes a swarm of particles with random positions and velocities, and iteratively updates the particles' positions and velocities based on their personal best positions and the global best position. It animates the particles' movement over iterations and prints the final best solution found by PSO compared to the true global optimum.

Uploaded by

Tim Woo
Copyright
© © All Rights Reserved
We take content rights seriously. If you suspect this is your content, claim it here.
Available Formats
Download as PDF, TXT or read online on Scribd
0% found this document useful (0 votes)
53 views3 pages

Soft Computing - Assignment 7: Particle Swarm Optimisation (PSO) Algorithm

This document contains code implementing the Particle Swarm Optimization (PSO) algorithm. The code defines a function to optimize, initializes a swarm of particles with random positions and velocities, and iteratively updates the particles' positions and velocities based on their personal best positions and the global best position. It animates the particles' movement over iterations and prints the final best solution found by PSO compared to the true global optimum.

Uploaded by

Tim Woo
Copyright
© © All Rights Reserved
We take content rights seriously. If you suspect this is your content, claim it here.
Available Formats
Download as PDF, TXT or read online on Scribd
You are on page 1/ 3

SOFT COMPUTING – ASSIGNMENT 7

Particle Swarm Optimisation (PSO) Algorithm:

Code:

import numpy as np
import matplotlib.pyplot as plt
from matplotlib.animation import FuncAnimation

np.random.seed(39)
def f(x1,y1):
    return (x1-3.14)**2 + (y1-2.72)**2 + np.sin(3*x1+1.41) + np.sin(4*y1-1.73)
   
x, y = np.array(np.meshgrid(np.linspace(0,5,100), np.linspace(0,5,100)))
z = f(x, y)

x_min = x.ravel()[z.argmin()]
y_min = y.ravel()[z.argmin()]

c1 = c2 = 0.1
w = 0.8

n_particles = 20

X = np.random.rand(2, n_particles) * 5
V = np.random.randn(2, n_particles) * 0.1

pbest = X
pbest_obj = f(X[0], X[1])
gbest = pbest[:, pbest_obj.argmin()]
gbest_obj = pbest_obj.min()

def update():
    global V, X, pbest, pbest_obj, gbest, gbest_obj
    r1, r2 = np.random.rand(2)
    V = w * V + c1*r1*(pbest - X) + c2*r2*(gbest.reshape(-1,1)-X)
    X = X + V
    obj = f(X[0], X[1])
    pbest[:, (pbest_obj >= obj)] = X[:, (pbest_obj >= obj)]
    pbest_obj = np.array([pbest_obj, obj]).min(axis=0)
    gbest = pbest[:, pbest_obj.argmin()]
    gbest_obj = pbest_obj.min()

fig, ax = plt.subplots(figsize=(8,6))
fig.set_tight_layout(True)
img = ax.imshow(z, extent=[0, 5, 0, 5], origin='lower', cmap='viridis', alpha=0.5)
fig.colorbar(img, ax=ax)
ax.plot([x_min], [y_min], marker='x', markersize=5, color="white")
contours = ax.contour(x, y, z, 10, colors='black', alpha=0.4)
ax.clabel(contours, inline=True, fontsize=8, fmt="%.0f")
pbest_plot = ax.scatter(pbest[0], pbest[1], marker='o', color='black', alpha=0.5)
p_plot = ax.scatter(X[0], X[1], marker='o', color='blue', alpha=0.5)
p_arrow = ax.quiver(X[0], X[1], V[0], V[1], color='blue', width=0.005, angles='xy',
scale_units='xy', scale=1)
gbest_plot = plt.scatter([gbest[0]], [gbest[1]], marker='*', s=100, color='black', alpha=0.4)
ax.set_xlim([0,5])
ax.set_ylim([0,5])

def animate(i):
    title = 'Iteration {:02d}'.format(i)
    update()
    ax.set_title(title)
    pbest_plot.set_offsets(pbest.T)
    p_plot.set_offsets(X.T)
    p_arrow.set_offsets(X.T)
    p_arrow.set_UVC(V[0], V[1])
    gbest_plot.set_offsets(gbest.reshape(1,-1))
    return ax, pbest_plot, p_plot, p_arrow, gbest_plot

anim = FuncAnimation(fig, animate, frames=list(range(1,50)), interval=500, blit=False, repeat=True)


anim.save("PSO.gif", dpi=120, writer="imagemagick")

print("PSO found best solution at f({})={}".format(gbest, gbest_obj))


print("Global optimal at f({})={}".format([x_min,y_min], f(x_min,y_min)))
Output:

You might also like