Tải bản đầy đủ (.pdf) (13 trang)

thuật toán tối ưu hóa bầy đàn

Bạn đang xem bản rút gọn của tài liệu. Xem và tải ngay bản đầy đủ của tài liệu tại đây (339.41 KB, 13 trang )

<span class="text_page_counter">Trang 1</span><div class="page_container" data-page="1">

TRƯỜNG ĐẠI HỌC VĂN LANGKHOA KỸ THUẬT CƠ – ĐIỆN VÀ MÁY TÍNH

BỘ MƠN KHOA HỌC DỮ LIỆU

BÁO CÁO MƠN HỌCTỐI ƯU HĨA ỨNG DỤNGĐề tài: Thuật tốn tối ưu hóa bầy đàn

Sinh viên thực hiện:Phan Duy Thành

Võ Xuân PhátNguyên Hào PhongNguyễn Thanh VănNguyễn Quốc Nam

Hồ Chí Minh, ngày 4 / tháng 12/ năm 2023

</div><span class="text_page_counter">Trang 2</span><div class="page_container" data-page="2">

V. Gili thích code...7

</div><span class="text_page_counter">Trang 3</span><div class="page_container" data-page="3">

DANH MỤC TỪ TIẾNG ANH VÀ VIẾT TẮT

PSO (Particle Swarm Optimization) : Phương pháp tối ưu bầy đànGA (Genetic Algorithm) : Thuật toán di truyền

IEEE (Institute for Electrical and Electronics Engineers) :Viện Kỹ sư và Điện tửTSP (Traveling Salesman Problem) : Bài toán người bán hàng

NP (Nondeterministic Polynomial time) : thuật toán bất định trong thời gian đa thứcACO ( Ant Colony Optimization algorithm ): Thuật toán đàn kiến

</div><span class="text_page_counter">Trang 4</span><div class="page_container" data-page="4">

I. Tóm tắt nội dung báo cáo

Particle Swarm Optimization (PSO) là một phương pháp tối ưu hóa được lấy cảm hứng từ hành vi tự nhiên của các đàn linh cẩu. Thuật toán này hoạt động bằng cách sử dụng một tập hợp các "hạt" (particles) di chuyển trong khơng gian tìm kiếm để tìm ra giải pháp tối ưu cho một vấn đề tối ưu hóa cụ thể.

Mỗi hạt trong PSO được biểu diễn bởi một vị trí trong khơng gian tìm kiếm và một vận tốc di chuyển. Q trình tối ưu hóa bắt đầu bằng việc khởi tạo các hạt ở các vị trí ngẫu nhiên trong khơng gian tìm kiếm và gán cho mỗi hạt một vận tốc ban đầu. Sau đó, PSO tính tốn giá trị hàm mục tiêu (fitness) tương ứng với vị trí hiện tại của mỗi hạt.

Tiếp theo, PSO cập nhật vị trí tốt nhất cá nhân (pbest) của mỗi hạt bằng cách so sánh giá trị fitness hiện tại với giá trị fitness tốt nhất mà hạt đã gặp. Sau đó, nó tìm ra vị trí tốt nhất của toàn bộ quần thể (gbest) bằng cách so sánh giá trị fitness tốt nhất của pbest với giá trị fitness tốt nhất của tất cả các hạt trong quần thể.

Các vị trí và tốc độ của các hạt được cập nhật bằng cách kết hợp thành phần cá nhân và thành phần xã hội. Thành phần cá nhân dẫn dắt mỗi hạt tiến gần hơn đến pbest của nó, trong khi thành phần xã hội giúp hướng các hạt về phía gbest của tồn bộ quần thể.

PSO tiếp tục lặp lại q trình cập nhật vị trí và tốc độ cho đến khi đạt được điều kiện dừng, như đạt đến số lần lặp tối đa hoặc đạt đến một giải pháp tối ưu đủ chính xác. Với tính đơn giản, khả năng tìm kiếm tồn cục và khả năng xử lý khơng gian tìm kiếmlớn mà khơng u cầu thông tin đạo hàm, PSO được ứng dụng rộng rãi trong nhiều lĩnh vực thực tế như tối ưu hóa hàm số, huấn luyện mạng nơ-ron, và tự động hóa cơng nghiệp.

II.Giới thiệu

Phương pháp tối ưu bầy đàn (Particle Swarm Optimization (PSO)) là một dạng của các thuật toán tiến hóa quần thể đã được biết đến trước đây như thuật toán di truyền(Genetic algorithm (GA)), Thuật toán đàn kiến(Ant colony algorithm). Tuy vậy PSO khác với GA ở chỗ nó thiên về sử dụng sự tương tác giữa các cá thể trong một quần thể để khám phá khơng gian tìm kiếm. PSO là kết quả của sự mơ hình hóa việc đàn chim bay đi tìm kiếm thức ăn cho nên nó thường được xếp vào các loại thuật tốn có sử dụng trí tuệ bầy đàn. Được giới thiệu vào năm 1995 tại một hội nghị của IEEE bởi James Kennedy và kỹ sư Russell C. Eberhart. Thuật tốn có nhiều ứng dụng quan trọng trong tất cả các lĩnh vực mà ở đó địi hỏi phải giải quyết các bài tốn tối ưu hóa. Để hiểu rõ thuật tốn PSO hãy xem một ví dụ đơn giản về quá trình tìm kiếm thức ăn của một đàn chim. Khơng gian tìm kiếm thức ăn lúc này là tồn bộ khơng gian ba chiều mà chúng ta đang sinh sống. Tại thời điểm bắt đầu tìm kiếm cả đàn bay theo một hướng nào đó, có thể là rất ngẫu nhiên. Tuy nhiên sau một thời gian tìm kiếm mộtsố cá thể trong đàn bắt đầu tìm ra được nơi có chứa thức ăn. Tùy theo số lượng thức ăn vừa tìm kiếm, mà cá thể gửi tín hiệu đến các các cá thể khác đang tìm kiếm ở vùng lân cận. Tín hiệu này lan truyền trên tồn quần thể. Dựa vào thơng tin nhận được mỗi cá thể sẽ điều chỉnh hướng bay và vận tốc theo hướng về nơi có nhiều thức ăn nhất. Cơ chế truyền tin như vậy thường được xem như là một kiểu hình của trí tuệ bầy đàn.

</div><span class="text_page_counter">Trang 5</span><div class="page_container" data-page="5">

Cơ chế này giúp cả đàn chim tìm ra nơi có nhiều thức ăn nhất trên khơng gian tìm kiếm vơ cùng rộng lớn.

III.Ngun lý hoạt động

2.1 Khởi tạo:

Xác định số lượng hạt trong quần thể.

Khởi tạo vị trí ban đầu của các hạt trong khơng gian tìm kiếm.Gán tốc độ di chuyển ban đầu cho mỗi hạt.

2.4 Tìm gbest (vị trí tốt nhất của quần thể):

So sánh giá trị fitness tốt nhất của mỗi hạt (pbest) với giá trị fitness tốt nhất của toàn bộ quần thể (gbest).

Nếu giá trị fitness của pbest tốt hơn, cập nhật gbest thành vị trí tốt nhất của hạt đó.

IV. Các ví dụ về việc áp dụng thực tế

a) Nghiên ciu khung thuâ k t toán chung pso để gili bài toán tsp

Trong ngành logistics và vận tải, TSP được sử dụng để tối ưu hóa lộ trình của các phương tiện vận chuyển như xe tải, tàu biển, và máy bay. Điều này giúp giảm thiểu thời gian di chuyển, nhiên liệu tiêu thụ,và chi phí vận chuyển. Các

</div><span class="text_page_counter">Trang 6</span><div class="page_container" data-page="6">

công ty vận chuyển và dịch vụ giao hàng thường sử dụng các giải thuật TSP để lên kế hoạch giao hàng một cách hiệu quả.

Bài tốn người du lịch (TSP) là mơ xt bài tốn tối ưu ty hợp kinh điển. Nó th xc lớp các bài tốn NP-khó và khơng thể giải được trong thời gian đa thức. Trên thực tế người ta thường giải quyết các bài toán này bằng các phương pháp heuristic, chúng cho ra nghiệm gần tối ưu. Các phương pháp heuristic bao gồm phương pháp nhánh cận, heuristic ACO (Ant Colony Optimization), thuật toán GA (Genetic Algorithm), … nhưng các phương pháp này chỉ áp dụng cho lớp các bài tốn nhỏ, khi kích c{ bài tốn lớn thì thời gian chạy của bài tốn là rất lớn.

Bài tốn tối ưu ty hợp là bài tốn tìm ra ty hợp tốt nhất trong những ty hợp có thể tạo ra, thỏa mãn yêu cầu cho trước. Với các bài tốn tối ưu ty hợp NP-khó có c{ nhỏ, người ta có thể tìm lời giải tối ưu nhờ phương pháp tìm kiếm vét cạn. Tuy nhiên, với các bài tốn c{ lớn thì đến nay chưa thể có thuật tốn tìm lời giải đúng với thời gian đa thức nên chỉ có thể tìm lời giải gần đúng hay đủ tốt].

Theo cách tiếp cận truyền thống hay là tiếp cận cứng, các thuật toán gần đúng phải được chứng minh tính hơ xi tụ hoặc ước lượng được tỷ lệ tối ưu. Với việc đòi hỏi khắt khe về toán học như vậy làm hạn chế số lượng các thuật tốn cơng bố, khơng đáp ứng được nhu cầu ngày càng phong phú và đa dạng trong nghiêncứu và ứng dụng. Để khắc phục tình trạng này, người ta dùng tiếp cận đủ tốt đểxây dựng các thuật toán tối ưu mềm.

Bài toán người du lịch (TSP: Traveling Salesman Problem) có thể biểu diễn thành mơ xt đồ thị, trong đó các thành phố là các đỉnh, các con đường đi lại giữa các thành phố là các cạnh, đồng thời khoảng cách giữa các thành phố là trọng số tương ứng của cạnh nối chúng, nếu giữa hai thành phố khơng có đường đi trực tiếp mà phải thơng qua mơ xt thành phố khác thì ta gán trọng số của cạnh đó là số lớn nhất có thể. Khi đó, bài tốn người du lịch trở thành bài tốn tìm mơ xt chu trình Hamilton ngắn nhất, và lơ x trình của người du lịch chính là chu trình Hamilton ngắn nhất.

Nếu dùng phương pháp vét cạn để giải bái tốn TSP thì ta ln cho ta mô xt đáp án tối ưu nhất, tuy nhiên đơ x phức tạp của nó là q cao (O(n!)). Vì vậy, để giải bài tốn này người ta thường dùng các thuật toán tối ưu mềm.

PSO (Particle Swarm Optimization) là khung thuật toán chung dựa trên kinh nghiệm của bầy đàn được đề xuất bởi bởi Kennedy và Eberhat. Nó là mơ xt khung thuật tốn thơng minh dựa trên bầy đàn, mô phỏng lại hành vi xã hơ xi củabầy chim hay đàn cá khi đi tìm nguồn thức ăn.

Mô xt cá thể (particle) được thể hiện trong PSO tương tự như mô xt con chim hoặc mơ xt con cá tìm kiếm thức ăn trong khơng gian tìm kiếm của nó. Sự di chuyển của mỗi cá thể là sự kết hợp giữa vận tốc và hướng di chuyển. Vị trí của mỗi cáthể tại bất kỳ thời điểm nào cũng bị ảnh hưởng bởi vị trí tốt nhất của nó và vị trí tốt nhất của cả bầy đàn. Hiệu quả đạt được của mô xt cá thể được xác định bởimô xt giá trị thích nghi, giá trị này được xác định phụ th xc vào từng bài tốn. Trong PSO, quần thể bao gồm các cá thể trong không gian của bài tốn. Các cáthể được khởi tạo mơ xt cách ngẫu nhiên. Mỗi cá thể sẽ có mơ xt giá trị thích nghi,

</div><span class="text_page_counter">Trang 7</span><div class="page_container" data-page="7">

giá trị này được xác định bởi mơ xt hàm thích nghi để tối ưu trong mỗi thế hệ. Trong mỗi thế hệ, mỗi cá thể thay đyi vận tốc và thay đyi vị trí của nó theo thờigian. Dựa vào giá trị thích nghi, mỗi cá thể tìm ra giải pháp tối ưu cục bơ x trong khơng gian tìm kiếm nhiều chiều. Sau đó, giải pháp tối ưu cục bơ x được so sánh với giải pháp tối ưu toàn cục của cả bầy đàn để cập nhật lại giá trị cho giải pháptối ưu toàn cục. Dựa vào giải pháp tối ưu tồn cục để tìm ra giải pháp tối ưu nhất.

b) Áp dụng các thuật tốn dựa trên tìm kiếm bầy đàn để tính tốn điều độ tối ưu trong hệ thống điện có xét đến nguồn năng lưpng gió

Ứng dụng và chọn lựa các thuật tốn để giải bài toán điều độ tối ưu của hệ thống điện.

Tính được cơng suất truyền tải trên đường dây, công suất và công suất phản kháng của các nhà máy phát nhiệt điện (NMPĐ) và nhà máy điên gió x(NMĐG), dung lượng tụ bù, nấc điều chỉnh bộ điều áp tối ưu với chi phí phát điện cực tiểu theo phụ tải 24 giờ.

Tính tối ưu tyn thất công suất, tối ưu độ lệch điện áp tại các nút tải, tối ưu yn định điện áp của hệ thống có tham gia của NMĐG theo phụ tải 24 giờChi phí vận hành của các NMPĐ và NMĐG là tối ưu nhất để cung cấp đủ côngsuất yêu cầu của phụ tải 24 giờ.

Tối ưu: công suất phân bố tại các nút tải và trên đường dây, điện áp tại các nút, dung lượng bù, tyn thất công suất, độ lệch điện áp

ƒp dụng các thuật tốn tối ưu bầy đàn để tính tối ưu điều độ kinh tế, tối ưu phân bố công suất, tối ưu công suất phản kháng trong hệ thống điện với qui mơhệ thống lớn hơn và có thể áp dụng các thuật tốn tối ưu bầy đàn để tính tối ưu điều độ hệ thống điện Việt Nam.

Điều độ tối ưu kinh tế, tối ưu phân bố công suất, tối ưu công suất phản kháng theo yêu cầu phụ tải 24 giờ, nhằm mục đích định hướng hệ thống điện tham giathị trường điện phù hợp với yêu cầu hệ thống điện khi tham gia thị trường điện cạnh tranh để lựa chọn giá bán điện tốt nhất. Năng lượng gió sẽ phát triển mạnhtại Việt Nam trong tương lai do Việt Nam có đặc điểm địa lý thích hợp, do đó việc tính tốn điều độ tối ưu hệ thống điện có tham gia của năng lượng gió là cần thiết và áp dụng được trong tương lai.

</div><span class="text_page_counter">Trang 8</span><div class="page_container" data-page="8">

5abfe2ccb53d2f63c3c3245d/AS%3A610191980630016%401522492513881/image/PSOEquation.png"): Dòng này tạo một đối tượng hình ảnh từ URL được cung cấp và hiển thị nó.

Các giá trị W, c1, và c2 là các hằng số trong thuật toán PSO, quyết định về tốc độ và hướng di chuyển của các hạt. n_iterations là số lần lặp tối đa mà thuật toán sẽ thực hiện

W là trọng số quán tính (inertia weight)

c1 là hệ số kinh nghiệm cá nhân (cognitive coefficient)c2 là hệ số kinh nghiệm tập thể (social coefficient)

n_iterations: Đây là số lần lặp tối đa mà thuật toán PSO sẽ thực hiện trước khi dừng. Trong mỗi lần lặp, các hạt sẽ di chuyển và cập nhật vị trí của chúng, và sau mỗi lần lặp, thuật toán kiểm tra xem liệu nó đã đạt được điều kiện dừng haychưa.

n_particles: Đây là số lượng hạt trong đám. Số lượng hạt càng lớn thì khả năngthuật tốn tìm kiếm khơng gian tìm kiếm càng lớn. Tuy nhiên, điều này cũng cóthể làm tăng chi phí tính tốn.

target_error: Đây là ngư{ng sai số mà thuật tốn sẽ dừng lại khi nó đạt được. Nếu sai số giữa giải pháp tốt nhất hiện tại và giải pháp tốt nhất trong lần lặp trước đó nhỏ hơn hoặc bằng target_error, thuật tốn sẽ dừng lại vì đã đạt được sự hội tụ mong muốn.

Gili thích biến x,y:

</div><span class="text_page_counter">Trang 9</span><div class="page_container" data-page="9">

rd.getrandbits(1): Hàm này sinh một số ngẫu nhiên chỉ có thể là 0 hoặc 1. Nó sử dụng getrandbits() để tạo ra một số nguyên với một số lượng bit được chỉ định.

Hàm bool() chuyển đyi số nguyên nhận được từ getrandbits() thành một giá trịboolean, sao cho 0 tương ứng với False, và 1 tương ứng với True.

(-1) ** bool(rd.getrandbits(1)): Phần này sử dụng toán tử mũ để đảo dấu của số ngẫu nhiên. Nếu số ngẫu nhiên là 0, kết quả sẽ là 1, ngược lại nếu số ngẫu nhiên là 1, kết quả sẽ là -1. Điều này giúp chọn ngẫu nhiên một hướng di chuyển cho hạt.

(-1) ** bool(rd.getrandbits(1)) * rd.random(): Phần này nhân số ngẫu nhiên được tạo ra từ bước trước với kết quả từ bước thứ ba. Điều này giúp tạo ra một số ngẫu nhiên âm hoặc dương.

(-1) ** bool(rd.getrandbits(1)) * rd.random() * 1000: Cuối cùng, số ngẫu nhiên từ bước trước được nhân với 1000, giúp đưa giá trị trong khoảng [-1000, 1000].

Gili thích class:

__init__(self): Phương thức khởi tạo của lớp Particle, được gọi khi một đối tượng Particle được tạo ra. Trong phương thức này, các thuộc tính ban đầu của mỗi hạt được thiết lập, bao gồm:

position: Vị trí ban đầu của hạt trong khơng gian tìm kiếm. Trong đoạn mã này, vị trí ban đầu được chọn một cách ngẫu nhiên trong khoảng [-1000, 1000] cho cả hai chiều x và y.

pBest_position: Vị trí tốt nhất mà hạt đã đạt được cho đến nay (cá nhân tốt nhất của hạt). Ban đầu, nó được đặt bằng vị trí ban đầu của hạt.

pBest_value: Giá trị tốt nhất của hàm mục tiêu tương ứng với vị trí tốt nhất pBest_position. Ban đầu, nó được đặt là vô cùng dương (float('inf')).

velocity: Vận tốc ban đầu của hạt, mặc định là [0, 0].

update(self): Phương thức này được sử dụng để cập nhật vị trí của hạt dựa trênvận tốc hiện tại của nó. Khi gọi, vị trí của hạt được cập nhật bằng cách cộng với vận tốc hiện tại.

</div><span class="text_page_counter">Trang 10</span><div class="page_container" data-page="10">

def __init__(self, target, target_error, n_particles):Khởi tạo các thuộc tính cần thiết khi tạo một đối tượng Space.

self.target = target: Lưu trữ mục tiêu tối ưu hóa.self.target_error = target_error: Lưu trữ lỗi mục tiêu.

self.n_particles = n_particles: Lưu trữ số lượng hạt trong khơng gian tìm kiếm.

self.particles = []: Khởi tạo danh sách rỗng để lưu trữ các hạt.

</div><span class="text_page_counter">Trang 11</span><div class="page_container" data-page="11">

self.gBest_value = float('inf'): Khởi tạo giá trị tốt nhất ban đầu với giá trị vô cùng lớn (float('inf')).

self.gBest_position = np.array([rd.random() * 50, rd.random() * 50]): Khởitạo vị trí tốt nhất ban đầu cho hạt ngẫu nhiên trong một khoảng giới hạn (0-50) trên mỗi chiều.

def fitness(self, particle):Tính giá trị fitness của 1 hạt

x = particle.position[0]: Lấy tọa độ x của hạt từ vị trí của hạt.y = particle.position[1]: Lấy tọa độ y của hạt từ vị trí của hạt.

f = x2 + y2 + 1: Tính tốn giá trị fitness của hạt bằng cách áp dụng công thức f = x^2 + y^2 + 1.

return f: Trả về giá trị fitness (f).

def set_pBest(self): Cập nhật giá trị tốt nhất của mỗi hạt trong không gian tìm kiếm.

for particle in self.particles: Duyệt qua danh sách các hạt trong khơng gian tìm kiếm.

fitness_candidate = self.fitness(particle): Tính tốn giá trị fitness của hạt bằng cách gọi hàm fitness.

if(particle.pBest_value > fitness_candidate): Kiểm tra nếu giá trị tốt nhất hiện tại của hạt (pBest_value) lớn hơn giá trị fitness_candidate.

particle.pBest_value = fitness_candidate: Cập nhật giá trị tốt nhất của hạtthành fitness_candidate.

particle.pBest_position = particle.position: Cập nhật vị trí tốt nhất của hạt thành vị trí hiện tại của hạt.

def set_gBest(self): Cập nhật giá trị tốt nhất trong tồn bộ khơng gian tìm kiếm.for particle in self.particles: Duyệt qua danh sách các hạt trong khơng gian tìm kiếm.

best_fitness_candidate = self.fitness(particle): Tính tốn giá trị fitness tốt nhất của hạt bằng cách gọi hàm fitness.

if(self.gBest_value > best_fitness_candidate): Kiểm tra nếu giá trị tốt nhất của tồn bộ khơng gian tìm kiếm (gBest_value) lớn hơn best_fitness_candidate.

self.gBest_value = best_fitness_candidate: Cập nhật giá trị tốt nhất của tồn bộ khơng gian tìm kiếm thành best_fitness_candidate.

self.gBest_position = particle.position: Cập nhật vị trí tốt nhất của tồn bộ khơng gian tìm kiếm thành vị trí hiện tại của hạt.

def update_particles(self): cập nhật vận tốc và vị trí của các hạt trong khơng gian tìm kiếm.

for particle in self.particles: Duyệt qua danh sách các hạt trong không gian tìm kiếm.

global W: Khai báo biến W là biến toàn cục để sử dụng hệ số trọng số (inertial weight) trong tính tốn vận tốc.

inertial = W * particle.velocity: Tính tốn thành phần động lượng của vận tốccủa hạt bằng cách nhân vận tốc hiện tại của hạt với hệ số trọng số W.

self_confidence = c1 * rd.random() * (particle.pBest_position -

particle.position): Tính tốn thành phần tự tin của vận tốc của hạt. Đây là sự tự tin của hạt dựa trên vị trí tốt nhất của chính nó (pBest_position) và vị trí hiện

</div>

×