Thuật toán nhánh cận trên môi trường song song

33 701 2
Thuật toán nhánh cận trên  môi trường song song

Đang tải... (xem toàn văn)

Tài liệu hạn chế xem trước, để xem đầy đủ mời bạn chọn Tải xuống

Thông tin tài liệu

Một trong những bài toán đặt ra trong thực tế là tìm một nghiệm của bài toán thỏa mãn một số điều kiện nào đó và nghiệm đó là tốt nhất theo một tiêu chí cụ thể

TRƯỜNG ĐẠI HỌC SƯ PHẠM HÀ NỘI KHOA CÔNG NGHỆ THÔNG TIN -------***------- B ÁO C ÁO KHOA H ỌC Chuyên đề: Xử lí song song Đề tài: Thuật toán nhánh cận trên môi trường song song MỤC LỤC Chương 1 : TỔNG QUAN VỀ THUẬT TOÁN NHÁNH CẬN m nhánh cận' title='thuật toán tìm kiếm nhánh cận'>THUẬT TOÁN NHÁNH CẬN 2 1.1. Thuật toán nhánh cận .3 1.2. Một số ví dụ cụ thể áp dụng thuật toán nhánh cận 4 Chương 2 : XÂY DỰNG KHUNG THUẬT TOÁN NHÁNH CẬN .7 * Nhóm các lớp yêu cầu .8 * Nhóm các lớp cung cấp .10 1 2.1. Xây dựng khung nhánh cận 12 2.1.1. Cấu trúc dữ liệu .12 2.1.2. Thuật toán .12 2.2. Xây dựng khung nhánh cận tuần tự 15 2.3. Xây dựng khung nhánh cận song song .16 2.3.1. Lược đồ song song dữ liệu tập trung 19 2.3.2. Lược đồ song song dữ liệu phân tán .22 2.4. Công cụ phát triển hệ thống 25 2.5. Lựa chọn mô hình phát triển hệ thống .25 Chương 3 : SỬ DỤNG THUẬT TOÁN NHÁNH CẬN ĐỂ GIẢI QUYẾT BÀI TOÁN TSP 27 * Bài toán TSP (Bài toán người du lịch) 27 3.1. Giới thiệu bài toán .27 3.2. Định nghĩa bài toán .27 3.3. Sử dụng thuật toán nhánh cận để giải bài toán TSP .28 * Tính cận và phân nhánh 28 3.4. Chương trình thực thi .32 Chương 1 : TỔNG QUAN VỀ THUẬT TOÁN NHÁNH CẬN Thuật toán nhánh cận là phương pháp chủ yếu để giải các bài toán tối ưu tổ hợp. Ta sẽ thực hiện việc đánh giá theo từng bước, nếu không có khả năng tìm thấy kết quả tốt hơn thì sẽ cắt nhánh đó, không thực hiện tìm tiếp mà chuyển ngay sang nhánh khác. Khi đó, chỉ ghi nhận các kết quả tốt hơn lúc ban đầu. Nghiệm của bài toán sẽ tốt dần lên do khi tìm ra kết quả tốt hơn ta sẽ cập nhật lại giá trị hiện thời của bài toán. 2 1.1. Thuật toán nhánh cận Một trong những bài toán đặt ra trong thực tế là tìm một nghiệm của bài toán thỏa mãn một số điều kiện nào đó và nghiệm đó là tốt nhất theo một tiêu chí cụ thể, nghiên cứu lời giải các bài toán tối ưu thuộc về lĩnh vực quy hoạch toán học. mô hình được sử dụng để tìm kiếm là mô hình cây phân cấp . việc tìm nghiệm của các bài toán thường phải dựa vào việc liệt kê toàn bộ các cấu hình có thể và đánh giá tìm ra cấu hình tốt nhất. Ví dụ: Bài toán người du lịch: không gian trạng thái là N! Bài toán K- median : không gian trạng thái là )!(! ! knk n C k n − = Khi đó, không gian tìm kiếm của bài toán là rất lớn trong khi nhiều trường hợp có thể loại bỏ được ngay. Điều này gây nên tình trạng lãng phí bộ nhớ và mất rất nhiều thời gian. Vấn đề đặt ra là trong quá trình liệt kê lời giải cần tận dụng những thông tin đã có để loại bỏ sớm những phương án chắc chắn không tối ưu. Thuật toán nhánh cận được sử dụng để khắc phục những vấn đề trên Tư tưởng cơ bản của thuật toán là trong quá trình tìm kiếm lời giải, ta sẽ phân hoạch tập các phương án của bài toán thành hai hay nhiều tập con biểu diễn như một nút của cây tìm kiếm và cố gắng bằng phép đánh giá cận các nút, tìm cách loại bỏ các nhánh cây (những tập con các phương án của bài toán) mà ta biết chắc chắn không phải là phương án tối ưu. Mặc dù trong trường hợp tồi nhất thuật toán sẽ trở thành duyệt toàn bộ, nhưng những trường hợp cụ thể nó rút ngắn đáng kể thời gian tìm kiếm. Để áp dụng phương pháp nhánh cận đối với 1 tập các bài toán tối ưu chúng ta cần làm theo các bước sau: • Bước1 ( khởi tạo): L:={П 0 }, Q: ={П 0 },bs:= -∞ và T:= (tập hợp rỗng). • Bước 2( tìm kiếm): đi tới Bước 9 nếu L = đi đến Bước 3 sau khi lựa chọn Пi:= s(Ls) để kiểm tra. 3 • Bước 3 (cập nhật ): Nếu lower_bound(Пi)> bs, thì bs:= lower_bound(Пi) T:={σ } với σ lời giải khả thi của Пi sao cho f(x,σ )= lower_bound(П i). Đi tới bước 4. • Bước 4 : đi tới Bước 8 nếu Пi G (tập hợp các bài toán bộ phận Пi được giải trong tiến trình tính toán cận trên của Пi). ngược lại thì đi đến Bước 5. • Bước 5: ( kiểm tra cận trên): đi đến bước 8 nếu cận trên nhỏ hơn bs: upper_bound(Пi) ≤ bs. Ngược lại đi tới bước 6. • Bước 6: đi tới bước 8 nếu tồn tại một Пk (≠ Пi) ∈ Q mà f(Пk) ≥ f(Пi). Ngược lại đi tới bước 7. • Bước7: (phân nhánh): Phân cập nhật . Quay trở lại bước 2. • Bước 8 ( kết thúc bài toán con): gán L:= L - Пi sau đó quay trở lại bước 2. • Bước 9 ( kết thúc toàn bộ ) : Dừng. bs = f(П 0 ) và T lưu trữ một lời giải tối ưu của П 0 , nếu bs = - ∞ , П 0 không có lời giải 1.2. Một số ví dụ cụ thể áp dụng thuật toán nhánh cận Bài 1: Bài toán người du lịch( TSP) • Phát biểu bài toán : Một người du lịch muốn đi thăm quan n thành phố T1 , T2 , … , Tn .Xuất phát từ một thành phố nào đó người du lịch muốn đi qua tất cả các thành phố còn lại, mối thành phố đúng một lần, rồi quay trở lại thành phố xuất phát. Biết ci,j là chi phí từ thành phố Ti đến thành phố Tj . Hãy tìm hành trình với tổng chi phí nhỏ nhất 4 • Xây dựng công thức : Phương án : π = (π1, π2, … πn) là hoán vị của 1, 2, …, n Hành trình : T π1 → T π2 → …… → T πn Chi phí : f(π) = c π1, π2 + c π2, π3 + …. + c πn, π1 Π : tập tất cả các hoán vị => min {f(π) : π ∈ Π } • Tư tưởng của thuật toán nhánh cận: • Cố định thành phố 1 • Tìm cực tiểu của hàm : f(x2, x3, . . , xn) = c[1,x2] + c[x2,x3] + . + c[xn,1] => min x2, x3, . . , xn là hoán vị của các số 2, 3, …, n • Ký hiệu : cmin = min{c[i,j]; i, j = 1,2,…,n, i≠j} • Giả sử có phương án bộ phận (u1,u2, …, uk) – Chi phí phải trả là : σ = c[1,u2] + c[u2,u3] + . + c[uk-1, uk] – Cận dưới là : g (u1,u2, …, uk) = σ + (n-k+1)*cmin 1. Phương pháp phân nhánh: + Nếu bài toán con có g() > f -(Kỉ lục tạm thời) thì cắt luôn nhánh của bài toán này + Nếu không thì phân nhánh tiếp bài toán con cho đến khi tính được kỉ lục của bài toán con này. Nếu kỉ lục của bài toán con nhỏ hơn f() thì cập nhật lại kỉ lục tạm thời f() 5 2. Phương pháp tính cận: 5. 9. tính cận trên của bài toán con dựa vào công thức σ = c[1,u2] + c[u2,u3] + . + c[uk-1, uk] g (u1,u2, …, uk) = σ + (n-k+1)*cmin Bài 2: Bài toán cái túi • Phát biểu bài toán : Một nhà thám hiểm cần đem theo một cái túi có trọng lượng không quá b. Có n đồ vật có thể đem theo. Đồ vật thứ j có trọng lượng a và giá trị sử dụng là c . Hỏi rằng nhà thám hiểm cần đem theo các đồ vật nào để cho tổng giá trị sử dụng của các đồ vật đem theo là lớn nhất. • Xây dựng công thức : Phương án x = {x1,x2, …, xn} Giá trị đồ vật đem theo Tổng trọng lượng đồ vật  min{f(x) : g(x) ≤ b} 6 Chương 2 : XÂY DỰNG KHUNG THUẬT TOÁN NHÁNH CẬN Thuật toán nhánh cận được xây dựng với mong muốn giải quyết được tập các bài toán tối ưu tổ hợp. Có nghĩa là tất cả các bài toán đó sẽ được giải quyết dựa trên một khung chung của thuật toán để khi vào một bài toán cụ thể người viết chương trình chỉ cần thêm vào khung đó những dữ liệu phù hợp với bài toán của mình. Nó giảm bớt thời gian xây dựng thuật toán đồng thời nó hữu ích cho những người không biết kỹ thuật nhánh cận trên môi trường song song vẫn có thể cài đặt song song. Chương này sẽ trình bày việc xây dựng khung của kĩ thuật nhánh cận và kỹ thuật nhánh cận trên môi trường tuần tự hoặc song song. Hệ thống gồm hai nhóm : một nhóm các lớp cung cấp (Provided) bao hàm các thủ tục chung cho thuật toán nhánh cận (ví dụ như khung của thuật toán nhánh cận tuần tự, khung của thuật toán nhánh cận song song .) và nhóm các lớp yêu cầu (Required) bao hàm các thủ tục riêng để giải quyết một bài toán cụ thể sử dụng kỹ thuật nhánh cận (ví dụ như các thủ tục tính cận, thủ tục phân nhánh, .). Để giải quyết một bài toán bằng kỹ thuật nhánh cận, người sử dụng chỉ cần viết các khai báo và xây dựng các hàm trong nhóm yêu cầu mà không cần xây dựng lại nhóm cung cấp. Hình 4.1 diễn tả mô hình UML tổng quan của hệ thống. 7 * Nhóm các lớp yêu cầu Mô hình chung của nhóm các lớp yêu cầu Hình 2 diễn tả các lớp và thủ tục chính trong nhóm yêu cầu. 8 Hình 1 : Mô hình UML Hình 2 : Các lớp yêu cầu Các lớp yêu cầu được sử dụng để lưu trữ dữ liệu cơ bản của thuật toán : bài toán, trạng thái không gian tìm kiếm. Nó bao gồm các lớp chính sau : - Bài toán (Problem): Diễn tả các tham số của bài toán cần giải quyết. - Bài toán con (Subproblem) : Diễn tả vùng không gian chưa được khai thác và cung cấp các chức năng sau : o InitSubProblem(pbm) : Sinh ra bài toán con đầu tiên từ bài toán ban đầu o LowerBound(pbm, sol) : Tính toán cận dưới của hàm mục tiêu cho lời giải bộ phận sol của bài toán pbm. o UpperBound(pbm, sol) : Tính giá trị hàm mục tiêu của lời giải toàn cục sol của bài toán pbm. o Branch(pbm, sps) : Sinh ra một tập các bài toán con của bài toán đang xét và lưu vào sps. Lớp bài toán con diễn tả một bài toán bộ phận. Một bài toán con được xác định bởi các dữ liệu sau : vector sol chứa các chỉ số đỉnh làm median của bài toán con (hay là lời giải bộ phận của bài toán cần giải quyết) và được sắp xếp theo thứ tự tăng dần, chỉ số đỉnh cuối eV của lời giải bộ phận, và cận dưới cost ứng với lời giải bộ phận sol. Lớp bài toán con phải cung cấp các hàm chính sau : - InitSubProblem(pbm): sinh ra bài toán con ban đầu với - Các hàm tính cận dưới (LowerBound), tính cận trên (UpperBound), phân nhánh (Branch). 9 * Nhóm các lớp cung cấp Trước khi mô tả lớp cung cấp chúng ta cần xem xét cấu trúc dữ liệu để lưu các bài toán con chưa được giải quyết trong quá trình tính toán. Vì số lượng các bài toán con là rất lớn và không biết trước nên ta sử dụng một danh sách liên kết kép để quản lý chúng. Lớp Solver : Làm nhiệm vụ đưa ra và duy trì các thông tin có liên quan tới trạng thái tìm kiếm trong suốt quá trình thực hiện class Solver { protected: const Problem& pbm;// bài toán cần giải quyết Direction dir; SubProblem sp; // bài toán con hiện thời cần giải quyết Solution sol; // giải pháp tốt nhất hiện thời container<SubProblem> HP;// danh sách các bài toán con cần giải quyết Bound high;// cận trên của nhánh bài toán con Bound low;// cận dưới của nhánh bài toán con Bound bestSol;// kỉ lục hiện thời của bài toán public: Solver(const Problem &problem); 10 [...]... như một lớp trên chuẩn MPI 2.5 Lựa chọn mô hình phát triển hệ thống Phân lớp thuật toán nhánh cận song song Có ba cách tiếp cận chính trong việc thiết kế thuật toán nhánh cận song song - Song song loại 1 : Tiến hành song song hóa các hoạt động trên bài toán con, ví dụ như tính cận song song trên bài toán con Cách tiếp cận này không ảnh hưởng tới cấu trúc chung của thuật toán nhánh cận - Song song loại... DỤNG THUẬT TOÁN NHÁNH CẬN ĐỂ GIẢI QUYẾT BÀI TOÁN TSP Trong chương này chúng tôi đưa ra các kết quả thực nghiệm nhằm đánh giá hiệu suất của mô hình thuật toán nhánh cận song song đề xuất ở trên Thuật toán tuần tự được lựa chọn để so sánh có cùng cách tính cận, phân nhánh và lựa chọn bài toán con như trong mô hình thuật toán song song * Bài toán TSP (Bài toán người du lịch) 3.1 Giới thiệu bài toán Bài toán. .. bày cách tiếp cận song song loại 2 để thiết kế thuật toán nhánh cận song song Lựa chọn mô hình phát triển thuật toán Có hai hệ thống tính toán song song chủ yếu là bộ nhớ dùng chung và bộ nhớ phân tán Chúng tôi lựa chọn hệ thống bộ nhớ phân tán để tiến hành thiết kế thuật toán vì một số lý do sau : 25 - Lý do đầu tiên xuất phát từ thực tế đó là có thể tiến hành các thuật toán song song trên mạng nối... toán nhánh cận - Song song loại 2 : Xây dựng cây nhánh cận một cách song song bằng việc thực hiện các hoạt động trên các bài toán con một cách đồng thời Vì thế nó có thể ảnh hưởng tới việc thiết kế thuật toán - Song song loại 3 : Một vài cây nhánh cận được xây dựng một cách song song Các cây được đặc thù bởi các hoạt động khác nhau (phân nhánh, tính cận, kiểm tra ước lượng hay lựa chọn), và thông tin... nhánh cận để giải quyết đều phải sử dụng khung của thuật toán Điều này nhấn mạnh rằng người dùng nếu giải bài toán của mình trên môi trường tuần tự hoặc song song thì chỉ cần thêm một số phương thức, dữ liệu phù hợp mà không cần suy nghĩ đến việc phải thiết kế các bước như thế nào Dưới đây là khung chung của thuật toán: 12 1 Khởi tạo a Tập hoạt động (tập các bài toán con chưa được duyệt) chứa bài toán. .. trên một phương pháp nào đó (theo chiều sâu, chiều rộng, hoặc cận tốt nhất , ) để lựa chọn một bài toán con khả thi cùng cận của nó từ tập hoạt động b Xóa bài toán con khỏi tập hoạt động 3 Phân nhánh a Áp dụng luật phân nhánh để sinh ra các bài toán con mới từ bài toán đang xét Tính cận của các bài toán con mới này b Tiến hành kiểm tra các bài toán con vừa được sinh ra Có hai trường hợp : (1) bài toán. .. phân nhánh thành các bài toán con nhỏ hơn với lời giải bộ phận tương ứng là (v1, v2, , vi-1+1), , (v1, v2, , N – K + 1), tiến hành tính cận cho các bài toán con này Nếu các bài toán con đã được giải quyết ta tiến hành duyệt và cập nhật kỷ lục tạm thời bs, ngược lại thì đưa các bài toán con này vào tập hoạt động L Sau đây là đoạn mã giả mô phỏng thuật toán nhánh cận tuần tự 15 Hình 4: Thuật toán nhánh cận. .. khung nhánh cận song song Để song song hóa khung sử dụng kỹ thuật nhánh cận chúng ta sử dụng chiến lược chủ - thợ Chiến lược này có thể được định nghĩa như sau: một bộ xử lý chủ giữ tất cả thông tin về không gian trạng thái, nơi mà chứa đựng số lượng các bài toán con chưa được phân nhánh trên cây liệt kê và nó cũng lưu giữ lời giải hiện thời Máy chủ gửi bài toán con tới máy thợ rỗi và nhận các bài toán. .. 3.3 Sử dụng thuật toán nhánh cận để giải bài toán TSP Để đi tìm lời giải chính xác cho bài toán TSP không còn cách nào khác ngoài việc chúng ta phải duyệt tất cả các lời giải có thể, tuy nhiên số lượng này là quá lớn (= n!), trong đó rất lãng phí các lời giải không cần thiết Cách tiếp cận hiệu quả nhất từ trước tới nay trong chiến lược này đó chính là thuật toán nhánh cận( có thể cắt các nhánh ở các... public: SubProblem (); }; Lớp bài toán con phải cung cấp các hàm chính sau : - InitSubProblem(pbm) : sinh ra bài toán con ban đầu với iV = 0; eV = 0; cost = 0; - Các hàm tính cận dưới (LowerBound), tính cận trên (UpperBound), phân nhánh( Branch) • Lớp Solution lưu giữ lời giải hiện tại 30 Class Solution() { …… } * Trên môi trường tuần tự Khi thực thi trên môi trường tuần tự người dùng chỉ cần gọi . -------***------- B ÁO C ÁO KHOA H ỌC Chuyên đề: Xử lí song song Đề tài: Thuật toán nhánh cận trên môi trường song song MỤC LỤC Chương 1 : TỔNG QUAN VỀ THUẬT. khung nhánh cận song song...........................................................................................16 2.3.1. Lược đồ song song dữ liệu tập

Ngày đăng: 25/04/2013, 20:59

Từ khóa liên quan

Tài liệu cùng người dùng

Tài liệu liên quan