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: 𝑃𝑏𝑒𝑠𝑡_𝑖𝑑𝑘+1 = 𝑓(𝑥) = { 𝑃𝑏𝑒𝑠𝑡_𝑖𝑑𝑘 , nếu fitness(𝑥𝑖𝑑𝑘+1) > 𝑃𝑏𝑒𝑠𝑡_𝑖𝑑𝑘
fitness(𝑥𝑖𝑑𝑘+1), nếu fitness(𝑥𝑖𝑑𝑘+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 :
Hệ sốKđược xác định là K=|2−𝜑−√𝜑22−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
foreachid (1≤ 𝑖𝑑 ≤ Pmax)
▪ Tínhgiá trị hàm mục tiêu của mỗi cá thểid: f(𝑥𝑖𝑑)
▪ Tínhgiá 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.
foreachid (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) End while
Return 𝐺𝑏𝑒𝑠𝑡
End.