Tài liệu hạn chế xem trước, để xem đầy đủ mời bạn chọn Tải xuống
1
/ 13 trang
THÔNG TIN TÀI LIỆU
Cấu trúc
Giới thiệu
3.1. Ý tưởng tiếp cận bài toán ba lô–không giới hạn bằng quy hoạch động
3.2. Bảng phương án
3.3. Truy vết
3.4. Cài đặt
Nội dung
KHOA CÔNG NGHỆ THÔNG TIN MÔN: PHÂNTÍCHĐÁNHGIÁTHUẬTTOÁNBÀI TẬP LỚN ĐỀ TÀI: Phươngphápquyhoạch động Giảitoánbalôkhônghạ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 balô 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àitoánbalôkhông giới hạn GIỚI THIỆU Bàitoán xếp balô (còn có tên gọi toán túi) toán tối ưu hóa tổ hợp Bàitoá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 Quyhoạch động thực chất phươngpháp cải tiến phươngphápgiả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ảithuật tham lam (Greedy) Quyhoạch động (Dynamic progaming) Từ đưa đánhgiá độ phức tạp thuậttoá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àitoánbalôkhông giới hạn Mục Lục 12/13 Bàitoánbalôkhông giới hạnQuyhoạch động Giảitoán cách kết hợp giảipháptoán Điểm khác biệt thuậttoánquyhoạ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 - Quyhoạ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ảitoán lớn - Hướng tiếp cận: + Giảitoán theo công thức truy hồi + Giảitoán trước + Dựa vào toán để giảitoán lớn gặp toán cần giải - Tổng quát: + Giảitoán qua N bước + Giảitoán cho tổng chi phí -> N-1 từ N-1 -> N tối ưu Thuậttoánquyhoạ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àitoánbalô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ở quyhoạ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ở quyhoạch động Bước 3: Lấp đầy bảng phương án, dựa vào sở quyhoạchđộng, công thức quyhoạch động Giảitoán Bước 4: Truy vết Tìm nghiệm toánBàitoánbalô - 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ó balô với sức chứa T: 12/13 Bàitoánbalôkhông giới hạn • Vấn đề: Xếp đồ vật vào balô 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ảitoán trường hợp sau: Mỗi vật chọn nhiều lần (không hạnchế số lần) Ví dụ: 12/13 Bàitoánbalô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ảitoán 3.1 Ý tưởng tiếp cận toánba lô–không giới hạnquyhoạch động Phân chia toán vấn đề nhỏ Ta nhận thấy rằng: Giá trị balô phụ thuộc vào yếu tố: Có vật xét trọng lượng lại balô 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àitoánbalôkhông giới hạn Gọi F[i,j] tổng giá trị lớn balô xét từ vật đến vật i trọng balô 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àitoán nhỏ F[i,j] = max(F[i-1,j], V[i]+F[i,j-W[i]] Với giảiphápgiảitoánbalô – không giới hạngiảitoán nhỏ hơn: Sơ đồ: Bước chia: tạo nên vấn đề nhỏ giải hỗ trợ giảitoán gốc 12/13 Bàitoánbalôkhông giới hạn Mỗi toángiải quay trở lại hỗ trợ giảitoán gốc: 12/13 Bàitoánbalô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ánbalô – không giới hạn: Khi Balô đầy, xếp vật vào túi Bởi vì, tổng giá trị balô lúc = Hay: M(v, w, 0) = 0; (Không thể xếp thứ vào túi balô 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ảitoán cụ thể: 12/13 Bàitoánbalô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àitoánbalô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 balô 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ảipháptoản nhỏ để giảitoá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 balô 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àitoánbalôkhông giới hạnĐánhgiá độ phức tạp: Các vòng lặp giảithuậ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