Tải bản đầy đủ (.pdf) (70 trang)

Ứng dụng phương pháp quy hoạch động để giải các bài toán tối ưu tổ hợp

Bạn đang xem bản rút gọn của tài liệu. Xem và tải ngay bản đầy đủ của tài liệu tại đây (930.62 KB, 70 trang )

ĐẠI HỌC ĐÀ NẴNG
TRƯỜNG ĐẠI HỌC SƯ PHẠM

KHOA TIN HỌC

KHÓA LUẬN TỐT NGHIỆP
ĐỀ TÀI:
ỨNG DỤNG PHƯƠNG PHÁP QUY HOẠCH ĐỘNG ĐỂ GIẢI
CÁC BÀI TOÁN TỐI ƯU TỔ HỢP

Giáo viên hướng dẫn:

PGS.TSKH. Trần Quốc Chiến

Sinh viên thực hiện:

Nguyễn Vũ Thành Tiến

Lớp:

11CNTT3


LỜI CẢM ƠN
Để hồn thành bài báo cáo khóa luận tốt nghiệp này, em xin có lời cảm ơn
đến Ban giám hiệu Trường Đại học Sư phạm Đà Nẵng. Đặc biệt em xin chân
thành cảm ơn đến thầy giáo PGS.TSKH. Trần Quốc Chiến, người đã trực tiếp
tận tình hướng dẫn và giúp đỡ em hồn thành bài báo cáo này.
Vì thời gian có hạn, cũng như kiến thức bản thân cịn nhiều hạn chế nên khó
tránh khỏi những thiếu sót, kính mong được sự nhận xét, phê bình, góp ý của
các thầy cô Trường Đại học Sư phạm Đà Nẵng, để chúng em có điều kiện học


hỏi và phấn đấu hơn nữa.
Cuối cùng, em xin chúc Ban giám hiệu và quý thầy cô Trường Đại học Sư
phạm Đà Nẵng thành công trong cuộc sống và công tác.

Xin trận trọng cảm ơn!
Sinh viên thực hiện

Nguyễn Vũ Thành Tiến


LỜI CAM ĐOAN
Em xin cam đoan:
 Những nội dung trong bản báo cáo này là do em thực hiện dưới sự
hướng dẫn trực tiếp của Giáo viên hướng dẫn.
 Mọi tham khảo dùng trong báo cáo này đều được trích dẫn rõ ràng
tên tác giả, tên cơng trình, thời gian và địa điểm công bố.
 Mọi sao chép không hợp lệ, vi phạm quy chế đào tạo, em xin chịu
hoàn toàn trách nhiệm.

Đà Nẵng, ngày 03 tháng 05 năm 2015
Sinh viên thực hiện

Nguyễn Vũ Thành Tiến


NHẬN XÉT CỦA GIÁO VIÊN HƯỚNG DẪN
..........................................................................................................................................
..........................................................................................................................................
..........................................................................................................................................
..........................................................................................................................................

..........................................................................................................................................
..........................................................................................................................................
..........................................................................................................................................
..........................................................................................................................................
..........................................................................................................................................
..........................................................................................................................................
..........................................................................................................................................
..........................................................................................................................................
..........................................................................................................................................
..........................................................................................................................................
..........................................................................................................................................
..........................................................................................................................................
..........................................................................................................................................
..........................................................................................................................................
..........................................................................................................................................
..........................................................................................................................................
Đà Nẵng, ngày

tháng

năm 2015

Chữ ký của giáo viên hướng dẫn


MỤC LỤC
DANH MỤC HÌNH VẼ ........................................................................................... i
MỞ ĐẦU ...................................................................................................................1
1. Tính cấp thiết của đề tài....................................................................................1
2. Mục tiêu nghiên cứu .........................................................................................1

3. Đối tượng và phạm vi nghiên cứu ....................................................................2
4. Phương pháp nghiên cứu ..................................................................................3
5. Bố cục đề tài .....................................................................................................3
CHƯƠNG 1. CƠ SỞ LÝ THUYẾT .......................................................................5
1.1. Quy hoạch động.............................................................................................5
1.1.1. Phương pháp chia để trị ..........................................................................5
1.1.2. Khái niệm về quy hoạch động ................................................................5
1.1.3. Các nguyên tắc cơ bản của quy hoạch động ...........................................6
1.1.4. Các bước thực hiện quy hoạch động .......................................................8
1.1.5. Ví dụ ........................................................................................................9
1.1.6. Ưu điểm và hạn chế của phương pháp quy hoạch động .......................12
1.2. Bài toán tối ưu tổ hợp ..................................................................................12
1.2.1. Khái niệm ..............................................................................................12
1.2.2. Một số bài tốn điển hình ......................................................................13
CHƯƠNG 2. PHÂN TÍCH THIẾT KẾ ...............................................................16
2.1. Bài tốn di chuyển của Robot .....................................................................16
2.1.1. Phát biểu bài toán ..................................................................................16


2.1.2. Phân tích, xử lý bài tốn và lập hệ thức truy hồi ..................................17
2.1.3. Thuật tốn..............................................................................................18
2.1.4. Thiết kế chương trình ............................................................................19
2.1.5. Ví dụ ......................................................................................................21
2.2. Bài tốn balo ................................................................................................22
2.2.1. Phát biểu bài tốn ..................................................................................22
2.2.2. Phân tích, xử lý bài tốn và lập hệ thức truy hồi ..................................23
2.2.3. Thuật toán..............................................................................................24
2.2.4. Thiết kế chương trình ............................................................................25
2.2.5. Ví dụ ......................................................................................................27
2.3. Bài tốn phép nhân tổ hợp dãy ma trận .......................................................28

2.3.1. Phát biểu bài toán ..................................................................................28
2.3.2. Phân tích, xử lý bài tốn và lập hệ thức truy hồi ..................................29
2.3.3. Thuật tốn..............................................................................................30
2.3.4. Thiết kế chương trình ............................................................................31
2.3.5. Ví dụ ......................................................................................................33
2.4. Bài tốn lập lịch th thợ may hàng tháng ..................................................34
2.4.1. Phát biểu bài toán ..................................................................................34
2.4.2. Phân tích, xử lý bài tốn và lập hệ thức truy hồi ..................................35
2.4.3. Thuật tốn..............................................................................................36
2.4.4. Thiết kế chương trình ............................................................................37
2.4.5. Ví dụ ......................................................................................................39


2.5. Bài toán cắm hoa .........................................................................................40
2.5.1. Phát biểu bài toán ..................................................................................40
2.5.2. Phân tích, xử lý bài tốn và lập hệ thức truy hồi ..................................41
2.5.3. Thuật tốn..............................................................................................42
2.5.4. Thiết kế chương trình ............................................................................43
2.5.5. Ví dụ ......................................................................................................45
CHƯƠNG 3. KẾT QUẢ ĐẠT ĐƯỢC .................................................................47
3.1. Bài toán di chuyển của Robot .....................................................................47
3.1.1. Cài đặt chương trình ..............................................................................47
3.1.2. Độ phức tạp ...........................................................................................49
3.2. Bài tốn balo ................................................................................................49
3.2.1. Cài đặt chương trình ..............................................................................49
3.2.2. Độ phức tạp ...........................................................................................51
3.3. Bài toán phép nhân tổ hợp dãy ma trận .......................................................52
3.3.1. Cài đặt chương trình ..............................................................................52
3.3.2. Độ phức tạp ...........................................................................................54
3.4. Bài tốn lập lịch thuê thợ may hàng tháng ..................................................54

3.4.1. Cài đặt chương trình ..............................................................................54
3.4.2. Độ phức tạp ...........................................................................................56
3.5. Bài tốn cắm hoa .........................................................................................56
3.5.1. Cài đặt chương trình ..............................................................................56
3.5.2. Độ phức tạp ...........................................................................................58


KẾT LUẬN VÀ KIẾN NGHỊ ...............................................................................59
TÀI LIỆU THAM KHẢO .....................................................................................60


i

DANH MỤC HÌNH VẼ
Số hiệu
hình vẽ

Tên hình vẽ

Trang

3.1.

Tạo file

47

3.2.

File Robot.inp


47

3.3.

Chương trình tìm đường đi của Robot

48

3.4.

Truy vết đường đi của Robot và ghi vào file

48

3.5.

File Robot.out

49

3.6.

Tạo file

49

3.7.

File Balo.inp


50

3.8.

Chương trình chọn các mặt hàng

50

3.9.

Truy vết các mặt hàng được chọn và ghi vào file

51

3.10.

File Balo.out

51

3.11.

Tạo file

52

3.12.

File Matrix.inp


52

3.13.

Chương trình tìm biểu thức kết hợp tối ưu phép nhân dãy
ma trận

53

3.14.

Truy vết và ghi vào file

53

3.15.

File Matrix.out

54

3.16.

Tạo file

54

3.17.


File Tailor.inp

54

3.18.

Chương trình tìm số thợ may của mỗi tháng

55


ii

3.19.

Truy vết và ghi vào file

55

3.20.

File Tailor.out

56

3.21.

Tạo file

56


3.22.

File Flower.inp

57

3.23.

Chương trình tìm cách cắm hoa

57

3.24.

Truy vết và ghi vào file

58

3.25.

File Flower.out

58


1

MỞ ĐẦU
1. Tính cấp thiết của đề tài

Bài tốn tối ưu tổ hợp là bài toán chỉ quan tâm đến một cấu hình “tốt nhất”
theo một nghĩa nào đó. Đây là bài tốn có nhiều ứng dụng trong thực tiễn và lý
thuyết tổ hợp đã đóng góp một phần đáng kể trong việc xây dựng những thuật
toán hữu hiệu.
Trong ngành khoa học máy tính, quy hoạch động là một phương pháp giảm
thời gian chạy của các thuật toán thể hiện các tính chất của các bài tốn con gối
nhau và cấu trúc con tối ưu. Cấu trúc con tối ưu có nghĩa là các lời giải tối ưu
cho các bài tốn con có thể được sử dụng để tìm các lời giải tối ưu cho bài tốn
tồn cục.
Các bài tốn quy hoạch động chiếm một vị trí khá quan trọng trong tổ chức
hoạt động và sản xuất. Chính vì lẽ đó mà trong các kì thi học sinh giỏi quốc gia
và quốc tế chúng ta thường gặp loại tốn này.
Thơng thường những bài toán dùng phương pháp quay lui, vét cạn cho các
bài tốn quy hoạch động thì chỉ có thể giải quyết được các tập dữ liệu nhỏ. Nếu
tìm được đúng hệ thức thể hiện bản chất quy hoạch động của bài tốn và khéo
tổ chức dữ liệu thì ta có thể xử lí được những tập dữ liệu khá lớn.
Qua bài báo cáo này, mọi người sẽ thấy được tổng quan về phương pháp quy
hoạch động và các bài toán tối ưu tổ hợp nào giải quyết bằng phương pháp quy
hoạch động.
2. Mục tiêu nghiên cứu
Nắm được yêu cầu của bài toán tối ưu tổ hợp, một số bài tốn điển hình:


2

 Bài toán người du lịch
 Bài toán balo (bài toán cái túi)
 Bài toán cho thuê máy
 Bài toán phân cơng
 Bài tốn lập lịch


Phân tích và tìm hiểu lý thuyết giải thuật, các cơ sở lý luận và toán học (các
định nghĩa toán học, các phương pháp như duyệt tồn bộ… và lý thuyết tốn
học như tối ưu hóa, kỹ thuật của thuật tốn như tham lam, vét cạn...).
Viết chương trình biểu diễn giải thuật và ứng dụng giải bài tốn liên quan.
(Demo diễn tả được q trình thực hiện giải thuật, ứng dụng sử dụng tốt trong
việc giải bài toán tối ưu).
3. Đối tượng và phạm vi nghiên cứu
Các vấn đề liên quan đến phương pháp quy hoạch động:
 Các nguyên tắc (Nguyên tắc đánh số các giai đoạn từ dưới lên, ngun
tắc thơng số hóa bài toán, nguyên tắc lồng, nguyên tắc tối ưu
(Bellman)…).
 Nguyên lý chia để trị: Khi không biết cần phải giải bài những toán con
nào, ta sẽ đi giải quyết tất cả các bài toán con và lưu trữ những lời giải
hay đáp số của chúng với mục đích sử dụng lại theo một sự phối hợp
nào đó để giải quyết những bài toán tổng quát hơn.


3

 Các khái niệm và kiến thức bổ trợ: Các khái niệm cơ bản và kiến thức
bổ trợ liên quan đến giải thuật.
Các vấn đề liên quan đến các bài tốn tối ưu tổ hợp.
4. Phương pháp nghiên cứu
Tìm và đọc các tài liệu của các tác giả trên thế giới liên quan đến giải thuật.
Tìm và đọc các báo cáo, đề tài nghiên cứu khoa học liên quan đến giải thuật.
Các đồ án liên quan.
Các giáo trình tiếng Việt của các trường đại học.
5. Bố cục đề tài
Đề tài dự kiến gồm 3 chương bao gồm:

Chương 1: Cơ sở lý thuyết
Bao gồm lý thuyết tốn học, các ví dụ liên quan đến giải thuật. Phân tích
các hướng giải quyết ví dụ theo các trường hợp khác nhau, các phương pháp cơ
bản.
Chương 2: Phân tích thiết kế
Phát biểu.
Phân tích.
Đưa ra thuật tốn.
Nêu ví dụ cụ thể.
Thiết kế giải thuật để giải bài toán.


4

Chương 3: Kết quả đạt được
Sản phẩm thực hiện.
Cài đặt chương trình: thời gian, độ phức tạp.
Một số vấn đề đã giải quyết:
 Chỉ ra được kết quả gặt hái được trong quá trình làm luận văn.
 Các kiến thức khoa học có được sau q trình thực hiện.
Các vấn đề còn tiếp tục thực hiện.


5

CHƯƠNG 1

CƠ SỞ LÝ THUYẾT
1.1.


Quy hoạch động

1.1.1.

Phương pháp chia để trị

Chia để trị là phương pháp tách bài toán ban đầu thành các bài tốn con độc
lập, sau đó giải các bài toán con rồi tổ hợp dần lời giải từ bài toán con nhỏ nhất
đến bài toán ban đầu. Phương pháp chia để trị là một phương pháp rất thơng
dụng trong tin học và kỹ thuật tính tốn.
Phương pháp chia để trị thường được áp dụng cho những bài tốn có bản
chất đệ quy: bài tốn P ban đầu có thể được giải bằng lời giải của bài tốn con
P’ có dạng giống như P, nhưng theo một nghĩa nào đó P’ phải nhỏ hơn P, dễ
giải hơn P và việc giải nó khơng cần dùng đến P. Giải thuật dùng để giải bài
tốn có bản chất đệ quy gọi là giải thuật đệ quy.
1.1.2.

Khái niệm về quy hoạch động

Quy hoạch động là một trong những phương pháp tối ưu hiện đại. Đối tượng
của quy hoạch động là các q trình tối ưu nhiều bước nói chung và các q
trình phát triển theo thời gian nói riêng.
Phương pháp quy hoạch động do nhà toán học người Mỹ, Richard Bellman
(1920- 1984) phát minh năm 1953. Phương pháp này dùng để giải các bài tốn
tối ưu có bản chất đệ quy, tức là tìm phương án tối ưu cho bài tốn đó có thể
đưa về tìm phương án tối ưu của một số hữu hạn các bài toán con. Cũng áp
dụng phương pháp chia để trị, nhưng so với đệ quy, quy hoạch động được cải
tiến và tối ưu hơn rất nhiều.



6

Phương pháp đệ quy giải quyết bài toán theo hướng top-down (từ trên
xuống), nghĩa là để giải bài toán ban đầu, ta phải đi giải các bài toán con bé
hơn, và chia các bài toán con này bé hơn nữa, đến các bài toán cơ sở. Đây là
một phương pháp hay, tuy nhiên phương pháp này sẽ gặp hạn chế về mặt thời
gian, tốc độ do phải tính đi tính lại nhiều lần một số bài toán con giống nhau
nào đó.
Ngược lại, phương pháp quy hoạch động sử dụng nguyên lý bottom-up (từ
dưới lên). Đầu tiên, ta sẽ phải giải các bài tốn con cơ sở, đơn giản nhất, có thể
tìm ngay ra nghiệm. Sau đó kết hợp các bài tốn con này lại để tìm lời giải cho
bài tốn lớn hơn và cứ như thế cho đến khi giải được bài toán ban đầu. Với
phương pháp này, mỗi bài toán con sau khi giải xong đều được lưu trữ lại và
đem ra sử dụng nếu cần. Do đó tiết kiệm bộ nhớ và cải thiện được tốc độ.
Vậy phương pháp quy hoạch động là một kỹ thuật nhằm đơn giản hóa việc
tính tốn các cơng thức truy hồi bằng cách lưu tồn bộ hay một phần kết quả
tính tốn tại mỗi bước trước đó với mục đích sử dụng lại.
=> Quy hoạch động = Chia để trị + Hướng lưu trữ (lưu lại kết quả).
Lĩnh vực áp dụng của quy hoạch động rất rộng: Các quá trình kỹ thuật cơng
nghiệp, tổ chức sản xuất, kế hoạch hóa kinh tế, trong các vấn đề khác nhau của
vật lý, sinh vật và quân sự.
1.1.3.

Các nguyên tắc cơ bản của quy hoạch động

Quy hoạch động là việc quy hoạch từng giai đoạn của q trình nhiều giai
đoạn mà trong đó mỗi giai đoạn ta chỉ tối ưu hóa một bước. Tuy nhiên khi quy
hoạch một quá trình nhiều giai đoạn, ở mỗi bước ta phải lựa chọn điều khiển



7

trên cơ sở khơng phải xuất phát từ lợi ích nhỏ hẹp của chính bước đó mà từ lợi
ích chung của tồn bộ q trình.
a. Ngun tắc đánh số các giai đoạn từ dưới lên
Đối với giai đoạn cuối có thể làm cho nó tốt nhất và khơng lo hậu quả. Khi
đó giai đoạn này trở nên ổn định và ta có thể xét giai đoạn ở trước đó và cứ tiếp
tục cho tới lúc ta đi được tới giai đoạn đầu của q trình.
b. Ngun tắc thơng số hóa bài toán
Ở giai đoạn sát giai đoạn cuối cùng, ta chưa biết kết quả nên ta phải đặt giả
thuyết cho giai đoạn này rồi ứng với giả thuyết đó ta tìm điều khiển tối ưu cho
giai đoạn cuối cùng. Ở các bước khác tình hình cũng xảy ra như vậy. Do đó q
trình điều khiển tối ưu sẽ phụ thuộc vào các thông số đặc trưng cho kết quả ở
bước trước.
c. Nguyên tắc lồng
Lồng bài toán ban đầu vào bài toán rộng hơn hay một họ các bài toán và do
đó bài tốn ban đầu là một trường hợp riêng của họ bài tốn này.
Họ bài tốn này nhờ có các thông số nên ta giải được. Ta sẽ thử kết quả của
bài tốn với các thơng số khác nhau cho tới một lúc được thơng số của bài tốn
ban đầu thì dừng lại.
d. Nguyên tắc tối ưu Bellman
Ta biết rằng quy hoạch động thường dùng để giải bài toán tối ưu- bài tốn
u cầu tìm một giải pháp tốt nhất trong các giải pháp có thể tìm được. Cơ sở
của quy hoạch động trong bài toán tối ưu là nguyên lý tối ưu Bellman.


8

Nguyên lý tối ưu Bellman được phát biểu như sau: “Dãy tối ưu các quyết
định trong một quá trình quyết định nhiều giai đoạn có thuộc tính là dù trạng

thái và các quyết định ban đầu bất kể như thế nào, những quyết định còn lại
phải tạo thành một cách giải quyết tối ưu không phụ thuộc vào trạng thái được
sinh ra từ những quyết định ban đầu”.
Hay nói cách khác: “Giải pháp tối ưu cho bài toán P cần chứa giải pháp tối
ưu cho các bài toán con của P”.
Do vậy khi giải bài toán theo quy hoạch động nếu dùng một phương pháp
gồm nhiều bước tiến hành thì điều kiện cần để giải 10 pháp này tối ưu là nó
được xây dựng từ nghiệm tối ưu của những bước trước.
1.1.4.

Các bước thực hiện quy hoạch động

Bước 1: Lập hệ thức truy hồi
Dựa vào nguyên lý tối ưu, ta chia bài tốn thành từng giai đoạn, tìm cách
phân rã bài tốn thành các bài tốn con tương tự có kích thước nhỏ hơn, tìm hệ
thức quan hệ giữa kết quả bài tốn kích thước đã cho với kết quả của các bài
tốn con cùng kiểu có kích thước nhỏ hơn của nó nhằm xây dựng hệ thức truy
hồi.
Bước 2: Tổ chức dữ liệu (lập bảng) và chương trình
Ta tổ chức dữ liệu sao cho đạt các yêu cầu sau:
 Dữ liệu được tính tốn dần theo các bước.
 Dữ liệu được lưu trữ vào bảng phương án để giảm lượng tính tốn lặp
lại.


9

 Kích thước bộ 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.
Bước 3: Truy vết, tìm nghiệm

Dựa vào bảng lưu trữ nghiệm và bảng phương án tối ưu trong từng giai đoạn
đã xây dựng, ta sẽ tìm ra kết quả nghiệm tối ưu của bài tốn.
Sau khi tìm được nghiệm tối ưu của bài tốn. Ta tìm cách làm tốt thuật tốn
bằng cách thu gọn hệ thức truy hồi và giảm kích thước bộ nhớ. Ví dụ như tìm
cách giảm bộ nhớ lưu trữ từ mảng hai chiều thành mảng một chiều, từ mảng
một chiều xuống thành hệ số (nếu có).
Trong thực tế, khi muốn làm tốt về không gian, ta sẽ phải tổ chức lại chương
trình và thực hiện thêm các bước làm tốt, dẫn tới thiệt hại về thời gian tính tốn
và ngược lại. Bởi vậy, trong một số trương hợp, ta cần điểu chỉnh giữa làm tốt
không gian và thời gian để đạt được hiệu suất làm việc tốt nhất.
1.1.5.

Ví dụ

Dãy Fibonacci
Một cài đặt đơn giản của một hàm tính phần tử thứ n của dãy Fibonacci, trực
tiếp dựa theo định nghĩa toán học. Cài đặt này thực hiện rất nhiều tính tốn
thừa:
function fib(n)
if n = 0 or n = 1
return n


10

else
return fib(n – 1) + fib(n – 2)
Lưu ý rằng nếu ta gọi, chẳng hạn fib(5), ta sẽ tạo ra một cây các lời gọi hàm,
trong đó các hàm của cùng một giá trị được gọi nhiều lần:
1. fib(5)

2. fib(4) + fib(3)
3. (fib(3) + fib(2)) + (fib(2) + fib(1))
4. ((fib(2) + fib(1)) + (fib(1) + fib(0))) + ((fib(1) + fib(0)) + fib(1))
5. (((fib(1) + fib(0)) + fib(1)) + (fib(1) + fib(0))) + ((fib(1) + fib(0)) + fib(1))
Cụ thể, fib(2) được tính hai lần. Trong các ví dụ lớn hơn, sẽ có nhiều giá trị
của fib, hay các bài tốn con được tính lại, dẫn đến một thuật tốn có thời gian
lũy thừa.
Bây giờ, giả sử ta có một đối tượng ánh xạ đơn giản, nó ánh xạ mỗi giá trị
của fib đã được tính tới kết quả của giá trị đó. Ta sửa đổi hàm trên như sau để
sử dụng và cập nhật ánh xạ trên. Hàm thu được chỉ địi hỏi thời gian chạy O(n)
thay vì thời gian chạy lũy thừa:
var m:= map(0 → 1, 1 → 1)
function fib(n)
if n not in keys(m)
m[n]:= fib(n − 1) + fib(n − 2)


11

return m[n]
Đây là cách tiếp cận từ trên xuống, do trước hết ta chia bài toán ban đầu
thành các bài toán nhỏ hơn, rồi giải chúng và lưu trữ các kết quả. Trong trường
hợp này, ta cũng có thể giảm từ chỗ hàm sử dụng khơng gian tuyến tính O(n)
xuống chỉ cịn sử dụng khơng gian hằng bằng cách sử dụng cách tiếp cận từ
dưới lên. Cách này tính các giá trị nhỏ hơn của fib trước, rồi từ đó xây dựng các
giá trị lớn hơn:
function fib(n)
var previousFib:= 1, currentFib:= 1
repeat n − 1 times
var newFib:= previousFib + currentFib

previousFib:= currentFib
currentFib:= newFib
return currentFib
Phiên bản bottom-up này gần với vòng lặp mệnh lệnh đơn giản dùng cho
việc tính hàm Fibonacci có trong mơn học nhập mơn khoa học máy tính.
Trong cả hai ví dụ trên, ta chỉ tính fib(2) một lần, rồi sử dụng nó để tính
cả fib(4) và fib(3), thay vì tính nó mỗi lần cần tính fib(4) hay fib(3).


12

1.1.6.

Ưu điểm và hạn chế của phương pháp quy hoạch động

a. Ưu điểm
Phương pháp quy hoạch động cải thiện đáng kể cả về khơng gian lưu trữ và
thời gian tính toán so với hầu hết các phương pháp giải quyết bài tốn tối ưu
khác.
Khơng phải giải lại bài tốn con đã được giải.
Lĩnh vực áp dụng rộng.
b. Hạn chế
Việc tìm cơng thức, phương trình truy tốn hoặc tìm cách phân rã bài tố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.
1.2.

Bài toán tối ưu tổ hợp


1.2.1.

Khái niệm

Bài toán tối ưu tổ hợp là một dạng của bài tốn tối ưu, khơng quan tâm đến
việc xây dựng tất cả các cấu hình như bài tốn liệt kê mà chỉ nhằm xây dựng
một cấu hình “tốt” nhất theo một nghĩa nào đấy. Vì thế nó là bài tốn có nhiều ý
nghĩa thực tiễn hơn cả. Lời giải của nó, cũng giống như bài tốn liệt kê, phải
được trình bày dưới dạng một thuật giải mà theo từng bước, ta xây dựng được
cấu hình cần tìm. Việc thi hành được giao cho máy tính bằng một chương trình
thực hiện thuật giải đã nêu.


13

Độ “tốt” của cấu hình phụ thuộc vào mục tiêu của bài tốn và người ta phải
lượng hóa chúng để có thể so sánh. Một cách thường làm là xây dựng một hàm
f, ứng mỗi cấu hình X được xét với một con số, ký hiệu f(X) (gọi là giá của X).
Khi đó, độ “tốt” của cấu hình được định nghĩa theo hai hướng: nếu mục tiêu của
bài toán là chi phí thì cấu hình càng tốt nếu giá của nó càng nhỏ (như thế cấu
hình tốt nhất là cấu hình có giá nhỏ nhất), nếu mục tiêu là hiệu quả thì cấu hình
càng tốt nếu giá của nó càng lớn (như thế cấu hình tốt nhất là cấu hình có giá
lớn nhất). Bài tốn thứ nhất gọi là bài tốn tìm min, bài tốn thứ hai gọi là bài
tốn tìm max. Như vậy, bài tốn tối ưu tổ hợp có thể phát biểu dưới hình thức
tốn học như sau:
Tìm X  D: f(X)  min (max)
Trong đó D là tập hữu hạn, gồm các cấu hình thỏa mãn điều kiện của bài
toán. Hàm f được gọi là hàm mục tiêu. Tập hợp D được gọi là miền xác định
hay miền phương án. Mỗi phần tử của D được gọi là một phương án. Phương

án tốt nhất được gọi là phương án tối ưu. Giá của phương án tối ưu được gọi là
giá trị tối ưu. Chú ý rằng do D hữu hạn nên phương án tối ưu bao giờ cũng tồn
tại. Có thể có nhiều phương án tối ưu, nhưng giá trị tối ưu là duy nhất. Trong
mỗi bài toán cụ thể, ta phải chỉ rõ các điều kiện xác định D và cách tính hàm f
(hàm f có thể tính bằng một cơng thức hoặc bằng một thủ tục).
1.2.2.

Một số bài tốn điển hình

Bài tốn du lịch
Bài tốn người du lịch được phát biểu như sau: “Có n thành phố (đánh số từ
1 đến n). Một người du lịch, xuất phát từ thành phố s, muốn đi thăm tất cả các
thành phố khác, mỗi thành phố đúng một lần, rồi lại quay về nơi xuất phát. Giả


14

thiết biết chi phí đi từ thành phố i đến thành phố j là c(i, j), 1 ≤ i, j ≤ n. Hãy tìm
một hành trình cho người du lịch sao cho chi phí của hành trình này là nhỏ
nhất”.
Mỗi hành trình của người du lịch được biểu diễn bằng một hoán vị X = (x1,
x2..., xn) của {1, 2..., n} với x1 = s (hoán vị này biểu diễn hành trình x1→
x2→...→ xn-1→ xn→ x1). Chi phí của hành trình X được tính bằng cơng thức
c(x1, x2) + c(x2, x3) + ... + c(xn, x1). Như thế, mơ hình tốn học của bài tốn
người du lịch là:
Tìm X  D: f(X)  min
Trong đó D là tập các hốn vị X = (x1, x2..., x2) của {1, 2..., n} có x1 = s (cho
trước) và f(X) = c(x1, x2) + c(x2, x3) + ... + c(xn, x1).
Tên gọi bài tốn người du lịch mang tính chất tượng trưng, nó dùng để gọi
chung cho các bài tốn có mơ hình tốn học như trên mặc dù phát biểu có nội

dung khác, chẳng hạn bài tốn tìm chu trình sản xuất cho một nhà máy hóa chất
sao cho chi phí xúc rửa các thiết bị (như bể chứa, ống dẫn...), mỗi khi chuyển từ
loại hóa chất này sang loại hóa chất khác của chu trình là ít nhất.
Bài tốn cái túi
Bài tốn cái túi được phát biểu như sau: “Có n đồ vật (đánh số từ 1 đến n).
Với mỗi đồ vật i, ta biết pi, vi lần lượt là các trọng lượng và giá trị của vật đó
(i = 1, 2..., n). Giả thiết có một cái túi, sức chứa khơng q w đơn vị trọng
lượng. Hãy tìm một phương án chọn đồ vật bỏ vào túi để có thể mang đi được
sao cho tổng giá trị các vật được mang là lớn nhất”.


15

Một phương án chọn đồ vật là một tập con của tập {1, 2, ..., n}, vì thế có thể
biểu diễn mỗi phương án như thế như một dãy nhị phân X = (x1, x2, ..., xn),
trong đó xi = 1 khi và chỉ khi vật i được chọn (i = 1, 2, ..., n). Tổng trọng lượng
của các vật được mang theo phương án này là p1x1 + p2x2 + ... + pnxn. Điều kiện
các vật được chọn mang đi được là điều kiện tổng này không vượt quá w (sức
chứa của cái túi). Tổng giá trị các vật được mang theo phương án X là v1x1 +
v2x2 + ... + vnxn. Từ đó ta nhận được mơ hình tốn học của bài tốn cái túi như
sau:
Tìm X  D: f(X)  max
Trong đó D là tập hợp các dãy nhị phân X = (x1, x2..., xn) thỏa mãn bất
đẳng thức p1x1 + p2x2 + ... + pnxn ≤ w và f(X) = v1x1 + v2x2 + ... + vnxn.
Bài tốn cái túi có nội dung giống như bài toán của người leo núi trước khi
thám hiểm: chọn những vật đem theo sao cho sức anh ta mang được với tổng
giá trị sử dụng trong chuyến leo núi là lớn nhất, vì thế bài tốn này cịn có tên
gọi khác là bài toán của người leo núi.
Bài toán người du lịch là ví dụ cho những bài tốn tối ưu với mục tiêu là chi
phí, cịn bài tốn cái túi là ví dụ cho những bài tốn tối ưu với mục tiêu là hiệu

quả.


×