Thông tin tài liệu
KHOA CÔNG NGHỆ THÔNG TIN MÔN: PHÂN TÍCH ĐÁNH GIÁ THUẬT TOÁN BÀI TẬP LỚN ĐỀ TÀI: Phương pháp quy hoạch động Giải toán ba lô không hạn chế: cho n loại đồ vật có khối lượng w1, , wn có giá trị v1, ,vn Xếp đồ vật vào ba lô có sức T cho tổng giá trị lớn Giả thiết T, wi, vi, i=1, ,n, số nguyên dương Giáo viên hướng dẫn : Đào Thanh Tĩnh Sinh viên thực : Lê Hoàng Phương - 13870819 Lớp : HTTT3 - K25B Hà Nội, 28 tháng năm 2014 Bài toán ba lô không giới hạn GIỚI THIỆU Bài toán xếp ba lô (còn có tên gọi toán túi) toán tối ưu hóa tổ hợp Bài toán đặt tên từ vấn đề chọn quan trọng nhét vừa vào ba lô(với giới hạn khối lượng) để mang theo chuyến Sao cho tổng giá trị đồ vật túi mang theo lớn Quy hoạch động thực chất phương pháp cải tiến phương pháp giải vấn đề theo hướng phân rã Cả dựa nguyên lý "chia để trị" Nghĩa ta chia toán ban đầu thành toán nhỏ toán đủ nhỏ để tìm nghiệm.Giải thuật là: giải thuật tham lam (Greedy) Quy hoạch động (Dynamic progaming) Từ đưa đánh giá độ phức tạp thuật toán lựa chọn phương án tối ưu Xin chân thành cám ơn thầyNguyễn Đức Nghĩa giúp đỡ chúng em thực tập Hà Nội tháng 05 năm 2014 12/13 Bài toán ba lô không giới hạn Mục Lục 12/13 Bài toán ba lô không giới hạn Quy hoạch động Giải toán cách kết hợp giải pháp toán Điểm khác biệt thuật toán quy hoạch động giải tất toán lần sau ghi kết chúng bảng, tránh việc phải tính lại kết toán gặp lại Nguyên lý tối ưu Bellman - Quy hoạch động trình điểu khiển tối ưu với trạng thái bắt đầu Mọi trạng thái A thuộc trình tối ưu - Tư tưởng chính: Thực toán trước, sử dụng kết để giải toán lớn - Hướng tiếp cận: + Giải toán theo công thức truy hồi + Giải toán trước + Dựa vào toán để giải toán lớn gặp toán cần giải - Tổng quát: + Giải toán qua N bước + Giải toán cho tổng chi phí -> N-1 từ N-1 -> N tối ưu Thuật toán quy hoạch động Bước 1: Xây dựng công thức truy hồi Giả sử: Chia toán thành N giai đoạn 1->N Xác định F(1) - sở quy nạp - Gọi (i) hàm số xác định giá trị tối ưu, tính đến giá trị thứ i -> F(n) nghiệm toán - Đối với toán + Tìm Min: F(N) = Min{F(i), F(j)} i = 1, N-1 j = N-1, N 12/13 Bài toán ba lô không giới hạn + Tìm Max: F(N) = Max{F(i), F(j)} i = 1, N-1 j = N-1, N Bước 2: Tìm sở quy hoạch động Để chia toán lớn thành toán có cách giải phải yêu cầu phải biến đổi số toán trường hợp sở quy nạp cách thêm biến phụ, sở quy hoạch động Bước 3: Lấp đầy bảng phương án, dựa vào sở quy hoạch động, công thức quy hoạch động Giải toán Bước 4: Truy vết Tìm nghiệm toán Bài toán ba lô - không giới hạn: unbounded knapsack problem • Có N đồ vật sau: • • Đồ vật thứ i có cân nặng: Wi • Đồ vật thứ i có giá trị là: Vi Không giới hạn: Có đủ – cung ứng đủ đồ vật loại khác N đồ vật • Có ba lô với sức chứa T: 12/13 Bài toán ba lô không giới hạn • Vấn đề: Xếp đồ vật vào ba lô có sức T cho tổng giá trị lớn Giả thiết T, wi, vi, i=1, ,n, số nguyên dương Giải toán trường hợp sau: Mỗi vật chọn nhiều lần (không hạn chế số lần) Ví dụ: 12/13 Bài toán ba lô không giới hạn InputData: file văn Bag.inp Dòng 1: n, T cách dấu cách n dòng tiếp theo: Mỗi dòng gồm số Wi, Vi, chi phí giá trị đồ vật thứ i OutputData: file văn bag.out: Ghi giá trị lớn tên trộm lấy Example Giải toán 3.1 Ý tưởng tiếp cận toán ba lô–không giới hạn quy hoạch động Phân chia toán vấn đề nhỏ Ta nhận thấy rằng: Giá trị ba lô phụ thuộc vào yếu tố: Có vật xét trọng lượng lại ba lô chứa được, có đại lượng biến thiên Cho nên hàm mục tiêu phụ thuộc vào hai đại lượng biến thiên Do bảng phương án bảng chiều 12/13 Bài toán ba lô không giới hạn Gọi F[i,j] tổng giá trị lớn ba lô xét từ vật đến vật i trọng ba lô chưa vượt j Với giới hạn j, việc chọn tối ưu số vật {1,2,…,i-1,i} để có giá trị lớn có hai khả năng: - Nếu không chọn vật thứ i F[i,j] giá trị lớn chọn số vật {1,2,…,i-1} với giới hạn trọng lượng j, tức là: F[i,j] := F[i-1,j] - Nếu có chọn vật thứ i (phải thỏa điều kiện W[i] ≤ j) F[i,j] giá trị vật thứ i V[i] cộng với giá trị lớn có cách chọn số vật {1,2,…,i} (vì vật i chọn tiếp) với giới hạn trọng lượng j-W[i] tức mặt giá trị thu được: F[i,j] := V[i]+F[i,j-W[i]] Do có công thức truy hồi sau: F[0,j] = (hiển nhiên) – Bài toán nhỏ F[i,j] = max(F[i-1,j], V[i]+F[i,j-W[i]] Với giải pháp giải toán ba lô – không giới hạn giải toán nhỏ hơn: Sơ đồ: Bước chia: tạo nên vấn đề nhỏ giải hỗ trợ giải toán gốc 12/13 Bài toán ba lô không giới hạn Mỗi toán giải quay trở lại hỗ trợ giải toán gốc: 12/13 Bài toán ba lô không giới hạn Bước lấp đầy phương án Truy vết: Ta nhận thấy: có k >= đồ vật xếp vào bao lô T >= Wi Định nghĩa: M(v[], w[], T) = giá trị lớn của: v1×x1 + v2×x2 + + vN×xN subject to: w1×x1 + w2×x2 + + wN×xN ≤ T Tường hợp sở toán ba lô – không giới hạn: Khi Ba lô đầy, xếp vật vào túi Bởi vì, tổng giá trị ba lô lúc = Hay: M(v, w, 0) = 0; (Không thể xếp thứ vào túi ba lô sứ chứa) 3.2 Bảng phương án Ta xây dựng bảng phương án dựa công thức truy hồi Để kiểm tra kết có xác hay không (nếu không xác xây dựng lại hàm mục tiêu) Thông qua cách xây dựng hàm mục tiêu bảng phương án định hướng việc truy vết Ví dụ giải toán cụ thể: 12/13 Bài toán ba lô không giới hạn Bảng phương án: Chúng ta chọn vật (3 lần) vật (3 lần) 3.3 Truy vết Trường hợp 1: Trong bảng phương án F[n,T] giá trị lớn thu chọn n vật với giới hạn trọng lượng M Nếu f[n,T]=f[n-1,T] tức không chọn vật thứ n, ta truy f[n-1,T] Còn f[n,T]≠f[n-1,T] ta thông báo phép chọn tối ưu có chọn vật thứ n truy f[n-1,T-Wn] Trường hợp 2: Trong bảng phương án F[n,T] giá trị lớn thu chọn n vật với giới hạn trọng lượng M Nếu f[n,T]=f[n-1,T] tức không chọn vật thứ n, ta truy f[n-1,T] Còn f[n,T] ≠ f[n-1,T] ta thông báo phép chọn tối ưu có chọn vật thứ n truy f[n,T-Wn] 12/13 Bài toán ba lô không giới hạn 3.4 Cài đặt M( v[], w[], C ) { int[] sol, mySol, myFinalSol; /* ============================================== Chia nhỏ toán để giải ============================================== */ /* -Giải toán nhỏ dễ giải */ for ( i = 1; i ≤ N; i++ ) { if ( C ≥ w[i] ) sol[i] = M( v, w, C-w[i] ); // Sức chứa ba lô giảm w[i] đồ vật thứ i xếp túi else sol[i] = 0; // không đủ chứa vật thứ i } /* Sử dụng giải pháp toản nhỏ để giải toán gốc */ for ( i = 1; i ≤ N; i++ ) { if ( C ≥ w[i] ) mySol[i] = sol[i] + v[i]; // Giá trị cân nặng ba lô tăng thêm v[i]vì đồ vật thứ I xếp túi else mySol[i] = 0; // không đủ chứa vật thứ i } /* ************************* Tìm giá trị tốt (maximum) ************************* */ myFinalSol = mySol[1]; for ( i = 2; i ≤ N; i++ ) if ( mySol[i] > myFinalSol ) myFinalSol = mySol[i]; } return myFinalSol; 12/13 Bài toán ba lô không giới hạn Đánh giá độ phức tạp: Các vòng lặp giải thuật là: for ( C = 1; C = đồ vật xếp vào bao lô. . .Bài toán ba lô không giới hạn GIỚI THIỆU Bài toán xếp ba lô (còn có tên gọi toán túi) toán tối ưu hóa tổ hợp Bài toán đặt tên từ vấn đề chọn quan trọng nhét vừa vào ba lô( với giới hạn khối
Ngày đăng: 03/10/2017, 00:45
Xem thêm: Phân tích và đánh giá thuật toán phương pháp quy hoạch động, giải bài toán ba lô không hạn chế , Phân tích và đánh giá thuật toán phương pháp quy hoạch động, giải bài toán ba lô không hạn chế