Tải bản đầy đủ (.docx) (47 trang)

Nghiên cứu thuật toán ACO cho bài toán Knapsack bội. So sánh thuật toán đó với các thuật toán đã biết giải bài toán Knapsack

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 (825.18 KB, 47 trang )

PHÂN TÍCH & THIẾT KẾ HỆ THỐNG
Đề tài: Nghiên cứu thuật toán ACO cho bài toán Knapsack
bội. So sánh thuật tốn đó với các thuật tốn đã biết giải bài
tốn Knapsack, đánh giá thuật toán.


Mục lục
LỜI MỞ ĐẦU............................................................................................................................................................ 3
CHƯƠNG 1. GIỚI THIỆU VỀ HỆ THỐNG ĐÀN KIẾN......................................................................................5
1.1

Tìm hiểu hệ thống đàn kiến......................................................................................................................6

1.2

Mơ phỏng hành vi thực tế của đàn kiến trong tự nhiên.........................................................................7

1.2.1

Mô tả hành vi đàn kiến trong tự nhiên...............................................................................................7

1.2.2

Thí nghiệm chiếc cầu đơi.....................................................................................................................8

1.2.3

Mơ hình ngẫu nhiên...........................................................................................................................12

CHƯƠNG 2. GIỚI THIỆU BÀI TỐN KNAPSACK VÀ GIẢI QUYẾT BẰNG THUẬT TOÁN ĐÃ BIẾT. .15
2.1 Tổng quan bài toán........................................................................................................................................15


2.2 Ứng dụng của bài toán Cái túi......................................................................................................................16
2.3 Độ phức tạp tính tốn....................................................................................................................................17
2.4 Các thuật tốn để giải quyết bài toán Knapsach..........................................................................................18
2.4.1 Khái niệm thuật toán quy hoạch động...................................................................................................18
2.4.2 Áp dụng vào bài toán..............................................................................................................................22
2.4.3 Khái niệm thuật toán tham lam.............................................................................................................27
2.4.4 Áp dụng vào bài tốn..............................................................................................................................29
CHƯƠNG 3. THUẬT TỐN ACO CHO BÀI TOÁN KNAPSACK BỘI VÀ SO SÁNH, ĐÁNH GIÁ THUẬT
TỐN........................................................................................................................................................................32
3.1 Bài tốn knapsack bội....................................................................................................................................32
3.2 Thuật tốn ACO để giải bài tốn Knapsack bội...............................................................................................33
3.3 Mơ hình Pheromone.......................................................................................................................................34
3.4 Thơng tin Heuristic........................................................................................................................................36
3.4.1 Heuristics tĩnh......................................................................................................................................... 36
3.4.2 Heuristics động........................................................................................................................................36
3.5 So sánh giữa các giải thuật ACO...................................................................................................................38
3.6.1 So sánh với thuật toán quy hoạch động.........................................................................................................40
3.6.2 So sánh với thuật toán tham lam....................................................................................................................42

2


CHƯƠNG 4. KẾT LUẬN........................................................................................................................................44
4.1 Tổng kết quá trình nghiên cứu......................................................................................................................44
4.2 Ý nghĩa và đóng góp của nghiên cứu............................................................................................................44
Tài liệu tham khảo...................................................................................................................................................46

LỜI MỞ ĐẦU
Bài toán Cái túi, Bài toán Xếp ba lô, Bài toán Knapsack, ... là những tên gọi
khác nhau mà chúng ta thường nghe đến, nhưng tất cả đều dùng để chỉ chung một

bài toán tối ưu hóa tổ hợp, trong đó ta cần phải lựa chọn một số đồ vật để nhét
vào một chiếc túi với tải trọng biết trước, sao cho tổng giá trị của các đồ vật nhét
vào là lớn nhất có thể. Bài toán này đã được nghiên cứu trong hơn một thế kỷ, và
nó là một trong những bài toán có ứng dụng vô cùng to lớn trong thực tế.
Trong thời gian gần đây, vấn đề nghiên cứu thuật toán ACO (Ant Colony
Optimization) - tối ưu hóa đàn kiến – là một hướng nghiên cứu đang được quan
tâm trong lĩnh vực toán học và Cơng nghệ thơng tin. Thuật tốn mơ phỏng theo
cách thức tìm đường đi lồi kiến dựa trên mật độ một loại chất hóa học (gọi là mùi)
do kiến tạo ra trên đường đi đã được một số nhà khoa học nghiên cứu, thí nghiệm
điển hình và cho kết quả vượt trội là thí nghiệm được xây dựng bởi Deneubourg và
các đồng nghiệp của ông vào năm 1989. Trên cơ sở nghiên cứu này, nhiều nhà
khoa học đã đi sâu nghiên cứu nhiều các hệ kiến khác nhau. Năm 1996, nhà khoa
học người Bỉ Marco Dorigo đã xây dựng thuật toán đàn kiến (Ant Algorithm) đầu
tiên ứng dụng vào giải bài toán người du lịch trong luận án tiến sĩ của mình.
Hiện nay, các thuật tốn kiến đã được ứng dụng vào thực tế ở nhiều lĩnh vự
khác nhau như: Áp dụng vào việc kinh doanh của một số hãng vận tải lớn ở Mỹ,
ứng dụng trong ngành bưu chính tại Đan Mạch, tìm kiếm thơng tin trên mạng
internet, v.v..

3


Trong phạm vi tiểu luận, với mục đích nghiên cứu vấn đề “Nghiên cứu thuật
toán ACO cho bài toán Knapsach bội. So sánh thuật tốn đó với các thuật tốn đã
biết giải bài toán Knapsach, đánh giá thuật toán.”, tiểu luận đặt vấn đề nghiên cứu
về lý thuyết thuật toán ACO, lý thuyết về bài toán Knapsack bội và so sánh thuật
tốn.
Với những kiến thức cịn hạn chế, tiểu luận của chúng em có thể sẽ có nhiều
sai sót hoặc chưa được toàn diện, chúng em rất mong nhận được những lời nhận
xét và góp ý từ phía thầy để có thể hồn thiện nghiên cứu tốt hơn về sau.

Cấu trúc chính của tiểu luận được chưa làm 3 chương, với nội dung chính
của mỗi chương như sau:
 Chương 1: Giới thiệu về hệ thống đàn kiến, phương pháp giải
heuristic, một số thí nghiệm liên quan và một số thuật toán đàn kiến.
 Chương 2: Giới thiệu bài toán Knapsack và đưa ra thuật toán đã biết
để giải quyết bài toán
 Chương 3: So sánh giữa 2 thuật toán

4


CHƯƠNG 1. GIỚI THIỆU VỀ HỆ THỐNG ĐÀN KIẾN
1.1 Tìm hiểu hệ thống đàn kiến
Các cơng trình nghiên cứu về hệ thống đàn kiến (Ant System) đã thu được
các kết quả thiết thực từ việc quan sát hành vi thực tế của lồi kiến, quan sát
các mơ hình giả lập đàn kiến nhân tạo. Các nhà khoa học đã sử dụng các mơ
hình này như là một nguồn cảm hứng cho việc thiết kế các thuật toán, đưa ra
giải pháp tối ưu hóa và phân phối kiểm sốt các vấn đề trong thực tế.
Thuật toán tối ưu bầy kiến (ACO) nghiên cứu hệ thống nhân tạo dựa vào
hành vi tìm kiếm của bầy kiến thực và được sử dụng để giải quyết các vấn đề
về tối ưu rời rạc. Thuật tốn bầy kiến siêu tìm kiếm (ACO metaheuristic) lần
đầu tiên được Dorigo, Di Caro và Gambardella đề xuất vào năm 1999.
Metaheuristic là một tập hợp các khái niệm về thuật tốn được sử dụng để
xác định các phương thức tìm kiến thích hợp cho một tập hợp các vấn đề khác
nhau. Hay nói cách khác, một siêu tìm kiếm (meta-heuristic) có thể coi là một
phương thức tìm kiếm đa năng.
ACO là một meta-heuristic, trong đó một tập các con kiến nhân tạo phối hợp
tìm kiếm các giải pháp tốt cho các vấn đề về tối ưu rời rạc. Sự phối hợp là yếu
tố cốt lõi của các thuật toán ACO. Các con kiến nhân tạo liên lạc với nhau
thông qua trung gian mà ta thường gọi là mùi.

Các thuật toán ACO được sử dụng để giải quyết các vấn đề về tối ưu tổ hợp
tĩnh và động. Các vấn đề tĩnh là các vấn đề mà ở đó các đặc tính của vấn đề là
5


khơng thay đổi trong suốt q trình giải quyết vấn đề. Cịn các vấn đề động thì
ngược lại là một hàm các tham số mà giá trị của nó là động hay thay đổi trong
quá trình giải quyết vấn đề, ví dụ bài tốn người đưa thư là một vấn đề
dynamic problem.
Tối ưu hóa đàn kiến ACO (Ant Colony Optimization) lần đầu tiên được
Marco Dorigo giới thiệu vào năm 1992, còn được gọi là Hệ thống đàn kiến AS
(Ant System). AS ban đầu được áp dụng cho bài toán người bán hàng
(TSP) [4], [9], [10].
Kể từ năm 1995 Dorigo, Gambardella và Stützle đã phát triển các sơ đồ AS
khác nhau. Dorigo và Gambardella đã đề xuất Hệ thống bầy kiến - Ant Colony
System (ACS) trong khi Stützle và Hoos đề xuất Max-Min Ant System
(MMAS). MMAS là một hệ thống cải tiến hệ thống AS ban đầu và được đánh
giá là hệ thống tính tốn trong tương lai [4], [8], [9]. Tất cả đều áp dụng giải
bài toán người bán hàng đối xứng hay không đối xứng và cho kết quả tối ưu.
Năm 1996, trong bài báo cơng nghệ của mình M. Dorigo và L.M.
Gambardella đã công bố hệ thống Ant Conoly System. Đây là hệ thống đề cập
đến cách học phối hợp áp dụng cho bài toán TSP [1], [4], [10]. Sau đó, vào
năm 1997, G. Di Caro và M. Dorigo đã đề xuất hệ thống AntNet. Đây là cách
tiếp cận về định hướng sự thích nghi. Và phiên bản cuối cùng của hệ thống
AntNet về điều khiển mạng truyền thông đã được công bố vào năm 1998 [4].
Vào năm 2001, C. Blum, A. Roli, và M. Dorigo đã cho công bố về hệ thống
đàn kiến mới là Hyper Cube - ACO. Phiên bản mở rộng tiếp đó đã được công
bố vào năm 2004 [4], [6], [9]. Hầu hết các nghiên cứu gần đây về ACO tập
trung vào việc phát triển các thuật toán biến thể để làm tăng hiệu năng tính
tốn của thuật tốn Ant System ban đầu để ứng dụng ngày càng nhiều vào các

lĩnh vực cụ thể.

1.2 Mô phỏng hành vi thực tế của đàn kiến trong tự nhiên
1.2.1 Mô tả hành vi đàn kiến trong tự nhiên

6


Trong tự nhiên, từ sự cảm nhận một cách trực quan thì lồi kiến được
xem như là mù hồn tồn và hành động của chúng mang tính chất mị mẫm.
Một kết quả nghiên cứu hết sức quan trọng sớm được công nhận là mọi hành
vi của đàn kiến như: quá trình trao đổi thơng tin giữa các con kiến với nhau
hoặc giữa các con kiến với mơi trường bên ngồi đều dựa trên việc sử dụng
một chất được chính mỗi con kiến tạo ra. Hóa chất có mùi này được gọi là
Pheromones [1], [4], [6].
Theo phản xạ tự nhiên, trong quá trình di chuyển các con kiến đi đến
đâu sẽ tự động xịt chất có mùi pheromones ra đến đó. Tại mỗi vị trí di
chuyển, một con kiến sẽ quyết định lựa chọn hướng đi dựa trên nồng độ chất
pheromones của hướng đó, ưu tiên lựa chọn hướng có nồng độ chất
pheromones cao hơn. Trong trường hợp tại vị trí mà nồng độ chất
pheromones bằng nhau hoặc nồng độ chất pheromones là khơng có thì con
kiến sẽ quyết định lựa chọn hướng đi một cách ngẫu nhiên. Cứ như thế, các
con kiến sẽ đi theo dấu chân của nhau và tạo nên một con đường đi của cả
đàn kiến mà chúng ta thường quan sát thấy trong tự nhiên.
Các lĩnh vực nghiên cứu về “Thuật toán đàn kiến” đều dựa trên việc
quan sát hành vi thực tế của đàn kiến, sau đó sẽ sử dụng có mơ hình như một
nguồn cảm hứng, làm nền tảng để xây dựng nên các thuật toán mới để giải
quyết các vấn đề về tối ưu hóa cũng như các vấn đề về điểu khiển, xử lý
phân tán.
1.2.2 Thí nghiệm chiếc cầu đơi

Hành vi đi kiếm ăn của đàn kiến được quan sát cụ thể trong thực tê ví
dụ một số lồi kiến thợ (nghiên cứu của Goss – năm 1989), kiến
Linepithema Argentina, kiến Lasius Germani (nghiên cứu của Bonabeau –
năm 1990) đều cho rằng q trình giao tiếp, trao đổi thơng tin của kiến đều
dựa trên một yếu tố trung gian đó là nồng độ pheromones [4], [6].
Trong quá trình di chuyển từ tổ đến nguồn thức ăn và ngược lại,
chúng đã lưu lại dấu tích của nồng độ pheromones trên đường đi, từ đó hình
thành nên một “vết mùi pheromones”. Các con kiến có thể ngửi mùi
pheromones, chúng có xu hướng sẽ lựa chọn đường đi theo xác suất, đường
7


đi này sẽ được đánh dấu dựa trên hướng đi nơi có nồng độ chất pheromones
cao.
Sự gửi vết mùi pheromones mơ phỏng hành vi của một số lồi kiến đã
được kiểm tra trong các thử nghiệm của một số nhà nghiên cứu. Một trong
những thí nghiệm nổi bật nhất là thí nghiệm chiếc cầu đơi được thiết kế bởi
Denebourg và các đồng nghiệp [4]. Họ tiến hành xây dựng một cây cầu kết
nối tổ của đàn kiến với nguồn thức ăn của chúng. Các nhà khoa học đã thử
nghiệm với các tỉ lệ r = ll / ls giữa độ dài hai nhánh của cây cầu (trong đó ll là
độ dài của nhánh dài và ls là độ dài của nhánh ngắn hơn).
Trong lần thử nghiệm thứ nhất, tỉ lệ độ dài hai nhánh của cây cầu là r
= 1 (ll = ls) (Hình 1.1a). Ban đầu, thì các con kiến được lựa chọn đường đi từ
tổ đến nguồn thức ăn và ngược lại một cách ngẫu nhiên và với cùng một xác
suất. Việc lựa chọn một trong hai nhánh của cây cầu được quan sát cẩn thận
theo thời gian. Kết quả là: mặc dù khi khởi hành các con kiến lựa chọn
đường đi một cách ngẫu nhiên. Sau đó theo thời gian, tất cả các con kiến đều
sử dụng chung một nhánh của cây cầu.

Hình 1.1 Thí nghiệm chiếc cầu đơi. (a) Hai nhánh có kích thước bằng nhau,

(b) Một nhánh có kích thước gấp đơi nhánh kia
Kết quả này được giải thích như sau:
Khi khởi hành, trên 2 nhánh của cây cầu đều chưa có pheromones. Do
đó, các con kiến có thể chọn một trong các nhánh với cùng một xác suất.
Tuy nhiên, do sự lựa chọn là ngẫu nhiên lên sau một thời gian số lượng kiến
8


đi trên những các nhánh sẽ khác nhau. Bởi vì loài kiến sẽ gửi chất
pheromones trong khi di chuyển, dần dần số lượng pheromones trên những
nhánh cũng sẽ khác nhau theo thời gian, điều này càng kích thích thêm đàn
kiến sẽ lựa chọn nhánh có nồng độ chất pheromones cao hơn, và như vậy
đến một thời gian nào đó tất cả các con kiến sẽ hội tụ về cùng một nhánh.
Quá trình này được gọi là “tự xúc tác” hay “phản hồi tích cực”. Trong
thực tế, một ví dụ về tính tự tổ chức hành vi của đàn kiến: mơ hình vĩ mơ
(tương ứng với sự hội tụ về một nhánh) được xây dựng từ các tiến trình và
sự tham gia tương tác ở nơi được gọi là mức độ “hiển vi” (theo định nghĩa
của Camazine, Deneubourg và các đồng nghiệp). Trong trường hợp của
chúng ta, các con kiến cùng hội tụ về một nhánh thể hiện ở mức hành vi
mang tính tập thể của bầy đàn, điều đó có thể được giải thích bởi hoạt động
mang tính hiển vi của lồi kiến, hoặc bởi q trình tương tác cục bộ giữa các
cá thể trong một đàn kiến. Đó cũng là một ví dụ về q trình truyền thơng tin
một cách gián Tổ Thức ăn Tổ Thức ăn (a) (b) tiếp thông qua sự tương tác
với môi trường (stigmergy communication), các con kiến phối hợp các hoạt
động của chúng, khai thác thông tin liên lạc một cách gián tiếp qua trung
gian bằng những thay đổi của môi trường mà chúng di chuyển trong đó.
Trong thí nghiệm thứ hai, tỷ lệ về độ dài giữa hai nhánh của cây cầu
được thiết lập là r = 2, do đó chiều đường đi của nhánh dài sẽ gấp 2 lần so
với nhánh ngắn (Hình 1.1b). Trong trường hợp này, ở hầu hết các thử
nghiệm thì sau một khoảng thời gian thì tất cả các con kiến chỉ lựa

chọn đường đi ở nhánh ngắn hơn. Trong thí nghiệm thứ hai, các các kiến
rời khỏi tổ để khám phá môi trường xung quanh và đến một điểm quyết
định, tại đó chúng phải lựa chọn một trong hai nhánh. Vì lý do ban đầu hai
nhánh của cây cầu đều xuất hiện như nhau trước lũ kiến nên chúng sẽ lựa
chọn một cách ngẫu nhiên. Vì thế, có thế dự kiến rằng, trung bình thì một
nửa số kiến sẽ chọn nhánh ngắn và nửa còn lại sẽ chọn nhánh dài, mặc dù
các dao động ngẫu nhiên đôi khi có thể ưu tiên chọn một nhánh này hoặc
nhánh khác.

9


Tuy nhiên, thí nghiệm này được thiết lập để trình bày một sự khác biệt
đáng chú ý đối với thí nghiệm trước đó: bởi vì với một nhánh có chiều dài
ngắn hơn nhánh cịn lại thì các con kiến sẽ chọn nhánh ngắn đầu tiên để có
thể đạt đến nguồn thức ăn và cũng là nhánh để bắt đầu quá trình quay ngược
về tổ. Nhưng sau đó, khi chúng phải đưa ra quyết định lựa chọn giữa nhánh
ngắn và nhánh dài, khi đó thì nồng độ chất pheromones ở nhánh nào cao hơn
sẽ được ưu tiên lựa chọn làm quyết định của chúng. Vì thế, nồng độ
chất pheromones sẽ được tích lũy ngày càng cao ở nhánh ngắn, và điều này
sẽ được rút kinh nghiệm đối với các con kiến đi sau do q trình “tự xúc tác”
đã được mơ tả phía trên.
Q trình trao đổi thơng tin gián tiếp qua sự biến đổi của mơi trường,
q trình “tự xúc tác” và độ dài của con đường chính là nhân tố chính của
việc lựa chọn đường. Điều thú vị có thể quan sát được như sau: ngay cả khi
nhánh dài gấp đơi nhánh ngắn thì khơng phải tất cả các con kiến đều chọn
nhánh ngắn, mà một tỷ lệ nhỏ con kiến trong số chúng vẫn lựa chọn đường
đi ở nhánh dài hơn. Trường hợp này có thể được diễn giải như là một loại
“con đường khám phá” [4].
Khi đàn kiến hội tụ về một nhánh và xây dựng được một kết nối giữa

tổ kiến và nguồn thứ ăn. Chúng ta quan sát hiện tượng thú vị trong một thí
nghiệm mở rộng: khi khởi đầu chỉ có nhánh dài được đưa vào phạm vi đàn
kiến di chuyển qua; sau 30 phút thì một nhánh ngắn hơn được thêm vào
(Hình 1.2). Trong trường hợp này thì nhánh ngắn khơng được lựa chọn
thường xuyên và đàn kiến hiện đang mắc trên nhánh dài. Điều này có thể
được giải thích bởi nồng độ chất pheromones ở nhánh dài cao và làm chậm
tốc độ bay hơi của chất pheromones. Thực tế, đa số các con kiến đều chọn
nhánh dài vì tại nhánh này nồng độ pheromones cao, và hành vi “tự xúc tác”
của chúng tiếp tục được củng cố trên nhánh dài, ngay cả khi có sự xuất hiện
của nhánh ngắn. Q trình bốc hơi của pheromones rất có lợi cho q trình
thăm dị, khám phá ra những con đường mới, tuy nhiên quá trình bốc hơi
này diễn ra khá chậm: thời gian tồn tại của pheromones được so sánh với
thời gian tiến hành cuộc thử nghiệm, có nghĩa là chất pheromones bốc hơi
10


quá chậm để cho các con kiến có thể “quên” đi con đường không tối ưu mà
chúng đã hội tụ để có thể khám phá ra con đường mới ngắn hơn và có thể
“học được”.

(a)

(b)

Hình 1.2 Thí nghiệm chiếc cầu đơi mở rộng.
Khi khởi tạo thí nghiệm, chiếc cầu chỉ có 1 nhành dài (a). Sau 30 phút, một
tình huống mới xuất hiện, một nhánh ngắn hơn được nối vào trên chiếc cầu (b)
1.2.3 Mơ hình ngẫu nhiên
Deneubourg và các cộng sự của ông (Deneubourg et al, 1990; Goss et
al, 1989) đã đề xuất một mơ hình ngẫu nhiên đơn giản và hết sức đầy đủ mô

tả sự năng động của đàn kiến như đã quan sát được trong thí nghiệm chiếc
cầu đôi [1] [4], [6]. Điều này thể hiện được vấn đề là đàn kiến ln tìm cách
tối ưu hành vi của chúng trong quá trình di chuyển từ tổ đến nguồn thức ăn
và ngược lại.
Trong mơ hình này, cần xác định:

11


+ là số lượng kiến bò qua chiếc cầu tại mỗi hướng với một tốc độ
không đổi là v (cm/s), và chúng gửi lại một lượng chất pheromones
trên nhánh đó.
+ Chiều dài của nhánh ngắn là ls (cm).
+ Chiều dài nhánh dài là ll (cm).
Khi đó, nếu một con kiến chọn nhánh ngắn hơn để đi qua thì sẽ tốn thời gian
ts = ls/v (giây - s); trong khi nếu chọn nhánh dài sẽ tốn thời gian r*ts (giây), với r =
ll/ls.
Pia(t) là xác suất một con kiến đến tại điểm quyết định i

{1,2} lựa chọn

nhánh
a

{s, l}, với s và l là biểu thị tương ứng cho nhánh ngắn và nhánh dài, tại thời

điểm t ta xây dựng một hàm biểu diễn tổng số nồng độ pheromone là
trên
một nhánh, hàm này tỷ lệ thuận với tổng số lượng kiến sử dụng các nhánh cho đến
thời điểm t.

Ví dụ: xác suất pis(t) của việc lựa chọn nhánh ngắn như sau:

Hàm xác định xác suất tại công thức (1.1) cũng như giá trị = 2 đều bắt
nguồn từ thí nghiệm vết mùi pheromones [1], [4], [6]. Trong đó, p il(t) cũng được
tính tương tự, với pis(t) + pil(t) = 1.
Mơ hình này giả định rằng, nồng độ pheromones trên một nhánh tỷ lệ thuận
với số kiến đã sử dụng nhánh đó. Hay nói cách khác, mơ hình này được xem như là
khơng có sự bốc hơi của pheromones. Và giả thiết này chỉ phù hợp ở thí nghiệm
quan sát trong thời gian cần thiết để đàn kiến hội tụ về đường đi ngắn nhất
có theo thứ tự độ lớn là thời gian tồn tại của pheromones (Goss et al.,1989;
Beckers, Deneubourg, & Goss, 1993).

12


Các phương trình vi phân mơ tả q trình phát triển của mơ hình xác suất
thống kê này là như sau:

Phương trình (1.2) có thể được giải thích như sau: tại thời điểm t, sự thay đổi
lượng mùi trên nhánh s tại điểm quyết định i được tính bởi lượng kiến đi qua
(giải sử là hằng số), nhân với xác xuất chọn nhánh ngắn hơn tại điểm quyết định j
tại thời điểm t – ts và cộng với
nhân với xác suất lựa chọn nhánh ngắn hơn tại
điểm quyết định i tại thời điểm t. Hằng số t s thể hiện khoảng thời gian trễ cần thiết
để một con kiến đi qua nhánh ngắn.
Phương trình (1.3) diễn giải điều tương tự với nhánh dài, ngoại trừ thời gian
trễ là r * ts.
Trong mơ hình này đàn kiến gửi lại vết mùi pheromones của chúng trên cả
hai đường đi: từ tổ đến nguồn thức ăn và quay trở lại tổ. Sự di chuyển này là một
hành vi ứng xử cần thiết để có được sự hội tụ của đàn kiến hướng về nhánh ngắn.

Trong thực tế, nếu chúng ta xem mơ hình mà trong đó các con kiến chỉ gửi nồng
độ pheromones trong suốt quá trình tiến tới nguồn thức ăn hoặc chỉ riêng suốt q
trình quay trở về tổ, sau đó kết quả là đàn kiến không thể lựa chọn nhánh ngắn.
Quá trình quan sát đàn kiến thực tế đã xác nhận rằng đàn kiến đã gửi nồng độ
pheromones chỉ khi chúng quay trở về tổ và khơng thể tìm thấy đường đi ngắn nhất
giữa tổ của chúng và nguồn thức ăn.

13


CHƯƠNG 2. GIỚI THIỆU BÀI TOÁN KNAPSACK VÀ GIẢI
QUYẾT BẰNG THUẬT TỐN ĐÃ BIẾT
2.1 Tổng quan bài tốn
Hãy tưởng tượng bạn là một tên trộm đang cướp một khu trưng bày đồ trang
sức và đá quý trong bảo tàng. Mà đây lại là lần đầu của bạn, bạn khơng có kinh
nghiệm vì vậy bạn chỉ mang theo đúng một cái ba lơ. Mục tiêu lúc đó của bạn phải
là lấy đi những đồ vật có giá trị nhất mà lại vừa đủ để không làm túi của bạn quá
tải khiến nó bị vỡ hoặc quá nặng để mang theo. Làm thế nào để bạn chọn trong
đống trang sức đó để tối đa hóa chiến lợi phẩm của bạn? Bạn hồn tồn có thể liệt
kê tất cả các hiện vật và trọng lượng của chúng để tìm ra câu trả lời bằng tay.
Nhưng lại có quá nhiều thứ món để cần phải tính tốn, càng nhiều sự lựa chọn sẽ
càng phức tạp hơn so với năng lực có hạn của một người.
Tình huống tiến thối lưỡng nan này hay cịn được gọi là "bài toán cái túi"
(knapsack problem), thuộc về một loại bài toán toán học nổi tiếng với việc sử dụng
14


tối ưu các giới hạn của máy tính. Bài tốn cái túi là một bài tốn trong tối ưu hóa tổ
hợp: Cho một tập hợp các đồ vật, mỗi đồ vật có trọng lượng và giá trị, hãy xác
định số lượng của đồ vật cần đưa vào một bộ sưu tập sao cho tổng trọng lượng nhỏ

hơn hoặc bằng một giới hạn nhất định và tổng giá trị càng lớn càng tốt. Tên gọi của
nó bắt nguồn từ vấn đề mà ai đó phải đối mặt là có một chiếc túi có kích thước cố
định và phải lấp đầy nó với những món đồ có giá trị nhất. Vấn đề thường nảy sinh
trong việc phân bổ nguồn lực trong đó những người ra quyết định phải lựa chọn từ
một tập hợp các dự án hoặc nhiệm vụ không thể phân chia tương ứng với một ngân
sách cố định hoặc hạn chế về mặt thời gian.
Bài toán cái túi thuộc loại bài toán “NP”, viết tắt của “nondeterministic
polynomial time” (Thuật toán bất định trong thời gian đa thức). Tên đề cập đến
cách các vấn đề này buộc máy tính phải trải qua nhiều bước để đi đến giải pháp và
số lượng tăng lên đáng kể dựa trên kích thước của các đầu vào.
Bài toán này đã được nghiên cứu trong hơn một thế kỷ, với các cơng trình
đầu tiên có niên đại từ năm 1897. Cái tên "knapsack problem" có từ những cơng
trình đầu tiên của nhà tốn học Tobias Dantzig (1884–1956), và đề cập đến vấn đề
phổ biến là đóng gói những vật có giá trị hoặc hữu ích nhất mà không làm quá tải
hành lý.
2.2 Ứng dụng của bài toán Cái túi
Carsten Murawski, giáo sư tại Đại học Melbourne, Úc, cho biết: “Rất nhiều
vấn đề chúng ta gặp phải trong cuộc sống, có thể là liên quan đến kinh doanh, tài
chính, bao gồm về cả logistics, tải trọng của container, máy bay - tất cả đều là
những vấn đề liên quan đến knapsack”. "Từ góc độ thực tế, bài toán knapsack rất
phổ biến trong cuộc sống hàng ngày."
Các bài tốn về cái túi xuất hiện trong q trình ra quyết định trong thế giới
thực ở nhiều lĩnh vực khác nhau, chẳng hạn như tìm ra cách ít lãng phí nhất để cắt
giảm nguyên liệu thô, lựa chọn đầu tư và danh mục đầu tư, lựa chọn tài sản để
chứng khốn hóa bằng tài sản, và tạo khóa cho Merkle – Hellman và các hệ thống
mật mã knapsack khác.
Một ứng dụng ban đầu của thuật toán knapsack là trong việc xây dựng và
cho điểm các bài kiểm tra, trong đó người dự thi có quyền lựa chọn câu hỏi mà họ
trả lời. Đối với các ví dụ nhỏ, đó là một quá trình khá đơn giản để cung cấp cho
15



người dự thi sự lựa chọn như vậy. Ví dụ, nếu một kỳ thi có 12 câu hỏi, mỗi câu có
giá trị 10 điểm, người dự thi chỉ cần trả lời 10 câu hỏi để đạt được số điểm tối đa
có thể là 100 điểm. Tuy nhiên, trong các bài kiểm tra có sự phân bố giá trị điểm
khơng đồng nhất, việc đưa ra các lựa chọn sẽ khó khăn hơn. Feuerman và Weiss đề
xuất một hệ thống trong đó học sinh được làm một bài kiểm tra không đồng nhất
với tổng số 125 điểm có thể. Học sinh được yêu cầu trả lời tất cả các câu hỏi trong
khả năng của mình. Trong số các tập hợp con có thể xảy ra của các bài tốn có
tổng giá trị điểm cộng lại lên đến 100, một thuật toán ba lô sẽ xác định tập hợp con
nào mang lại cho mỗi học sinh điểm cao nhất có thể.
Vấn đề về cái túi và người anh em họ NP-complete của nó cịn ở khắp mọi
nơi trong cuộc sống thực. Ví dụ, bạn có thể đã nghe nói về vấn đề “nhân viên bán
hàng lưu động”, đây cũng là bài toán NP hồn chỉnh. Thách thức ở đây là tìm ra
con đường ngắn nhất để nhân viên bán hàng đi lại giữa một số thành phố nhất định
trước khi quay trở lại điểm xuất phát. Liên quan mật thiết là vấn đề định tuyến
phương tiện, trong đó xem xét nhiều phương tiện thực hiện giao hàng.
Luciana Buriol, phó giáo sư tại Đại học Liên bang Rio Grande do Sul ở
Brazil, đã nghiên cứu vấn đề này để cố gắng tìm ra những cách tiếp cận mới cho
lĩnh vực chăm sóc sức khỏe. Cơ đã làm việc với dịch vụ chăm sóc tại nhà, nơi các
bác sĩ và y tá đến thăm bệnh nhân tại nhà của họ và giúp tối ưu hóa các tuyến
đường của họ, với một số lượng xe hơi hạn chế để vận chuyển.
Một nghiên cứu năm 1999 của Kho lưu trữ thuật toán Đại học Stony Brook
cho thấy rằng, trong số 75 bài toán thuật toán, bài toán cái cặp là bài toán phổ biến
thứ 19 và cần thứ ba sau bài toán cây hậu tố (suffix tree) và bài tốn đóng gói
thùng (the bin packing problems).

2.3 Độ phức tạp tính tốn
Vấn đề cái cặp rất thú vị từ quan điểm của khoa học máy tính vì nhiều lý do:
Dạng bài toán quyết định của bài toán ba lơ (Có thể đạt được giá trị ít nhất là

V mà không vượt quá trọng số W không?) Là NP-đầy đủ, do đó khơng có thuật
tốn nào được biết vừa đúng vừa nhanh (đa thức-thời gian) trong mọi trường hợp.
16


Mặc dù bài tốn quyết định là hồn thành NP, nhưng bài tốn tối ưu hóa thì
khơng, việc giải quyết nó ít nhất cũng khó như bài tốn quyết định và khơng có
thuật tốn đa thức nào có thể cho biết, đưa ra một giải pháp, liệu nó có phải là tối
ưu hay khơng (có nghĩa là rằng khơng có giải pháp nào có V lớn hơn, do đó giải
quyết vấn đề quyết định NP-đầy đủ).
Có một thuật tốn thời gian giả đa thức sử dụng lập trình động.
Có một lược đồ xấp xỉ thời gian đa thức đầy đủ, sử dụng thuật toán thời gian
đa thức giả làm chương trình con, được mơ tả bên dưới.
Tuy nhiên, nhiều trường hợp phát sinh trong thực tế và "các trường hợp ngẫu
nhiên" từ một số bản phân phối vẫn có thể được giải quyết chính xác.
Có một mối liên hệ giữa vấn đề "quyết định" và "tối ưu hóa" ở chỗ nếu tồn
tại một thuật toán đa thức giải quyết vấn đề "quyết định", thì người ta có thể tìm
giá trị lớn nhất cho bài tốn tối ưu hóa trong thời gian đa thức bằng cách áp dụng
thuật toán này lặp đi lặp lại trong khi tăng giá trị của k. Mặt khác, nếu một thuật
tốn tìm được giá trị tối ưu của bài toán tối ưu trong thời gian đa thức, thì bài tốn
quyết định có thể được giải trong thời gian đa thức bằng cách so sánh giá trị của
kết quả giải của thuật toán này với giá trị của k. Do đó, cả hai phiên bản của vấn đề
đều có độ khó tương tự nhau.
Một chủ đề trong tài liệu nghiên cứu là xác định các trường hợp "khó" của
vấn đề cái túi đeo chéo trơng như thế nào, hoặc nhìn theo cách khác, để xác định
đặc tính nào của các trường hợp trong thực tế có thể khiến chúng dễ giải quyết hơn
trường hợp xấu nhất của chúng. Hành vi NP-hoàn chỉnh cho thấy. Mục tiêu trong
việc tìm kiếm các cá thể "cứng" này là để sử dụng chúng trong các hệ thống mật
mã khóa cơng khai, chẳng hạn như hệ thống mật mã Merkle-Hellman knapsack.
Hơn nữa, điều đáng chú ý là thực tế là độ cứng của bài tốn ba lơ phụ thuộc

vào dạng đầu vào. Nếu trọng số và lợi nhuận được cho dưới dạng số ngun, thì nó
là NP-đầy đủ yếu, trong khi đó là NP-đầy đủ mạnh nếu trọng số và lợi nhuận được
cho dưới dạng số hữu tỉ. Tuy nhiên, trong trường hợp trọng số hữu tỉ và lợi nhuận,
nó vẫn thừa nhận một lược đồ gần đúng thời gian đa thức đầy đủ.

17


2.4 Các thuật toán để giải quyết bài toán Knapsach
2.4.1 Khái niệm thuật toán quy hoạch động
a) Bài toán tối ưu:

Bài tốn tối ưu gồm có 1 hàm f gọi là hàm mục tiêu hay hàm đánh
giá; các các hàm g1, g2, …, gn cho giá trị logic gọi là hàm ràng buộc.
u cầu của bài tốn là tìm một cấu hình x thoả mãn tất cả các ràng buộc
g1, g2, …, gn:gi(x) = TRUE ( i:1 i n) và x là tốt nhất, theo nghĩa không
tồn tại một cấu hình y nào khác thoả mãn các hàm ràng buộc mà f(y) tốt
hơn f(x).
Bài toán tối ưu là bài toán thường có nhiều nghiệm chấp nhận được và
mỗi nghiệm có một giá trị đánh giá. Mục tiêu đặt ra là tìm nghiệm tối ưu,
đó là nghiệm có giá trị đánh giá lớn nhất hoặc nhỏ nhất (tối ưu).
Một số ví dụ về bài tốn tối ưu: 
Ví dụ 1.1: 
Trong mặt phẳng tọa độ Oxy tìm tọa độ (x, y) để tổng x + y đạt giá trị lớn
nhất mà x2 + y 2 ≤ 1. Ở bài toán trên ta thấy: Hàm mục tiêu: x + y max
Hàm ràng buộc: x 2 +y2 ≤ 1. 
Ví dụ 1.2: 
Bài tốn xếp Ba lơ Có một ba lơ có thể chứa tối đa trọng lượng M và có n
đồ vật (n 100), mỗi đồ vật có trọng lượng wi và giá trị bi ; M, wi , bi là
các số nguyên. Hãy chọn và xếp các đồ vật vào ba lô để tổng giá trị của

ba lơ là lớn nhất. Với bài tốn trên ta thấy: 
Hàm mục tiêu:  Σb  -> max, i = 1, 2, …, n 
i

Hàm ràng buộc: Σw  <= M , i = 1, 2, …, n . 
i

Tóm lại, bài tốn tối ưu rất phong phú, đa dạng, được ứng dụng nhiều
trong thực tế nhưng chúng ta cũng cần biết rằng đa số các bài tốn tối ưu
là khơng giải được hoặc chưa giải được. 
Công thức truy hồi (Hệ thức truy hồi):
Khái niệm: Công thức truy hồi là công thức thể hiện quan hệ giữa các
bước trong một bài toán và kết quả của bước sau thường dựa vào kết quả
18


của các bước trước đó. Kết quả của bước cuối cùng là kết quả của bài
toán.
b) Phương pháp

Chia để trị:
“Chia để trị” là việc 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 tốn con này 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à phương pháp thông dụng nhất trong Tin học. 
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 có bản chất đệ quy thì bài tốn P có thể được giải
bằng lời giải của bài tốn P’ có dạng giống như P. Tuy nhiên, chúng ta
cần lưu ý rằng: P’ tuy 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.
c) Khái niệm thuật toán

Khái niệm:
Phương pháp quy hoạch động (Dynamic Programming) 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
toà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.
Như vậy, Quy hoạch động = Chia để trị + Mảng (lưu lại kết quả).
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 đệ qui, 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.
Điểm khác nhau cơ bản giữa quy hoạch động và phương pháp đệ quy là:


Phương pháp đệ quy giải quyết bài toán theo hướng topdown,
nghĩa là để giải bài toán ban đầu, ta phải đi giải tất cả các bài toán
19


con của nó. Đâ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 tốn con giống nhau nào đó.
 Phương pháp quy hoạch động sử dụng nguyên lý bottom-up, nghĩa
là "đi từ dưới lên". Đầu tiên, ta sẽ phải giải các bài tốn con đơ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 yêu cầ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 độ.
d) Đặc điểm chung của quy hoạch động:

Quy hoạch động bắt đầu từ việc giải tất cả các bài toán nhỏ nhất (bài toán
cơ sở) để từ đó từng bước giải quyết những bài tốn lớn hơn cho tới khi
giải được bài toán lớn nhất (bài tốn ban đầu).
Quy hoạch động cần phải có bảng phương án.
Ý tưởng cơ bản của phương pháp quy hoạch động là tránh tính tốn lại
các bài tốn con đã xét, 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 độ. 
Tóm lại:
 Quy hoạch động dùng để giải quyết bài toán tối ưu theo nguyên lý

“chia để trị” như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 bài toán theo hướng đệ quy.
 Quy hoạch động làm giảm độ phức tạp, giảm thời gian giải quyết
bài toán.
 Quy hoạch động thường tiếp cận theo hướng từ dưới lên (Bottom –
up).
e) Các cách thực hiện phương pháp quy hoạch động
Quy hoạch động thường dùng một trong 2 cách tiếp cận sau:
 Tiếp cận từ dưới lên (bottom up)
 Tiếp cận từ trên xuống (top down)
Cách tiếp cận từ dưới lên hiệu quả hơn nên cách tiếp cận từ dưới lên (bottom
up) thường được sử dụng nhiều hơn.
20




×