1. Trang chủ
  2. » Giáo án - Bài giảng

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ế

13 903 5
Tài liệu đã được kiểm tra trùng lặp

Đ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 13
Dung lượng 266,29 KB

Nội dung

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.. Bài toán được đặt tên từ vấn đề chọn những gì quan trọng có thể nhét vừa vào trong một cái ba lôvới g

Trang 1

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 bài toán ba lô không hạn chế: cho n loại đồ vật có khối lượng w1, , wn và có giá trị v1, ,vn Xếp đồ vật vào ba lô có sức chứ T sao cho tổng giá trị lớn nhất Giả thiết T, wi, vi, i=1, ,n, đều là các số nguyên dương

Giáo viên hướng dẫn : Đào Thanh Tĩnh Sinh viên thực hiện : Lê Hoàng Phương - 13870819

Hà Nội, 28 tháng 5 năm 2014

Trang 2

GIỚI THIỆU

Bài toán xếp ba lô (còn có tên gọi là bài toán cái túi) là một bài toán tối ưu hóa

tổ hợp Bài toán được đặt tên từ vấn đề chọn những gì quan trọng có thể nhét vừa vào trong một cái ba lô(với giới hạn khối lượng) để mang theo trong một chuyến đi Sao cho tổng giá trị đồ vật trong túi mang theo được là lớn nhất

Quy hoạch động thực chất là một phương pháp cải tiến hơn của phương pháp giải quyết vấn đề theo hướng phân rã Cả 2 đều dựa trên nguyên lý "chia để trị" Nghĩa là ta chia bài toán ban đầu thành các bài toán nhỏ hơn và cứ như vậy cho đến khi các bài toán đủ nhỏ để có thể tìm ra nghiệm.Giải thuật là: giải thuật tham lam (Greedy) và Quy hoạch động (Dynamic progaming) Từ đó đưa ra các đánh giá về độ phức tạp của thuật toán và 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 hiện bài tập này

Hà Nội tháng 05 năm 2014

Trang 3

Mục Lục

Giới thiệu 1

1 Quy hoạch động 3

2 Bài toán cái ba lô - không giới hạn: unbounded knapsack problem 4

3 Giải quyết bài toán 6

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 6 3.2 Bảng phương án 9

3.3 Truy vết 10

3.4 Cài đặt 11

4 Đánh giá độ phức tạp: 12

Trang 4

1 Quy hoạch động

Giải quyết các bài toán bằng cách kết hợp các giải pháp của các bài toán con Điểm khác biệt là một thuật toán quy hoạch động giải quyết tất cả các bài toán con đúng một lần và sau đó ghi kết quả của chúng trong một bảng, như vậy tránh được việc phải tính lại các kết quả khi bài toán con được gặp lại

Nguyên lý tối ưu Bellman

- Quy hoạch động là quá 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 bất kỳ thuộc quá trình này cũng tối ưu

- Tư tưởng chính: Thực hiện các bài toán con trước, sử dụng các kết quả này để giải bài toán lớn

- Hướng tiếp cận:

+ Giải bài toán theo công thức truy hồi

+ Giải các bài toán con trước

+ Dựa vào bài toán con để giải bài toán lớn hơn cho đến khi gặp bài toán cần giải

- Tổng quát:

+ Giải bài toán qua N bước

+ Giải bài toán sao cho tổng chi phí 1 -> N-1 và từ N-1 -> N là 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 bài toán thành N giai đoạn 1->N

Xác định F(1) - cơ sở quy nạp

- Gọi (i) là hàm số xác định giá trị tối ưu, tính đến giá trị thứ i

-> F(n) là nghiệm của bài toán

- Đối với bài toán

+ Tìm Min: F(N) = Min{F(i), F(j)}

i = 1, N-1

j = N-1, N

Trang 5

+ Tìm Max: F(N) = Max{F(i), F(j)}

i = 1, N-1

j = N-1, N

Bước 2: Tìm cơ sở quy hoạch động

Để chia bài toán lớn thành các bài toán con có cùng một cách giải thì phải yêu cầu phải biến đổi một số bài toán con ở trường hợp cơ sở quy nạp bằng cách thêm biến phụ, chính là cơ sở quy hoạch động

Bước 3: Lấp đầy bảng phương án, dựa vào cơ sở quy hoạch động, công thức

quy

hoạch động Giải bài toán

Bước 4: Truy vết

Tìm nghiệm của bài toán

2 Bài toán cái ba lô - không giới hạn: unbounded knapsack problem

 Có N đồ vật như sau:

Đồ vật thứ i có giá trị là: Vi

 Không giới hạn:

Có đủ – cung ứng đủ đồ vật của từng loại khác nhau trong N

đồ vật trên

 Có 1 ba lô với sức chứa T:

Trang 6

 Vấn đề:

Xếp đồ vật vào ba lô có sức chứ T sao cho tổng giá trị lớn nhất Giả thiết T, wi, vi, i=1, ,n, đều là các số nguyên dương

Giải quyết bài toán trong trường hợp sau: Mỗi vật được chọn nhiều lần (không hạn chế số lần)

Ví dụ:

Trang 7

InputData: file văn bản Bag.inp

Dòng 1: n, T cách nhau ít nhất một dấu cách

n dòng tiếp theo: Mỗi dòng gồm 2 số Wi, Vi, là chi phí và giá trị đồ vật thứ i

OutputData: file văn bản bag.out: Ghi giá trị lớn nhất tên trộm có thể lấy

Example

3 Giải quyết bài toán

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

Phân chia bài toán về các vấn đề nhỏ hơn Ta nhận thấy rằng:

Giá trị của cái ba lô phụ thuộc vào 2 yếu tố: Có bao nhiêu vật đang được xét

và trọng lượng còn lại cái ba lô có thể chứa được, do vậy chúng ta có 2 đại lượng biến thiên Cho nên hàm mục tiêu sẽ phụ thuộc vào hai đại lượng biến thiên Do vậy bảng phương án của chúng ta sẽ là bảng 2 chiều

Trang 8

Gọi F[i,j] là tổng giá trị lớn nhất của cái ba lô khi xét từ vật 1 đến vật i và trọng của cái ba lô chưa vượt quá j Với giới hạn j, việc chọn tối ưu trong số các vật {1,2,…,i-1,i} để có giá trị lớn nhất sẽ có hai khả năng:

- Nếu không chọn vật thứ i thì F[i,j] là giá trị lớn nhất có thể chọn trong số các vật {1,2,…,i-1} với giới hạn trọng lượng là 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) thì F[i,j] bằng giá trị vật thứ i là V[i] cộng với giá trị lớn nhất có thể có được bằng cách chọn trong số các vật {1,2,…,i} (vì vật i vẫn có thể được chọn tiếp) với giới hạn trọng lượng j-W[i] tức là về mặt giá trị thu được:

F[i,j] := V[i]+F[i,j-W[i]]

Do vậy chúng ta có công thức truy hồi như sau:

F[0,j] = 0 (hiển nhiên) – Bài toán con nhỏ nhất

F[i,j] = max(F[i-1,j], V[i]+F[i,j-W[i]]

Với giải pháp giải quyết bài toán ba lô – không giới hạn là giải quyết các bài toán nhỏ hơn:

Sơ đồ:

Bước chia: tạo nên 1 vấn đề nhỏ được giải quyết và có thể hỗ trợ giải quyết bài toán gốc

Trang 9

Mỗi 1 bài toán con giải quyết sẽ quay trở lại hỗ trợ giải quyết bài toán gốc:

Trang 10

Bước lấp đầy các phương án và Truy vết:

Ta nhận thấy: sẽ có k >= 1 đồ vật được sắp xếp vào bao lô nếu T >= Wi

Định nghĩa:

M(v[], w[], T) = là giá trị lớn nhất của: v1×x1 + v2×x2 + + vN×xN

subject to: w1×x1 + w2×x2 + + wN×xN ≤ T

Tường hợp cơ sở của bài toán ba lô – không giới hạn:

Khi Ba lô đầy, không thể sắp xếp bất kỳ 1 vật nào vào túi Bởi vì, tổng giá trị của ba lô lúc đó = 0 Hay: M(v, w, 0) = 0; (Không thể sắp xếp bất kỳ thứ gì vào túi ba lô không có sứ chứa)

3.2 Bảng phương án

Ta xây dựng bảng phương án dựa trên công thức truy hồi trên Để kiểm tra kết quả có chính xác hay không (nếu không chính xác chúng ta 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 và bảng phương án chúng ta

sẽ định hướng việc truy vết

Ví dụ giải quyết bài toán cụ thể:

Trang 11

Bảng phương án:

Chúng ta có thể chọn vật 4 (3 lần) và vật 5 (3 lần)

3.3 Truy vết

Trường hợp 1: Trong bảng phương án F[n,T] chính là giá trị lớn nhất thu được khi chọn trong cả n vật với giới hạn trọng lượng là M

Nếu f[n,T]=f[n-1,T] thì tức là không chọn vật thứ n, ta truy về f[n-1,T] Còn nếu f[n,T]≠f[n-1,T] thì ta thông báo rằng phép chọn tối ưu có chọn vật thứ n và truy

về f[n-1,T-Wn]

Trường hợp 2: Trong bảng phương án F[n,T] chính là giá trị lớn nhất thu được khi chọn trong cả n vật với giới hạn trọng lượng là M

Nếu f[n,T]=f[n-1,T] thì tức là không chọn vật thứ n, ta truy về f[n-1,T] Còn nếu f[n,T] ≠ f[n-1,T] thì ta thông báo rằng phép chọn tối ưu có chọn vật thứ n và truy

về f[n,T-Wn]

Trang 12

3.4 Cài đặt

M( v[], w[], C )

{

int[] sol, mySol, myFinalSol;

/* ==============================================

Chia nhỏ bài toán để giải quyết

============================================== */

/*

Giải quyết những bài toán nhỏ dễ giải quyết hơn

- */

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ì đồ vật thứ i được xếp ở trong túi

else

sol[i] = 0; // không đủ chứa vật thứ i

}

/*

Sử dụng giải pháp của các bài toản nhỏ để giải quyết bà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 được xếp trong túi else

mySol[i] = 0; // không đủ chứa vật thứ i

}

/* *************************

Tìm giá trị tốt nhất (maximum)

************************* */

myFinalSol = mySol[1];

for ( i = 2; i ≤ N; i++ )

if ( mySol[i] > myFinalSol )

myFinalSol = mySol[i];

return myFinalSol;

}

Trang 13

4 Đánh giá độ phức tạp:

Các vòng lặp chính của giải thuật là:

for ( C = 1; C <= T ; C++ )

{

for ( i = 0; i < v.length ; i++ )

{

}

}

// T = sức chứa của túi

// v.length = số lượng đồ vật = N

Vì thế :

Thời gian chạy = O(T*N)

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

HÌNH ẢNH LIÊN QUAN

Bước 3: Lấp đầy bảng phương án, dựa vào cơ sở quy hoạch động, công thức - 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ế
c 3: Lấp đầy bảng phương án, dựa vào cơ sở quy hoạch động, công thức (Trang 5)
3.2. Bảng phương án - 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ế
3.2. Bảng phương án (Trang 10)
Bảng phương án: - 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ế
Bảng ph ương án: (Trang 11)

TỪ KHÓA LIÊN QUAN

TÀI LIỆU CÙNG NGƯỜI DÙNG

TÀI LIỆU LIÊN QUAN

w