1. Trang chủ
  2. » Cao đẳng - Đại học

BÀI TOÁN TỐI ƯU quy hoạch động

21 932 6

Đ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 21
Dung lượng 502,63 KB

Nội dung

Bài toán cái túi 0-1 Một tên trộm đột nhập cửa hàng tìm thấy n đồ vật có trọng lượng và giá trị khác nhau.. Tên trộm mang theo cái túi có trọng lượng tối đa là M, M nguyên.. Hãy chọn

Trang 1

II BÀI TOÁN TỐI ƯU quy hoạch động

1 Bài toán cái túi 0-1

Một tên trộm đột nhập cửa hàng tìm thấy n đồ vật có trọng lượng và giá trị khác

nhau Tên trộm mang theo cái túi có trọng lượng tối đa là M, M nguyên

Hãy chọn các đồ vật mà tên trộm có thể cho vào túi mang đi sao cho tổng giá trị

là lớn nhất

Giải

Ký hiệu w(i) là trọng lượng vật i,

i=1 n

v(i) là giá trị vật i, i=1 n

Mô hình toán học của bài toán là bài toán quy hoạch tuyến tính nhị phân:

Nếu đồ vật thứ i không được chọn, thì:

Trang 2

F(i, L) = F(i -1, L) Nếu đồ vật thứ i được chọn, thì:

F(i, L) = F(i -1, L – w(i)) + v(i)

 F(i, L) = max{ F(i -1, L); F(i -1, L – w(i)) + v(i)}

- Điều kiện đầu :

Trang 3

1 0

2 0

: :

- Sử dụng công thức truy hồi tính toán F(i,L) theo thứ tự i=1,2,…,n

 Truy vết tìm phương án tối ưu

Tra bảng: F(n,M) là giá trị lớn nhất

Bắt đầu từ ô F(n, M) trên dòng n ta dò ngược về dòng 0 theo nguyên tắc:

• Nếu F(i,L) > F(i–1,L), thì đồ vật thứ i được chọn, ta truy tiếp ô F(i1, Lw(i))

• Nếu F(i,L) = F(i–1,L), thì đồ vật thứ i không được chọn, ta truy tiếp ô F(i1,L)

Trang 4

Truy vết tìm phương án tối ưu

Các đồ vật được chọn là: 5, 3, 2, 1 Giá trị tối ưu F(5,13)=16

if (w[i] <= L && F[i, L] < F[i-1, L - w[i]] + v[i])

F[i, L] = F[i-1, L - w[i]] + v[i];

}

}

 Thủ tục truy vết

void TruyVet(F[0 n][0 M])

Trang 6

2 Bài toán cái túi 0-n

Một tên trộm đột nhập cửa hàng tìm thấy n loại đồ vật có trọng lượng và

giá trị khác nhau Tên trộm mang theo cái túi có trọng lượng tối đa là M, M nguyên Hãy chọn các đồ vật mà tên trộm có thể cho vào túi mang đi sao cho tổng giá trị là lớn nhất Mỗi loại đồ vật có thể lấy nhiều cái

Giải

Ký hiệu w(i) là trọng lượng loại đồ vật i,

i=1 n

v(i) là giá trị loại đồ vật i, i=1 n

Mô hình toán học của bài toán là bài toán quy hoạch tuyến tính nguyên: Tìm

vectơ x = [x(1), …, x(n)] thỏa :

f(x) = v(1).x(1)+v(2).x(2)+ … + v(n).x(n) ->max

w(1).x(1)+w(2).x(2)+ … + w(n).x(n) <=M

x(i) >=0 và nguyên, với mọi i=1,…,n

Với các giá trị i và L: i = 0, 1, 2, , n và L = 0, 1, 2, , M Gọi F(i,L) là tổng giá trị lớn nhất có thể chọn trong i đồ vật (1, , i) với trọng lượng tối đa L

 Lập công thức truy hồi

Nếu loại đồ vật i không được chọn, thì:

F(i, L) = F(i-1, L) Nếu có k đồ vật loại i được chọn: (1 <= k <= L/w[i])

F(i, L) = F(i-1, L – w[i]*k) + v[i]*k

Do đó:

Trang 7

F(i, L) = max{F(i-1, L – w[i]*k) + v[i]*k | k thuộc [0, L/w[i]]}

Ký hiệu s(i, L), i=1 n, L=1 M, là giá trị k thuộc [0, L/w[i]] làm cho biểu

n

- Điền giá trị đầu: F(i, L)

Trang 8

- Sử dụng công thức truy hồi tính toán F(i,L), s(i,L) theo thứ tự i=1,2,…,n

 Truy vết tìm phương án tối ưu

Bắt đầu từ ô s(n, M) trên dòng n ta dò ngược về

Loại đồ vật i không được chọn,

– Truy tiếp ô s(i-1, L)

Trang 10

Truy ngược lên ô s(4-1,13-5*2) = s(3,3) = 0, ta có x3 = 0

Truy ngược lên ô s(3-1,3) = s(2,3) = 0, ta có x2 = 0

Truy ngược lên ô s(2-1,3) = s(1,3) = 1, ta có x1 = 1

Đến đây ta nhận được phương án tối ưu:

(1, 0, 0, 5, 0) với trị tối ưu F(5,13) = 19

if (F[i, L] < F[i-1, L - w[i]*k] + v[i]*k)

{ F[i, L] = F[i-1, L - w[i]*k] + v[i]*k;

s[i, L] = k;

} }

Trang 11

3 Bài toán dãy con chung lớn nhất

Cho X = x1, x2, …, xm và Y = y1, y2, …, yn Hãy tìm dãy con chung lớn nhất Z của X và Y, ký hiệu LCS(X,Y)

 Ví dụ

 Lập công thức truy hồi

- Xác định tham số

Bài toán con có 2 tham số (i, j) là các tiền tố x1, x2, …, xi, với i ≤ m và y1, y2,

…, yj, với j ≤ n của 2 dãy X và Y Có thể phát biểu lại bài toán như sau: Hãy tìm dãy con chung dài nhất của 2 dãy x1, x2, …, xi và y1, y2, …, yj - Công thức

+ Với bài toán con (1, 1) nếu x1 = y1 thì độ dài dãy Z là 1, ngược lại là 0

+ Với bài toán con (i, j) thì:

Nếu xi = yj, thì độ dài dãy Z sẽ là độ dài dãy con chung dài nhất thu được

từ bài toán con (i – 1, j -1) thêm một phần tử chung nữa

Nếu xi ≠ yj, thì độ dài dãy Z, hoặc là độ dài dãy con chung dài nhất thu

được từ bài toán con (i – 1, j) hoặc là từ bài toán con (i, j - 1), dãy nào dài hơn

Trang 12

thì ch ọ

Trang 14

- Sử dụng công thức truy hồi tính toán f(i,j) theo thứ tự dòng i=1,2,…,m

 Truy vết tìm phương án tối ưu

Gọi x[1 m], y[1 n] là 2 dãy đầu vào

Bắt đầu từ ô [m,n] trên dòng m ta dò ngược về dòng 0 hoặc cột 0 theo

nguyên tắc:

Nếu x[i] = y[j], thì phần tử x[i] được chọn, ta truy tiếp ô [i-1,j-1]

Ngược lại, tức x[i]0= y[j], nếu f(i,j) = f(i-1,j), thì truy đến ô [i-1,j], ngược lại, thì truy đến ô [i,j-1]

Trang 17

Các phần tử được chọn là: x[7]=y[6]=A, x[4]=y[5]=B, x[3]=y[3]=C,

x[2]=y[1]=B Dãy con chung dài nhất là BCBA với độ dài tối ưu f(7,6)=4

Trang 18

 Thủ tục truy vết tìm lời giải

void tracking(int m,int n)

4 Bài toán đổi tiền

Cho số tiền S, và n loại tiền với các mệnh giá a[1], a[2],…, a[n], hãy tìm

phương án đổi số tiền S sao cho số tờ tiền dùng ít nhất

Ví dụ: n = 3, S = 13

Số tờ tiền ít nhất là 4: 1 tờ loại 1, 1 tờ loại 2 và 2 tờ loại 3

 Lập công thức truy hồi

Trang 19

- Xác định tham số

Gọi t[i] là số tờ tiền cần dùng ít nhất để đổi số tiền i Vậy kết quả bài toán cần tìm là t[S]

Bài toán con t[i] có 1 tham số i = 1, …, S

Công thức truy hồi

Ta lập công thức tính t[i] theo các giá trị trước nó

Giả sử i >= a[k] và chọn tờ tiền a[k] để đổi Khi đó, rõ ràng là

t[i] <= t[i-a[k]]+1

Suy ra

t[i] = 1 + min{t[i -a[k]] | k=1, …, n & i >=a[k]}

- Giá trị đầu: Hiển nhiên t[0] = 0

Ngoài ra, nếu không đổi được số tiền i, thì t[i] = vô cùng

- Sử dụng công thức truy hồi tính toán t[i] và u[i] theo thứ tự i=1,2,…,S

• Truy vết tìm phương án tối ưu

Trang 20

Bắt đầu từ ô u[S] ta dò ngược về u[0] theo nguyên tắc:

Nếu u[i] = k, thì tờ tiền a[k] được chọn, ta truy tiếp ô u[ia[k]]

Truy vết tìm phương án tối ưu

Kết quả: Số tờ tiền ít nhất là t[13] = 4: 1 tờ loại 1, 1 tờ loại 2 và 2 tờ loại 3

Trang 21

for(i=1 ; i<=S ; i++)

{t[i] = +vôcug ; u[i] = 0 ;}

//t[i] = 1 + min{t[i-a[k]] | k=1, …, n & i>=a[k]}

for(i=1 ; i<=S ; i++ )

for(k=1 ;k<=n ;k++)

if ((i >= a[k]) && (1+t[i-a[k]) < t[i]))

{t[i] = 1+t[i-a[k] ; u[i] = k ;} }

Ngày đăng: 27/05/2017, 13:30

TỪ KHÓA LIÊN QUAN

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

TÀI LIỆU LIÊN QUAN

w