1. Trang chủ
  2. » Công Nghệ Thông Tin

Bài giảng cơ sở lập trình nâng cao - Chương 5

27 5 0

Đ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

Thông tin cơ bản

Định dạng
Số trang 27
Dung lượng 385,63 KB

Nội dung

Bài toán tối ưu: Trong nhiều bài toán thực tế yêu cầu chúng tìm nghiệm thỏa mãn những điều kiện nào đó và nghiệm này phải tốt nhất theo tiêu chí cụ thể nào đó. Phương pháp Nhánh cận là một dạng cải tiến của phương pháp quay lui dùng để giải quyết bài toán tối ưu.

Chương PHƯƠNG PHÁP THIẾT KẾ THUẬT TOÁN – NHÁNH CẬN – Nội dung  Giới thiệu  Bài toán tối ưu  Phương pháp  Sơ đồ cài đặt  Các ví dụ Hình ảnh … Giới thiệu  Bài toán tối ưu: Trong nhiều toán thực tế yêu cầu chúng tìm nghiệm thỏa mãn điều kiện nghiệm phải tốt theo tiêu chí cụ thể  Phương pháp Nhánh cận dạng cải tiến phương pháp quay lui dùng để giải toán tối ưu Bài toán tối ưu  Phát biểu toán: Giả sử tốn u cầu tìm phương án X=(x1, x2, …, xk, …) thỏa mãn điền kiện phương án tốt theo tiêu chí cụ thể • Gọi f(X) hàm đánh giá tốt phương án X (f hàm mục tiêu hay hàm chi phí) • u cầu: Tìm X cho f(X)  (max) Bài toán tối ưu  Nếu gọi X* phương án tốt (tối ưu) X * arg f ( X ) X X * arg max f ( X ) X  f* = f(X*) gọi giá trị tối ưu toán Bài toán tối ưu  Ví dụ [Bài tốn người du lịch – Traveling Salesman Problem – TSP] Cho n thành phố đánh số từ đến n khoảng cách thành phố i thành phố j cho cij (chú ý: cij=cji) Yêu cầu: Tìm hành trình ngắn cho phép viếng thăm n thành phố, thành phố viếng thăm lần quay thành phố ban đầu Bài toán tối ưu  Mơ hình tốn học: • Một hành trình hoán vị X=(x(1), x(2), …, x(n)) n số {1, 2, …, n} • Hàm mục tiêu: f ( X ) c x (1), x ( 2)  c x ( 2), x ( 3)   c x ( n  1), x ( n )  c x ( n ), x (1) • Yêu cầu: * X arg f ( X ) X Bài tốn tối ưu  Ví dụ [Bài tốn phân cơng – Job Assignment Problem – JAP] Có n công việc n nhân viên Gọi cij chi phí để trả cho nhân viên i làm cơng việc j u cầu: Tìm cách phân cơng n nhân viên làm n việc cho tổng chi phí nhỏ (một nhân viên làm việc, việc nhân viên làm) Bài tốn tối ưu  Mơ hình tốn học: • Một cách phân công n nhân viên làm n việc hoán vị X=(x(1), x(2), …, x(n)) n số {1, 2, …, n} • Hàm mục tiêu: f ( X ) c1, x (1)  c2, x ( )   cn , x ( n ) • Yêu cầu: * X arg f ( X ) X 10 Bài tốn tối ưu  Mơ hình tốn học: • Một phương án chọn đồ vật biểu diễn vector nhị phân độ dài n: X=(x1, x2, …, xn) (xi{0, 1}) – xi=1: Chọn đồ vật i – xi=0: Không chọn đồ vật i • Tổng giá trị đồ vật chọn n f ( X ) v1 x1  v2 x2   xn  vi xi i 1 • Tổng trọng lượng đồ vật chọn n g ( X ) w1 x1  w2 x2   wn xn  wi xi i 1 13 Bài tốn tối ưu • f hàm mục tiêu phải thỏa mãn điều kiện hàm g • Yêu cầu: X *  arg max f ( X ) X g ( X ) W 14 Phương pháp  Phương pháp Nhánh cận (Branch and bound – B&B) X * arg f ( X ) X • Giả sử ta tìm hàm g(x1, x2, …, xk) hàm cận nghiệm có k thành phần g(x1, x2, …, xk) ≤ min{f(X)} 15 Phương pháp • Bước [Khởi tạo]: Dùng biến Xt Ft để lưu lại nghiệm tốt trình tìm nghiệm (Ft = f(Xt)) – Xt = () – Ft = + • Bước [Quay lui]: Dùng phương pháp quy lui để xét tất nghiệm có tốn – Khi tìm nghiệm, ta so sánh f(X) với Ft Nếu Ft > f(X) ta lưu nghiệm tốt lại  Xt = X 16 Phương pháp • Bước [Nhánh cận]: – Trong trình xây dựng nghiệm, giả sử xây dựng nghiệm gồm k thành phần X=(x1, x2, …, xk) – Bây ta dự định mở rộng nghiệm thành (x1, x2, …, xk, xk+1) ta biết nghiệm mở rộng (x1, x2, …, xk, xk+1, …) tốt Ft (nghĩa g(x1, x2, …, xk, xk+1, …) > Ft) ta khơng cần mở rộng (x1, x2, …, xk), cắt nghiệm (nhánh) không cần thiết 17 Phương pháp  Nhận xét • Phương pháp nhánh cận khơng qt qua tồn nghiệm có tốn • Khó khăn phương pháp nhánh cận làm đánh giá nghiệm mở rộng (cận) Nếu đánh giá tốt bỏ nhiều nghiệm không cần thiết phải xét (nhánh) 18 Sơ đồ cài đặt Sơ đồ void BranchAndBound1(int i) { if (thỏa điều kiện tốn F) { Tìm nghiệm Cập nhật Xt Ft } else for (j  Di) { xi = j; if (g(x1, x2, …, xi) < Ft) BranchAndBound1(i+1); } } 19 Sơ đồ cài đặt Sơ đồ void BranchAndBound2(int i) { for (j  Di) { xi = j; if (thỏa điều kiện toán F) { Tìm nghiệm Cập nhật Xt Ft } else if (g(x1, x2, …, xi) < Ft) BranchAndBound2(i+1); } } 20 Ví dụ:  Ví dụ [Bài tốn người du lịch – Traveling Salesman Problem – TSP] • Mơ hình tốn: – Một hành trình hốn vị X=(x(1), x(2), …, x(n)) n số {1, 2, …, n} – Hàm mục tiêu f ( X ) c x (1), x ( 2)  c x ( ), x ( 3)   c x ( n  1), x ( n )  c x ( n ), x (1) • Khơng tính tổng quát: Chúng ta xuất phát từ thành phố số f ( X ) c1, x ( )  c x ( ), x ( 3)   c x ( n  1), x ( n )  c x ( n ),1 21 Ví dụ:  Tìm cận g(x1, x2, …, xk) • Cách 1: g(x1, x2, …, xk) = f(x1, x2, …, xk) • Thuật tốn: – Bước [Khởi động]: Ft=+ – Bước [Quay lui] – Bước [Nhánh cận]: Với bước thử xi kiểm tra độ dài đường đến lúc có nhỏ Ft khơng Nếu khơng nhỏ chọn giá trị khác cho xi 22 Ví dụ: cài đặt void TSP1(int i) { } 23 Ví dụ:  Tìm cận g(x1, x2, …, xk) • Cách 2: – Gọi cmin = {cij} độ dài đoạn đường nhỏ thành phố – Giả sử qua k thành phố X=(x1, x2, …, xk) Độ dài đường qua k thành phố T  f ( X ) c1, x ( )  cx ( ), x ( 3)   c x ( k  1), x ( k ) – Cần phải qua (n-k) thành phố nữa, hay phải qua (n-k+1) đoạn đường, đoạn đường có khoảng cách khơng cmin – Cận dưới: g(x1, x2, …, xk) = T + (n-k+1)cmin 24 Ví dụ: • Thuật tốn: – Bước [Khởi động]: Ft=+ – Bước [Quay lui] – Bước [Nhánh cận]: Với bước thử xi kiểm tra T+(n-k+1)*cmin có nhỏ Ft khơng Nếu khơng nhỏ chọn giá trị khác cho xi 25 Ví dụ: cài đặt void TSP2(int i) { } 26 Tóm tắt chương 27 ... ( X ) X Bài tốn tối ưu  Ví dụ [Bài tốn phân cơng – Job Assignment Problem – JAP] Có n cơng việc n nhân viên Gọi cij chi phí để trả cho nhân viên i làm công việc j u cầu: Tìm cách phân cơng n... cij=cji) Yêu cầu: Tìm hành trình ngắn cho phép viếng thăm n thành phố, thành phố viếng thăm lần quay thành phố ban đầu Bài toán tối ưu  Mơ hình tốn học: • Một hành trình hoán vị X=(x(1), x(2),... cho f(X)  (max) Bài toán tối ưu  Nếu gọi X* phương án tốt (tối ưu) X * arg f ( X ) X X * arg max f ( X ) X  f* = f(X*) gọi giá trị tối ưu toán Bài toán tối ưu  Ví dụ [Bài tốn người du lịch

Ngày đăng: 21/05/2021, 12:38