PSO được đề xuất bởi Kennedy và Eberhart [71] vào năm 1995 là thuật toán tìm kiếm ngẫu nhiên dựa trên việc mô phỏng hành vi và sự tương tác của bầy chim
hay đàn cá tìm nguồn thức ăn. Mỗi con chim đại diện cho một cá thể trong quần thể gồm Pmax cá thể và được đặc trưng bởi hai thành phần là vị trí và vận tốc. Mỗi cá thể đại diện cho một giải pháp tiềm năng, được đánh giá thông qua hàm mục tiêu (fitness function). Ban đầu PSO được khởi tạo với vector vị trí và vector vận tốc một cách ngẫu nhiên. Sau đó trong mỗi bước lặp của thuật toán, vector vận tốc ���= [���,1, ���,2, … , ���,�] và vị trí ��� = [���,1, ���,2, … , ���,�] của mỗi cá thể id sẽ được cập nhật theo công thức (1.16) và (1.17). Cũng tại mỗi bước lặp (mỗi lần di chuyển trong không gian n chiều), mỗi cá thể chịu ảnh hưởng bởi hai thông tin: Thông tin thứ nhất là vị trí tốt nhất mà nó đạt được cho tới thời điểm hiện tại, gọi là
�����_��= [ ���,1, ���,2, … , ���,�]. Thông tin thứ hai là vị trí tốt nhất trong tất cả quá trình tìm kiếm của các cá thể trong quần thể từ trước cho tới thời điểm hiện tại, gọi là �����. Minh họa việc cập nhật vị trí và vận tốc của mỗi
cá thể theo vị trí tốt nhất của nó và của cả quần thể tính tới thời điểm hiện tại như chỉ ra trong Hình 1.11. ��+1 = � ∗ �� + �1 ∗ 1 � ( ) ∗ (�����_�� − �� ) + �2 ∗ 2 � ( ) ∗ ( ����� − �� ) (1.16) �� �� �� �� ��++1 �=�+1 �� �� �� �� (1.17) ∗ ( � ���− ���) 𝒜�= ���− ����_��� (1.18)
Hình 1.11: Đồ thị minh họa một điểm tìm kiếm bằng PSO Vị trí tốt nhất �����_��của mỗi cá thể id được cập nhật như sau:
�� , nếu ftness(��+1) > ��
�����_���+1 = �(�) = {ftness����_��(��+1), nếu ftness(����+1) ≤ ����_����
�� �� ����_��
(1.19)
Giá trị ����� tại lần lặp thứ k là: ����� = min (�� )
Luận án sử dụng thuật toán tối ưu PSO được cải tiến bởi [72] bằng việc đưa thêm vào hệ số rằng buộc K gọi là tối ưu rằng buộc (Constrained Particle Swarm Optimization - CPSO). Trong thuật toán PSO cải tiến sự thay đổi vận tốc của các cá thể trong phương trình (1.16) được thay thế bởi phương trình (1.20) sau đây :
��+1 = ∗ [ � 𝒜� ∗ �� + �1 ∗ 1 � ( ) ∗ (����� − �� ) + �2 ∗ 2 � ( ) ∗ ( ����� − �� )] (1.20)
����_� �
Hệ số K được xác định là K = 2 ;
|2 −−� √� 2∗∗∗∗∗∗∗∗∗∗∗∗∗−4 |∗ ∗
Vị trí mới của mỗi cá thể id được thay đổi bằng cách thêm vận tốc ở phương trình (1.20) vào vị trí hiện tại như sau:
��++1 �=�+1 ��
�� �� ��
(1.21)
Trong đó; �� và �� là vị trí và vận tốc hiện tại của cá thể id tại bước lặp k; Giới hạn
�� ��
của vận tốc được xác định trong miền [−����, ����], trong đó ���� là một hằng số được xác định trước bởi người dùng;
ω là trọng số quán tính thay đổi theo công thức (1.18)
�1 và �2 là hai nhân tố học dùng kiểm soát mức độ ảnh hưởng của các thành phần xã hội và nhận thức và được xác định giống như công trình [72] là: �1 = �2=
2.05, và φ = �1+ �2= 4.1. Khi đó giá trị của hệ số K = 0.7298.
R1 () và R2 () là hai hàm nhận các giá trị ngẫu nhiên trong khoảng [0, 1] Thuật toán PSO [71, 72] được tóm tắt thành các bước bằng việc giảm thiểu hàm mục tiêu f như sau:
Thuật toán 1.1: Thuật toán PSO cơ bản
Đầu vào: Số lượng Pmax cá thể trong quần thể Đầu ra: Giá trị tối ưu �����
Thiết lập: K=0.7298, 𝒜���, 𝒜���, ����và số lần lặp tối đa ����_���
Begin
Khởi tạo: vị trí ban đầu, vận tốc ban đầu và vị trí tốt nhất �����_��của mỗi cá thể.
Vị trí của cá thể id (id = 1,2, …, Pmax); ���= [���,1, ���,2, … , ���,n] Vận tốc của cá thể id: ��� = [���,1, ���,2, … , ���,n]
Ban đầu đặt �����_�� = ��� = [���,1, ���,2, … , ���,n]
while (iter ≤ iter_max) do
foreach id (1≤ �� ≤ Pmax)
Tính giá trị hàm mục tiêu của mỗi cá thể id: f(���)
Tính giá trị �����_��của mỗi cá thể id theo công thức (1.19)
End for
Cập nhật �����theo giá trị hàm mục tiêu.
foreach id (1≤ �� ≤ Pmax)
Cập nhật vận tốc của cá thể id theo công thức (1.20) Cập nhật vị trí của cá thể id theo công thức (1.21)
End for
Cập nhật 𝒜� theo công thức (1.18)
Return �����
End.