Phân tích và đánh giá thuật toán sử dụng phương pháp quy hoạch động giải bài toán ba lô 0 1

12 659 0
Phân tích và đánh giá thuật toán sử dụng phương pháp quy hoạch động giải bài toán ba lô 0 1

Đ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

SỬ DỤNG PHƯƠNG PHÁP QUY HOẠCH ĐỘNG GIẢI BÀI TOÁN BA LƠ 0-1 Bài tốn xếp ba lơ (Knapsack problem) tốn tối ưu hóa tổ hợp (combinatorial optimization) Cho tập hợp phần tử, phần tử có trọng lượng giá trị khác nhau, xác định phần tử đưa vào tập hợp khác cho trọng lượng bé giới hạn cho trước, tổng giá trị phần tử lớn Tên toán bắt nguồn từ việc phải xếp đồ vật ba lô cho chứa nhiều đồ có giá trị Một cách phát biểu khác toán: Một tên trộm sau đột nhập vào nhà thấy có N loại đồ vật có kích thước giá trị khác Vật ta muốn mang đi, lại mang túi có dung lượng M (có thể chứa số đồ vật cho tổng kích thước nhỏ hay M) Vấn đề đặt cho tên trộm phải chọn lựa danh sách đồ vật mang cho tổng giá trị lấy cắp lớn Sơ lược Quy hoạch động (Dynamic programming) Ý tưởng để phát triển thuật toán quy hoạch động cho tốn xếp ba lơ: Bước 1: Cấu trúc: Tìm đặc điểm cấu trúc phương án tối ưu Phân rã vấn đề lớn thành nhiều vấn đề nhỏ Tìm liên kết cấu trúc phương án tối ưu giải pháp vấn đề nhỏ Bước 2: Nguyên tắc tối ưu: Định nghĩa giá trị phương án tối ưu phương pháp đệ quy Thể giải pháp vấn đề gốc giải pháp cho vấn đề nhỏ Bước 3: Tính từ lên (bottom-up computation): Tính tốn giá trị giải pháp tối ưu cách tính tốn từ lên cách sử dụng cấu trúc bảng Bước 4: Xây dựng giải pháp tối ưu: Tổng hợp giải pháp tối ưu thơng tin tính tốn từ vấn đề nhỏ Bước thường gộp chung lại Bài tốn xếp ba lơ dạng 0-1: Mỗi đồ vật có số lượng 1, tên trộm chọn lấy (1) không lấy (0) đồ vật Bài tốn xếp ba lơ 0-1 phát biểu dạng tốn học sau: Giả sử có n phần tử từ x1 đến xn, xi có giá trị vi trọng lượng wi Trọng lượng tối đa ba lô W Và ngầm định giá trị trọng lượng đồ vật không âm Để đơn giản hóa ngầm định giá trị đồ liệt kê theo danh sách tăng dần trọng lượng Phân rã vấn đề lớn thành nhiều vấn đề nhỏ: Chúng ta xây dựng mảng V[0 n, w] Trong i Cho nên ta loại bỏ giá trị trước Và cịn trống đơn vị dung lượng, ta xem tiếp sử dụng Item trước (Item 0) bỏ vừa vào ba lơ hay không? Giá trị V[0, 1] = câu trả lời Và bỏ vào ba lơ hai Item Item với tổng giá trị + Tất nhiên ta điền vào Keep[1, 4] Tiếp tục với ô V[1, 5] ta có bảng sau: V[i,w] w=0 0 0 0 5 5 Keep 0 0 0 0 1 Đối với dịng thứ 3: Item1 có v1=5 w1=3 Item2 có v2=3 w2=2 Đối với dịng thứ 3, ta làm tương tự dòng thứ Tuy nhiên cuối dịng thứ V[2, 5] phức tạp chút chứa Item Item V[2, 1] = Vì khơng có Item vừa ba lơ có dung lượng V[2, 2] = Vì có Item (v=3 w=2) vừa ba lơ V[2, 3] = Vì phần tử hành (Item 2) bỏ vừa vào ba lô, có giá trị nhỏ bỏ phần tử V[1, 3] =5, nên chọn phần tử bỏ vào ba lơ V[2, 4] = Lý V[2, 5] = Tương tự trên, ta chọn phần tử trước có giá trị cao phần tử hành, trống đơn vị, ta bỏ vào thêm V[2,2] = Tổng cộng có V[2, 5] = V[1, 5] + V[2,2] = Keep[2, 1] = Vì khơng chọn bỏ Item vào ba lơ Keep[2, 2] = Vì chọn bỏ Item vào ba lơ Keep[2, 3] = Vì phần tử hành Item không chọn, chọn phần tử V[1, 3] có giá trị cao bỏ vào ba lơ Keep[2, 4] = Vì tương tự Keep[2, 5] = Vì có chọn bỏ Item vào ba lơ, sau cịn trống đơn vị ta bỏ thêm V[1, 3] = vào Do ta giữ phương án V[i,w] w=0 0 0 0 3 5 5 5 Keep 0 0 1 0 0 Đối với dòng thứ 4: Ta sử dụng Item có giá trị Item1 có v1 = w1 = Item2 có v2 = w2 = Item3 có v3 = w3 = V[3, 1] = Vì bỏ vừa Item (v=4, w=1) V[3, 2] = Vì bỏ vừa Item V[3, 3] = Vì bỏ vừa Item 3(v=4, w=1), cịn trống đơn vị, bỏ thêm Item (v=3, w=2) Và lớn ô V[2, 3] = V[3, 4] = Vì bỏ vừa Item 3(v=4, w=1), cịn trống đơn vị, bỏ thêm Item (v=5, w=3) Và lớn ô V[2, 4] = V[3, 5] = Tương tự Keep[3, 1] = Vì chọn bỏ Item vào ba lơ Keep[3, 2] = Vì chọn bỏ Item vào ba lơ Keep[3, 3] = Vì chọn bỏ Item vào ba lô Keep[3, 4] = Vì chọn bỏ Item vào ba lơ Keep[3, 5] = Vì chọn bỏ Item vào ba lơ Dựa vào giá trị cuối bảng V (V[4,3] = 9) Ta biết ba lơ chứa tổng giá trị mà không vượt dung lượng ba lô V[i,w] w=0 0 0 0 5 5 5 Keep 0 0 1 1 1 1 0 0 Dựa vào mô tả ta tính tốn tập hợp cấu thành phương án tối ưu cho toán Ta có n=3 W=5 Xét Keep[3,5] = ta ta đưa Item vào tập hợp T Tiếp theo xét: Keep[3−1,W−w3] = Keep[2,4] Keep[2, 4] = ta khơng đưa Item vào tập hợp T Sau xét tiếp Keep[n−1,W−w3]=Keep[1,4] = Do ta đưa Item vào tập hợp T Cuối ta thấy kết cuối toán xếp ba lô sau: Giá trị lớn lấy Vmax = T= {1,3} CODE CHƯƠNG TRÌNH #include #include int main(int argc, char* argv[]) { // khai bao bien int w; // Khoi luong cua balo int n; // So luong vat cho vao balo int KL[500]; // mang luu khoi luong cua cac vat; int GT[500]; // mang luu gia tri cua cac vat; int HamKetQua[500][500]; int i;// số chay theo số vat : từ >n int j;// số chạy theo trọng lượng balo : từ > w /* Phần nhập liệu đầu vào -*/ // Nhập khối lượng balo Giả thiết khối lượng balo nằm tới 500 // số 500 thay đổi tùy theo ta định nghĩa { printf("Nhap khoi luong ma balo co the duoc:= "); scanf("%d",&w); } while (w500); // Nhập số lượng đồ vật { printf("So vat dung de cho vao balo:= "); scanf("%d",&n); } while (n500); for (i=0;i=1 nhỏ khối lượng balo, thỏa mãn nhập lại { printf("KT Dovat[%d]:=", i+1 ); scanf("%d", &KL[i]); } while (KL[i]w); // Phần dùng để nhập mảng giá trị túi // Giá trị đồ vật phải >=1, nhỏ nhập lại { printf("GT Dovat[%d]:=", i+1 ); scanf("%d", >[i]); } while (GT[i]

Ngày đăng: 03/10/2017, 00:46

Hình ảnh liên quan

Tuy nhiên bảng này không mô tả tập hợp con nào sẽ mang lại kết quả tối ưu nhất. Do đó chúng ta phải sử dụng một mảng Keep[i, w] để xác định tập hợp con T nào của các phần tử sẽ mang lại giá trị lớn nhất. - Phân tích và đánh giá thuật toán sử dụng phương pháp quy hoạch động giải bài toán ba lô 0 1

uy.

nhiên bảng này không mô tả tập hợp con nào sẽ mang lại kết quả tối ưu nhất. Do đó chúng ta phải sử dụng một mảng Keep[i, w] để xác định tập hợp con T nào của các phần tử sẽ mang lại giá trị lớn nhất Xem tại trang 3 của tài liệu.
Đầu tiên chúng ta cần kẻ 2 bảng (nói cách khác là tạo 2 array) như sau: - Phân tích và đánh giá thuật toán sử dụng phương pháp quy hoạch động giải bài toán ba lô 0 1

u.

tiên chúng ta cần kẻ 2 bảng (nói cách khác là tạo 2 array) như sau: Xem tại trang 4 của tài liệu.
Tiếp tục với ô V[1, 5] ta có được bảng như sau: - Phân tích và đánh giá thuật toán sử dụng phương pháp quy hoạch động giải bài toán ba lô 0 1

i.

ếp tục với ô V[1, 5] ta có được bảng như sau: Xem tại trang 5 của tài liệu.

Từ khóa liên quan

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

Tài liệu liên quan