1. Trang chủ
  2. » Luận Văn - Báo Cáo

ĐỀ tài CHUYÊN đề kỹ THUẬT QUY HOẠCH ĐỘNG

25 559 3

Đ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 25
Dung lượng 223 KB

Nội dung

Khoa CNTT Báo cáo Niên Luận 1 MẪU CHẤM NIÊN LUẬN TÊN ĐỀ TÀI: CHUYÊN ĐỀ KỸ THUẬT QUY HOẠCH ĐỘNG GIÁO VIÊN HƯỚNG DẪN: Th.s Trần Quốc Nghĩa SINH VIÊN THỰC HIỆN: Châu Đình Phong I .)HÌNH THỨC: (tối đa 1,0 điểm) Bìa: (tối đa 0,5 điểm) Các tiêu đề: Loại đồ án, Tên đề tài, Giáo viên hướng dẫn, Thông tin về sinh viên thực hiện, Năm thực hiện Bố cục: (tối đa 0,5 điểm) Trang nhận xét của GVHD và GV chấm. Mục lục: (cấu trúc chương, Mục, Tiểu mục.), Phụ lục: (nếu có), Tài liệu tam khảo. II .)NỘI DUNG: (tối đa 4,5 điểm) II.1 Giới thiệu (tối đa 0,5 điểm) Giới thiệu tổng quan Mục tiêu cần đạt: II.2 Lý thuyết: (tối đa 1,0 điểm) Các khái niệm sử dụng trong đề tài: Kết quả vận dụng lý thuyết vào đề tài: II.3 Ứng dụng: (tối đa 2,5 điểm) Kết quả/Lưu đồ Giới thiệu chương trình: II. 4 Kết luận: (tối đa 0,5 điểm) Nhận xét kết quả đạt được: Hạn chế Hướng phát triển: III .) CHƯƠNG TRÌNH DEMO: (tối đa 3,5 điểm) Giao diện: Hướng dẫn sử dụng: SVTH: Châu Đình Phong Trang 1 Khoa CNTT Báo cáo Niên Luận 1 Kết quả thực hiện đúng với kết quả của phần ứng dụng IV.) THƯỞNG: (tối đa 1,0 điểm) TỔNG CỘNG: Bạc Liêu, ngày tháng năm 2010 GV CHẤM SVTH: Châu Đình Phong Trang 2 Khoa CNTT Báo cáo Niên Luận 1 NHẬN XÉT CỦA GIÁO VIÊN  Trong quá trình học tập, chúng ta gặp rất nhiều các bài tập về Toán- Tin. Các bài tập dạng này rất phong phú và đa dạng. Thực tế chưa có thuật SVTH: Châu Đình Phong Trang 3 Khoa CNTT Báo cáo Niên Luận 1 toán hoàn chỉnh có thể áp dụng cho mọi bài toán. Tuy nhiên người ta đã tìm ra một số thuật toán chung như chia để trị, tham ăn, quay lui, Các thuật toán này có thể áp dụng để giải một lớp khá rộng các bài toán hay gặp trong thực tế. Trong bài viết này, tôi muốn đề cập với các bạn một thuật toán khác, đó là thuật toán quy hoạch động. Tư tưởng cơ bản của thuật toán là: Để giải một bài toán ta chia bài toán đó thành các bài toán nhỏ hơn có thể giải một cách dễ dàng. Sau đó kết hợp lời giải các bài toán con, ta có được lời giải bài toán ban đầu. Trong quá trình giải các bài toán con đôi khi ta gặp rất nhiều kết quả trùng lặp của các bài toán con. Để tăng tính hiệu quả, thay vì phải tính lại các kết quả đó, ta lưu chúng vào một bảng. Khi cần lời giải của một bài toán con nào đó ta chỉ cần tim trong bảng, không cần tính lại. Tư tưởng của thuật toán quy hoạch động khá đơn giản. Tuy nhiên khi áp dụng thuật toán vào trường hợp cụ thể lại không dễ dàng (điều này cũng tương tự như nguyên tắc Dirichlet trong toán vậy). Khi giải bài toán bằng phương pháp này, chúng ta phải thực hiện hai yêu cầu quan trọng sau: - Tìm công thức truy hồi xác định nghiệm bài toán qua nghiệm các bài toán con nhỏ hơn. - Với mỗi bài toán cụ thể, ta đề ra phương án lưu trữ nghiệm một cách hợp lý để từ đó có thể truy cập một cách thuận tiện nhất. Giải toán bằng phương pháp qui hoạch động 1. Phương pháp quy hoạch động Phương pháp quy hoạch động cùng nguyên lý tối ưu được nhà toán học Mỹ R.Bellman đề xuất vào những năm 50 của thế kỷ 20. Phương pháp này đã được áp dụng để giải hàng loạt bài toán thực tế trong các quá trình kỹ thuật cộng SVTH: Châu Đình Phong Trang 4 Khoa CNTT Báo cáo Niên Luận 1 nghệ, tổ chức sản xuất, kế hoạch hoá kinh tế… Tuy nhiên cần lưu ý rằng có một số bài toán mà cách giải bằng quy hoạch động tỏ ra không thích hợp. Trong thực tế, ta thường gặp một số bài toán tối ưu loại sau: Có một đại lượng f hình thành trong một quá trình gồm nhiều giai đoạn và ta chỉ quan tâm đến kết quả cuối cùng là giá trị của f phải lớn nhất hoặc nhỏ nhất, ta gọi chung là giá trị tối ưu của f. Giá trị của f phụ thuộc vào những đại lượng xuất hiện trong bài toán mà mỗi bộ giá trị của chúng được gọi là một trạng thái của hệ thống và phụ thuộc vào cách thức đạt được giá trị f trong từng giai đoạn mà mỗi cách tổ chức được gọi là một điều khiển. Đại lượng f thường được gọi là hàm mục tiêu và quá trình đạt được giá trị tối ưu của f được gọi là quá trình điều khiển tối ưu. Bellman phát biểu nguyên lý tối ưu (cũng gọi là nguyên lý Bellman) mà ý tưởng cơ bản là như sau: “Với mỗi quá trình điều khiển tối ưu, đối với trạng thái bắt đầu A 0 , với trạng thái A trong quá trình đó, phần quá trình kể từ trạng thái A xem như trạng thái bắt đầu cũng là tối ưu”. Chú ý rằng nguyên lý này được thừa nhận mà không chứng minh. Phương pháp tìm điều khiển tối ưu theo nguyên lý Bellman thường được gọi là quy hoạch động. Thuật ngữ này nói lên thực chất của quá trình điều khiển là động: có thể trong một số bước đầu tiên lựa chọn điều khiển tối ưu dường như không tốt nhưng tựu chung cả quá trình lại là tốt nhất. Ta có thể giải thích ý này qua bài toán sau: Cho một dãy N số nguyên A 1 , A 2 ,…,A N . Hãy tìm cách xoá đi một số ít nhất số hạng để dãy còn lại là đơn điệu hay nói cách khác hãy chọn một số nhiều nhất các số hạng sao cho dãy B gồm các số hạng đó theo trình tự xuất hiện trong dãy A là đơn điệu. Quá trình chọn B được điều khiển qua N giai đoạn để đạt được mục tiêu là số lượng số hạng của dãy B là nhiều nhất, điều khiển ở giai đoạn i thể hiện việc chọn hay không chọn A i vào dãy B. Giả sử dãy đã cho là 1 8 10 2 4 6 7. Nếu ta chọn lần lượt 1, 8, 10 thì chỉ chọn được 3 số hạng nhưng nếu bỏ qua 8 và 10 thì ta chọn được 5 số hạng 1, 2, 4, 6, 7. Khi giải một bài toán bằng cách “chia để trị” chuyển việc giải bài toán kích thước lớn về việc giải nhiều bài toán cùng kiểu có kích thước nhỏ hơn thì SVTH: Châu Đình Phong Trang 5 Khoa CNTT Báo cáo Niên Luận 1 thuật toán này thường được thể hiện bằng các chương trình con đệ quy. Khi đó, trên thực tế, nhiều kết quả trung gian phải tính nhiều lần. Vậy ý tưởng cơ bản của quy hoạch động thật đơn giản: tránh tính toán lại mọi thứ hai lần, mà lưu giữ kết quả đã tìm kiếm được vào một bảng làm giả thiết cho việc tìm kiếm những kết quả của trường hợp sau. Chúng ta sẽ làm đầy dần giá trị của bảng này bởi các kết quả của những trường hợp trước đã được giải. Kết quả cuối cùng chính là kết quả của bài toán cần giải. Nói cách khác phương pháp quy hoạch động đã thể hiện sức mạnh của nguyên lý chia để trị đến cao độ. Quy hoạch động là kỹ thuật thiết kế bottom-up (từ dưới lên). Nó được bắt đầu với những trường hợp con nhỏ nhất (thường là đơn giải nhất và giải được ngay). Bằng cách tổ hợp các kết quả đã có (không phải tính lại) của các trường hợp con, sẽ đạt đạt tới kết quả của trường hợp có kích thước lớn dần lên và tổng quát hơn, cho đến khi cuối cùng đạt tới lời giải của trường hợp tổng quát nhất. Trong một số trường hợp, khi giải một bài toán A, trước hết ta tìm họ bài toán A(p) phụ thuộc tham số p (có thể p là một véc tơ) mà A(p 0 )=A với p 0 là trạng thái ban đầu của bài toán A. Sau đó tìm cách giải họ bài toán A(p) với tham số p bằng cách áp dụng nguyên lý tối ưu của Bellman. Cuối cùng cho p=p 0 sẽ nhận được kết quả của bài toán A ban đầu. 2. Các bước thực hiện quy hoạch động Bước 1: Lập hệ thức Dựa vào nguyên lý tối ưu tìm cách chia quá trình giải bài toán thành từng giai đoạn, sau đó tìm hệ thức biểu diễn tương quan quyết định của bước đang xử lý với các bước đã xử lý trước đó. Hoặc tìm cách phân rã bài toán thành các “bài toán con” tương tự có kích thước nhỏ hơn, tìm hệ thức nêu quan hệ giữa kết quả bài toán kích thước đã cho với kết quả của các “bài toán con” cùng kiểu có kích thước nhỏ hơn của nó nhằm xây dựng phương trình truy toán (dạng hàm hoặc thủ tục đệ quy). Về một cách xây dựng phương trình truy toán: Ta chia việc giải bài toán thành n giai đoạn. Mỗi giai đoạn i có trạng thái ban đầu là t(i) và chịu tác động điều khiển d(i) sẽ biến thành trạng thái tiếp theo t(i+1) của giai đoạn i+1 (i=1,2,…,n-1). Theo nguyên lý tối ưu của Bellman thì việc tối ưu giai đoạn cuối cùng không làm ảnh hưởng đến kết quả toàn bài toán. SVTH: Châu Đình Phong Trang 6 Khoa CNTT Báo cáo Niên Luận 1 Với trạng thái ban đầu là t(n) sau khi làm giai đoạn n tốt nhất ta có trạng thái ban đầu của giai đoạn n-1 là t(n-1) và tác động điều khiển của giai đoạn n-1 là d(n-1), có thể tiếp tục xét đến giai đoạn n-1. Sau khi tối ưu giai đoạn n-1 ta lại có t(n-2) và d(n-2) và lại có thể tối ưu giai đoạn n-2 … cho đến khi các giai đoạn từ n giảm đến 1 được tối ưu thì coi như hoàn thành bài toán. Gọi giá trị tối ưu của bài toán tính đến giai đoạn k là F k giá trị tối ưu của bài toán tính riêng ở giai đoạn k là G k thì F k = F k-1 + G k Hay là: Bước 2: Tổ chức dữ liệu và chương trình Tổ chức dữ liệu sao cho đạt các yêu cầu sau: • Dữ liệu được tính toán dần theo các bước. • Dữ liệu được lưu trữ để giảm lượng tính toán lặp lại. • Kích thước miền nhớ dành cho lưu trữ dữ liệu càng nhỏ càng tốt, kiểu dữ liệu được chọn phù hợp, nên chọn đơn giản dễ truy cập. Cụ thể • Các giá trị của F k thường được lưu trữ trong một bảng (mảng một chiều hoặc hai, ba, v.v… chiều). • Cần lưu ý khởi trị các giá trị ban đầu của bảng cho thích hợp, đó là các kết quả của các bài toán con có kích cỡ nhỏ nhất của bài toán đang giải: • Dựa vào công thức, phương trình truy toán (*) và các giá trị đã có trong bảng để tìm dần các giá trị còn lại của bảng. • Ngoài ra còn cần mảng lưu trữ nghiệm tương ứng với các giá trị tối ưu trong từng gian đoạn. • Dựa vào bảng lưu trữ nghiệm và bảng giá trị tối ưu trong từng giai đoạn đã xây dựng, tìm ra kết quả bài toán. Bước 3: Làm tốt Làm tốt thuật toán bằng cách thu gọn hệ thức (*) và giảm kích thước miền nhớ. Thường tìm cách dùng mảng một chiều thay cho mảng hai chiều nếu giá trị một dòng (hoặc cột) của mảng hai chiều chỉ phụ thuộc một dòng (hoặc cột) kề trước. SVTH: Châu Đình Phong Trang 7 Khoa CNTT Báo cáo Niên Luận 1 Trong một số trường hợp có thể thay mảng hai chiều với các giá trị phần tử chỉ nhận giá trị 0, 1 bởi mảng hai chiều mới bằng cách dùng kỹ thuật quản lý bit. 3. Hạn chế của quy hoạch động • Việc tìm công thức, phương trình truy toán hoặc tìm cách phân rã bài toán nhiều khi đòi hỏi sự phân tích tổng hợp rất công phu,dễ sai sót, khó nhận ra như thế nào là thích hợp, đòi hỏi nhiều thời gian suy nghĩ. Đồng thời không phải lúc nào kết hợp lời giải của các bài toán con cũng cho kết quả của bài toán lớn hơn. • Khi bảng lưu trữ đòi hỏi mảng hai, ba chiều … thì khó có thể xử lý dữ liệu với kích cỡ mỗi chiều lớn hàng trăm. • Có những bài toán không thể giải được bằng quy hoạch động. SVTH: Châu Đình Phong Trang 8 Khoa CNTT Báo cáo Niên Luận 1 Các bài toán về quy hoach động Một số bài toán đơn giản: Bài toán 1: Cho hai dãy số nguyên (a 1 ,a 2 , ,a m ), (b 1 ,b 2 , ,b n ). Tìm dãy con chung có độ dài lớn nhất của hai dãy trên (coi dãy không có số nguyên nào là dãy con của mọi dãy và có độ dài bằng 0). Lời giải Chúng ta có thể thấy ngay rằng độ phức tạp của bài toán trên phụ thuộc vào hai số m, n. Xét hai trường hợp: +Trường hợp1:; m=0 hoặc n=0. Đây là trường hợp đặc biệt, có duy nhất một dãy con chung của hai dãy có độ dài bằng 0. Vì vậy dãy con chung có độ dài lớn nhất của chúng có độ dài bằng 0. +Trường hợp 2: m# 0 và n # 0. Trong trường hợp này, ta xét các bài toán nhỏ hơn là tìm dãy con chung có độ dài lớn nhất của hai dãy (a 1 ,a 2 , ,a i ), (b 1 ,b 2 , ,b j ) với 0 <= i <= m, 0 <= j <= n. Gọi [i,j] là độ dài của dãy con chung lớn nhất của hai dãy (a 1 , ,a i ), (b 1 , ,b j ). ; Như vậy ta phải tính tất cả các l[i,j] trong đó 0<=i<=m, 0<=j<=n. Chúng ta có thể thấy ngay rằng l[0,0]=0. Giả sử ta tính được l[s,t] với 1 - Nếu ii # bj thì l[i,j]=max{l[i-1,j], l[i,j-1]}. - Nếu ii=bj thì l[i,j]= 1+l[i-1,j-1]. Với những nhận xét trên, ta hoàn toàn tính được l[m,n] chính là độ dài dãy con chung dài nhất của (a1, am), (b1, bn). Để tìm phần tử của dãy con, ta xuất phát từ ô l[m,n] tới ô l[0,0]. Giả sử ta đang ở ô l[i,j]. Nếu ai=bj thì ta thêm ai vào dãy con rồi nhảy tới ô l[i-1,j-1]. Nếu aibj thì l[i,j]=l[i-1,j] hoặc l[i,j]=l[i,j-1]. Nếu l[i,j]=l[i-1,j] thì nhảy tới ô l[i-1,j], ngược lại thì nhảy tới ô l[i,j-1]. SVTH: Châu Đình Phong Trang 9 Khoa CNTT Báo cáo Niên Luận 1 Sau đây là lời giải của bài toán. Chương trình được viết bằng ngôn ngữ Pascal: uses crt; const fi='b2.inp'; var a:array[1 10] of integer; b:array[1 10] of integer; kq:array[0 10,0 10] of integer; i,j,maxa,maxb:integer; f:text; procedure init; begin assign(f,fi); reset(f); i:=0; while not(eoln(f)) do begin inc(i); read(f,a[i]); end; maxa:=i; readln(f); i:=0; while not(eoln(f)) do begin inc(i); read(f,b[i]); end; maxb:=i; close(f); end; SVTH: Châu Đình Phong Trang 10 [...]... cách xây dựng F[i,j] là giá trị lớn nhất có thể, nên F[i,j] sẽ là max trong 2 giá trị thu được ở trên Cơ sở quy hoạch động: Dễ thấy F[0,j]= giá trị lớn nhất có thể bằng cách chọn trong số 0 gói= 0 Tính bảng phương án: Bảng phương án F gồm n + 1 dòng, M + 1 cột, trứơc tiên được điền cơ sở quy hoạch động: Dòng 0 gồm toàn số 0 Sử dụng công thức truy hồi, dùng dòng 0 tính dòng 1, dùng dòng 1 tính dòng 2,v.v…... SVTH: Châu Đình Phong Trang 16 Khoa CNTT ngoài sẽ là Báo cáo Niên Luận 1 với n=i+j Chắc các bạn đã thấy sự kỳ diệu của phương pháp điền bảng số so sánh với việc gọi đệ qui, và đó là tư tưởng của thuật toán qui hoạch động SVTH: Châu Đình Phong Trang 17 Khoa CNTT Báo cáo Niên Luận 1 Một số bài toán nâng cao: 1 Bài toán cái túi Trong siêu thị có n gói hàng (n ≤ 100) gói hàng thứ i co trọng lượng là W[i]≤100... for i :=1 to n do readln (fi, W[i], V[i]) ; close(fi) ; end; procedure optimize; {Tính bảng phương án bằng công thức truy hồi} var i, j: integer; begin fillchar(F[0], sizeof (F[0], 0); {Điền cơ sở quy hoạch động} for i :=1 to n do for j :=0 to M do begin {Tính F[i, j]} F[i, j] := F[i-1,j]; if (j >= W[i]) and (F[i,j] . LUẬN TÊN ĐỀ TÀI: CHUYÊN ĐỀ KỸ THUẬT QUY HOẠCH ĐỘNG GIÁO VIÊN HƯỚNG DẪN: Th.s Trần Quốc Nghĩa SINH VIÊN THỰC HIỆN: Châu Đình Phong I .)HÌNH THỨC: (tối đa 1,0 điểm) Bìa: (tối đa 0,5 điểm) Các tiêu đề: Loại. ta đề ra phương án lưu trữ nghiệm một cách hợp lý để từ đó có thể truy cập một cách thuận tiện nhất. Giải toán bằng phương pháp qui hoạch động 1. Phương pháp quy hoạch động Phương pháp quy hoạch. của bài toán cần giải. Nói cách khác phương pháp quy hoạch động đã thể hiện sức mạnh của nguyên lý chia để trị đến cao độ. Quy hoạch động là kỹ thuật thiết kế bottom-up (từ dưới lên). Nó được

Ngày đăng: 24/04/2015, 07:13

TỪ KHÓA LIÊN QUAN

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

TÀI LIỆU LIÊN QUAN

w