Tính hiệu quả: tính hiệu quả của thuật toán được đánh giá dựa trên một số tiêu chuẩn như khối lượng tính toán, không gian và thời gian khi thuật toán được thi hành.Tính hiệu quả của thuậ
Trang 1ĐẠI HỌC QUỐC GIA TP.HCM TRƯỜNG ĐẠI HỌC CÔNG NGHỆ THÔNG TIN
BÀI TIỂU LUẬN MÔN THUẬT TOÁN VÀ PHƯƠNG PHÁP
GIẢI QUYẾT VẤN ĐỀ
ĐỀ TÀI:
THUẬT TOÁN VÀ ỨNG DỤNG THUẬT GIẢI DI TRUYỀN CHO BÀI TOÁN
NGƯỜI DU LỊCH
GVHD: PGS.TS ĐỖ VĂN NHƠN HVTH: TRẦN KHÁNH AN
MSHV: CH1301076 LỚP: CH08-02
Trang 2TP.HCM, tháng 10 năm 2014
MỤC LỤC
M Đ UỞ ĐẦU ẦU 3
CHƯƠNG 1: VẤN ĐỀ VÀ THUẬT TOÁN 4
1 Vấn đề và biểu diễn vấn đề 4
1.1 Khái niệm vấn đề: 4
1.2 Xác định vấn đề: 4
2 Thuật toán 4
2.1 Định nghĩa thuật toán 4
2.2 Các đặc trưng cơ bản của thuật toán 4
2.3 Phân tích thuật toán 5
3 Quy trình xây dựng giải pháp cho vấn đề 7
3.1 Mô hình hóa vấn đề: 7
3.2 Thiết kế thuật toán 7
3.3 Diễn giải thuật toán 7
3.4 Chứng minh tính đúng đắn của thuật toán 7
3.5 Tính hiệu quả về phương diện lý thuyết và thực hành 8
3.6 Tối ưu thuật toán 8
CHƯƠNG 2: CÁC PHƯƠNG PHÁP GIẢI QUYẾT VẤN ĐỀ 8
1 Phương pháp trực tiếp: 8
2 Phương pháp gián tiếp: 9
2.1 Phương pháp chia để trị (Divide - and - Conquer) 10
2.3 Phương pháp quay lui (Back Tracking) 10
2.4 Phương pháp nhánh cận (Branch And Bound) 12
Trang 33 Phương pháp Heuristic 14
Mở rộng khái niệm thuật toán : thuật giải 14
CHƯƠNG 3: GIẢI THUẬT DI TRUYỀN (GA) 15
1 Giới thiệu về giải thuật di truyền 15
2 Các khái niệm cơ bản 17
3 Mô hình giải thuật di truyền 18
4 Các tham số của GA 19
5 Các cách mã hoá NST 19
6 Khởi tạo quần thể ban đầu 21
7 Các toán tử di truyền 22
8 Chiến lược nạp lại quần thể 23
CHƯƠNG 4: BÀI TOÁN NGƯỜI DU LỊCH 24
1 Xây dựng giải pháp cho bài toán người du lịch 24
1.1 Giới thiệu bài toán 24
1.2 Phát biểu bài toán 24
1.3 Mô hình hóa vấn đề 24
1.4 Thiết kế thuật toán 25
1.5 Đánh giá thuật toán 26
1.6 Hiệu chỉnh nâng cao hiệu quả của thuật toán 26
2 Áp dụng giải thuật di truyền giải bài toán người du lịch 26
3 Chương trình 27
TÀI LI U THAM KH OỆU THAM KHẢO ẢO 31
Trang 4MỞ ĐẦU
Thuật toán và cách thiết kế, đánh giá thuật toán đóng vai trò quan trọng đối với mỗi
kỹ sư công nghệ thông tin Nó cung cấp những kiến thức giúp phân tích và thiết kế thuậttoán, những kỹ năng cần thiết để giải quyết các bài toán, các vấn đề hay gặp trong lĩnhvực công nghệ thông tin
Để giải một bài toán, điều trước tiên là chúng ta phải có thuật toán Một câu hỏi đặt
ra là làm thế nào để tìm ra được thuật toán cho một bài toán? Lớp các bài toán được đặt
ra từ các ngành khoa học kỹ thuật, từ các lĩnh vực hoạt động thực tiễn của con người làhết sức phong phú và đa dạng Các thuật toán giải các lớp bài toán khác nhau cũng rấtkhác nhau Để giải quyết được chúng ta cần có các kỹ thuật để thiết kế thuật toán Mỗi kỹthuật có các tính chất riêng và chỉ thích hợp cho một số dạng bài toán nào đó Vì chúng takhông thể áp dụng máy móc một chiến lược cho một vấn đề, mà ta phải phân tích kỹ vấn
đề, cấu trúc của vấn đề, các đặc điểm của vấn đề sẽ quyết định chiến lược có khả năng ápdụng
Trong bài tiểu luận em tập trung nghiên cứu về thuật toán, các bước cơ bản để giảiquyết bài toán, các kỹ thuật thiết kế và phân tích thuật toán
Bài toán người du lịch là một trong những bài toán được nghiên cứu sâu nhất tronglĩnh vực tối ưu hoá Báo cáo này sẽ trình bày một hướng tiếp cận giải quyết bài toánngười du lịch sử dụng giải thuật di truỵền Giải thuật di truyền là hướng tiếp cận heuristicnhằm đưa ra lời giải tốt (có thể không là tối ưu nhất) khi mà không thể đưa ra một giảithuật chính xác hay việc vét cạn là trường hợp bất khả thi cho bài toán NP-Hard
Trang 5CHƯƠNG 1: VẤN ĐỀ VÀ THUẬT TOÁN
1 Vấn đề và biểu diễn vấn đề
1.1 Khái niệm vấn đề:
Vấn đề: là những tình huống không mong muốn hoặc có hại và cần phải được xử lý
và khắc phục
Là một điều đó là khó khăn để đạt được
Một cuộc tìm tòi bắt đầu từ điều kiện có sẵn nhất định để nghiên cứu hoặc chứng minh một sự thật, kết quả, hoặc quy luật
1.2 Xác định vấn đề:
Những yếu tố sau đây sẽ giúp xác định vấn đề một cách chính xác:
Tình huống, ngữ cảnh, cơ sở dữ liệu-thông tin-tri thức
Giả thiết
Mục tiêu, yêu cầu
Điều kiện, ràng buộc, phạm vi
2 Thuật toán
2.1 Định nghĩa thuật toán
Thuật toán là một khái niệm cơ sở của Toán học và Tin học Hiểu một cách đơn giản, thuật toán là một tập các hướng dẫn nhằm thực hiện một công việc nào đó Ðối với việc giải quyết một vấn đề - bài toán thì thuật toán có thể hiểu là một tập hữu hạn các hướng dẫn rõ ràng để người giải toán có thể theo đó mà giải quyết được vấn đề Như vậy,thuật toán là một phương pháp thể hiện lời giải của vấn đề - bài toán
Việc nghiên cứu về thuật toán có vai trò rất quan trọng trong khoa học máy tính vì máy tính chỉ giải quyết được vấn đề khi đã có hướng dẫn giải rõ ràng và đúng Nếu hướng dẫn giải sai hoặc không rõ ràng thì máy tính không thể giải đúng được bài toán Trong khoa học máy tính, thuật toán được định nghĩa là một dãy hữu hạn các bước khôngmập mờ và có thể thực thi được, quá trình hành động theo các bước này phải dừng và chođược kết quả như mong muốn
2.2 Các đặc trưng cơ bản của thuật toán.
a Tính hữu hạn: thuật toán bao giờ cũng phải kết thúc sau hữu hạn bước mặc dù
số bước này có thể rất lớn
b Tính xác định: các bước phải rõ ràng, thực hiện được ra một kết quả nào đó.
Trang 6c Tính chính xác: đảm bảo kết quả tính toán hay các thao tác thực hiện được là
chính xác
d Ðầu vào và đầu ra: mọi thuật toán, dù có đơn giản đến mấy cũng phải nhận dữ
liệu đầu vào, xử lý nó và cho ra kết quả cuối cùng
e. Tính hiệu quả: tính hiệu quả của thuật toán được đánh giá dựa trên một số tiêu
chuẩn như khối lượng tính toán, không gian và thời gian khi thuật toán được thi hành.Tính hiệu quả của thuật toán là một yếu tố quyết định để đánh giá, chọn lựa cách giảiquyết vấn đề-bài toán trên thực tế Có rất nhiều phương pháp để đánh giá tính hiệu quảcủa thuật toán Tiêu chuẩn được dùng rộng rãi để đánh giá là độ phức tạp của thuật toán
f. Tính tổng quát:thuật toán có tính tổng quát là thuật toán phải áp dụng được chomọi trường hợp của bài toán chứ không phải chỉ áp dụng được cho một số trường hợpriêng lẻ nào đó Chẳng hạn giải phương trình bậc hai sau đây bằng Delta đảm bảo đượctính chất này vì nó luôn giải được với mọi giá trị số thực a,b,c bất kỳ Tuy nhiên, khôngphải thuật toán nào cũng đảm bảo được tính tổng quát Trong thực tế, có lúc người ta chỉxây dựng thuật toán cho một dạng đặc trưng của bài toán mà thôi
2.3 Phân tích thuật toán.
Các loại thời gian tính mà ta sẽ quan tâm đến:
Thời gian tính tốt nhất: thời gian tối thiểu cần thiết để thực hiện thuật toán vớimọi bộ dữ liệu đầu vào kích thước
Thời gian tính trung bình: thời gian trung bình cần thiết để thực hiện thuật toántrên tập hữu hạn dữ liệu đầu vào kích thước
Thời gian tính xấu nhất: thời gian nhiều nhất cần thiết để thực hiện thuật toánvới mọi bộ dữ liệu đầu vào kích thước
Xem thời gian chạy của thuật toán là một hàm theo kích thước của dữ liệu nhập.Cách xác định xem số lượng các thao tác căn bản phụ thuộc vào kích thước input nhưsau:
n : kích thước input
Trang 7T(n) : số các thao tác căn bản
Ví dụ: Vấn đề tìm x trong một mảng một chiều
Thao tác căn bản: So sánh x với một phần tử trong mảng
Kích thước input: Số lượng các phần tử trong mảng
2.3.3 Sự phân lớp các thuật toán
Hầu hết các thuật toán đều có một tham số chính là N, thông thường đó là số lượngcác phần tử dữ liệu được xử lý mà ảnh hưởng rất nhiều tới thời gian chạy Tham số N cóthể là bậc của một đa thức, kích thước của một tập tin được sắp xếp hay tìm kiếm, số núttrong một đồ thị v.v
Hằng số: Hầu hết các chỉ thị của các chương trình đều được thực hiện một lần hay
nhiều nhất chỉ một vài lần Nếu tất cả các chỉ thị của cùng một chương trình có tính chấtnầy thì chúng ta sẽ nói rằng thời gian chạy của nó là hằng số Điều nầy hiển nhiên là hoàncảnh phấn đấu để đạt được trong việc thiết kế thuật toán
logN: Khi thời gian chạy của chương trình là logarit tức là thời gian chạy chương
trình tiến chậm khi N lớn dần Thời gian chạy thuộc loại nầy xuất hiện trong các chươngtrình mà giải một bài toán lớn bằng cách chuyển nó thành một bài toán nhỏ hơn, bằngcách cắt bỏ kích thước bớt một hằng số nào đó Với mục đích của chúng ta, thời gianchạy có được xem như nhỏ hơn một hằng số "lớn" Cơ số của logarit làm thay đổi hằng
số đó nhưng không nhiều: khi N là một ngàn thì logN là 3 nếu cơ số là 10, là 10 nếu cơ
số là 2; khi N là một triệu, logN được nhân gấp đôi Bất cứ khi nào N được nhân đôi,logN tăng lên thêm một hằng số, nhưng logN không bị nhân gấp đôi khi N tăng tới N2
N: Khi thời gian chạy của một chương trình là tuyến tính, nói chung đây trường hợp
mà một số lượng nhỏ các xử lý được làm cho mỗi phần tử dữ liệu nhập Khi N là mộttriệu thì thời gian chạy cũng cỡ như vậy Khi N được nhân gấp đôi thì thời gian chạycũng được nhân gấp đôi Đây là tình huống tối ưu cho một thuật toán mà phải xử lý N dữliệu nhập (hay sản sinh ra N dữ liệu xuất)
NlogN: Đây là thời gian chạy tăng dần lên cho các thuật toán mà giải một bài toán
bằng cách tách nó thành các bài toán con nhỏ hơn, kế đến giải quyết chúng một cách độclập và sau đó tổ hợp các lời giải Bởi vì thiếu một tính từ tốt hơn (có lẻ là "tuyến tínhlogarit"?), chúng ta nói rằng thời gian chạy của thuật toán như thế là "NlogN" Khi N làmột triệu, NlogN có lẽ khoảng hai mươi triệu Khi N được nhân gấp đôi, thời gian chạy
bị nhân lên nhiều hơn gấp đôi (nhưng không nhiều lắm)
N 2: Khi thời gian chạy của một thuật toán là bậc hai, trường hợp nầy chỉ có ý nghĩathực tế cho các bài toán tương đối nhỏ Thời gian bình phương thường tăng dần lên trongcác thuật toán mà xử lý tất cả các cặp phần tử dữ liệu (có thể là hai vòng lặp lồng nhau).Khi N là một ngàn thì thời gian chạy là một triệu Khi N được nhân đôi thì thời gian chạytăng lên gấp bốn lần
Trang 8N 3:Tương tự, một thuật toán mà xử lý các bộ ba của các phần tử dữ liệu (có lẻ là bavòng lặp lồng nhau) có thời gian chạy bậc ba và cũng chỉ có ý nghĩa thực tế trong các bàitoán nhỏ Khi N là một trăm thì thời gian chạy là một triệu Khi N được nhân đôi, thờigian chạy tăng lên gấp tám lần.
2 N: Một số ít thuật toán có thời gian chạy lũy thừa lại thích hợp trong một số trườnghợp thực tế, mặc dù các thuật toán như thế là "sự ép buộc thô bạo" để giải các bài toán.Khi N là hai mươi thì thời gian chạy là một triệu Khi N gấp đôi thì thời gian chạy đượcnâng lên lũy thừa hai!
3 Quy trình xây dựng giải pháp cho vấn đề
3.1 Mô hình hóa vấn đề:
Mục đích của việc mô hình hóa vấn đề là làm sáng tỏ vấn đề, giúp chúng ta có thểđưa ra được các lỗi hoặc các thiếu xót của vấn đề
3.2 Thiết kế thuật toán
Để giải một bài toán, điều trước tiên là chúng ta phải có thuật toán Một câu hỏi đặt
ra là làm thế nào để tìm ra được thuật toán cho một bài toán đã đặt ra? Lớp các bài toánđược đặt ra từ các ngành khoa học kỹ thuật, từ các lĩnh vực hoạt động của con người làhết sức phong phú và đa dạng Các thuật toán giải các lớp bài toán khác nhau cũng rấtkhác nhau Để thiết kế thuật toán ta có một số kỹ thuật thiết kế thuật toán chung như:Chia để trị (divide-and-conque), phương pháp tham lam (greedy method), qui hoạch động(dynamic programming) Việc nắm được các chiến lược thiết kế thuật toán này là hếtsức quan trọng và cần thiết, nó giúp cho ta dễ tìm ra các thuật toán mới cho các bài toánmới được đưa ra
3.3 Diễn giải thuật toán
Sau khi thiết kế thuật toán ta tiến hành diễn giải thuật toán đó Thông thường takhông nên cụ thể hóa ngay toàn bộ chương trình mà nên tiến hành theo phương pháp tinhchế từng bước từ tổng thế đến chi tiết hơn
Thuật toán có thể diễn đạt dưới nhiều hình thức, chẳng hạn dưới dạng lưu đồ, dạngngôn ngữ tự nhiên, dạng mã giả hoặc một ngôn ngữ lập trình nào đó
3.4 Chứng minh tính đúng đắn của thuật toán.
Khi một thuật toán được làm ra, ta cần phải chứng minh rằng, thuật toán khi đượcthực hiện sẽ cho ta kết quả đúng với mọi dữ liệu vào hợp lệ Điều này gọi là chứng minhtính đúng đắn của thuật toán Việc chứng minh tính đúng đắn của thuật toán là một côngviệc không dễ dàng Trong nhiều trường hợp, nó đòi hỏi ta phải có trình độ và khả năng
tư duy toán học tốt
Trang 93.5 Tính hiệu quả về phương diện lý thuyết và thực hành
Khi giải một vấn đề, chúng ta cần chọn trong số các thuật toán, một thuật toán màchúng ta cho là “tốt” nhất Vậy ta cần lựa chọn thuật toán dựa trên cơ sở nào? Thôngthường ta dựa trên hai tiêu chuẩn sau đây:
Thuật toán đơn giản, dễ hiểu, dễ cài đặt (dễ viết chương trình
Thuật toán sử dụng tiết kiệm nhất các nguồn tài nguyên của máy tính, vàđặc biệt chạy nhanh nhất có thể được
Khi ta viết một chương trình chỉ để sử dụng một số ít lần, và cái giá của thời gianviết chương trình vượt xa cái giá của chạy chương trình thì tiêu chuẩn thứ nhất là quantrọng nhất Nhưng có trường hợp ta cần viết các chương trình (hoặc thủ tục, hàm) để sửdụng nhiều lần, cho nhiều người sử dụng, khi đó giá của thời gian chạy chương trình sẽvượt xa giá viết nó Chẳng hạn, các thủ tục sắp xếp, tìm kiếm được sử dụng rất nhiều lần,bởi rất nhiều người trong các bài toán khác nhau Trong trường hợp này ta cần dựa trêntiêu chuẩn thứ hai Ta sẽ cài đặt thuật toán có thể sẽ rất phức tạp, miễn là chương trìnhnhận được chạy nhanh hơn so với các chương trình khác
Tiêu chuẩn hai được xem là tính hiệu quả của thuật toán Tính hiệu quả của thuật
toán bao gồm hai nhân tố cơ bản:
Dung lượng không gian nhớ cần thiết để lưu giữ các dữ liệu vào, các kếtquả tính toán trung gian và các kết quả của thuật toán
Thời gian cần thiết để thực hiện thuật toán (ta gọi là thời gian chạy) Chúng
ta chỉ quan tâm đến thời gian thực hiện thuật toán, có nghĩa là ta nói đến đánh giá thờigian thực hiện Một thuật toán có hiệu quả được xem là thuật toán có thời gian chạy íthơn so với các thuật toán khác
3.6 Tối ưu thuật toán
Tối ưu thuật toán tức là đi tìm một hàm mục tiêu có chi phí ít nhất, hay lớn nhấttrong một tập hợp các hàm khả dĩ để đạt được một mục đích cụ thể Hiểu theo cách thôngthường tối ưu là thủ tục giảm tối thiểu thời gian, không gian,… của thuật toán
CHƯƠNG 2: CÁC PHƯƠNG PHÁP GIẢI QUYẾT VẤN ĐỀ
Trang 10 Loại thứ hai, biểu diễn cho các bài toán có công thức giải gần đúng (côngthức tính sin, cos, giải phương trình siêu việt, …).
Ví dụ: giải phương trình bậc 2
Loại cuối cùng, biểu diễn các lời giải không tường minh bằng kỹ thuật đệquy
2 Phương pháp gián tiếp:
Được sử dụng khi chưa tìm ra lời giải chính xác của vấn đề Đây là cách tiếp cậnchủ yếu của loài người từ xưa đến nay Lời giải trực tiếp bao giờ cũng tốt hơn, nhưngkhông phải lúc nào cũng có
Mỗi phương pháp có các tính chất riêng và chỉ thích hợp cho một số dạng vấn đềnào đó Cần nhấn mạnh rằng, ta không thể áp dụng máy móc một chiến lược cho một vấn
đề, mà ta phải phân tích kỹ vấn đề Cấu trúc của vấn đề, các đặc điểm của vấn đề sẽ quyếtđịnh chiến lược có khả năng áp dụng
Đối với lớp các vấn đề giải được bằng thuật toán, dựa vào các đặc trưng của quátrình thiết kế của thuật toán cho vấn đề, ta có thể chỉ ra một số các phương pháp thiết kếthuật toán cơ bản sau đây:
Phương pháp chia để trị (Divide-and-Conquer method): Ý tưởng là chia dữ
liệu thành từng miền đủ nhỏ, giải bài toán trên các miền đã chia rồi tổng hợp kết quả lại.Chẳng hạn như thuật toán Quicksort
Phương pháp tham lam (Greedy Method): Ý tưởng là xác định trật tự xử lý
để có lợi nhất, Sắp xếp dữ liệu theo trật tự đó, rồi xử lý dữ liệu theo trật tự đã nêu Côngsức bỏ ra là tìm ra trật tự đó Chẳng hạn thuật toán tìm cây bao trùm nhỏ nhất(Shortest spanning Trees)
Phương pháp Quy hoạch động (Dynamic Programming method): Phương
pháp quy hoạch động dựa vào một nguyên lý, gọi là nguyên lý tối ưu của Bellman: “Nếu lời giải của bài toán là tối ưu thì lời giải của các bài toán con cũng tối ưu ” Phươngpháp này tổ chức tìm kiếm lời giải theo kiểu từ dưới lên Xuất phát từ các bài toán connhỏ và đơn giản nhất, tổ hợp các lời giải của chúng để có lời giải của bài toán con lớnhơn và cứ như thế cuối cùng được lời giải của bài toán ban đầu Chẳng hạn thuật toán
“chiếc túi xách” (Knapsack)
Phương pháp nhánh cận (branch-and-bound method): Ý tưởng là trong quá
trình tìm kiếm lời giải, ta phân hoạch tập các phương án của bài toán ra thành hai haynhiều tập con được biểu diễn như là các nút của cây tìm kiếm và cố găng bằng phép đánhgiá cận cho các nút, tìm cách loại bỏ các nhánh của cây mà ta biết chắc không chưaphương án tối ưu Chẳng hạn thuật toán giải bài toán người du lịch
Trang 11 Phương pháp vét cạn (Brute force): Đây là phương pháp đơn giản nhất,
nhưng cũng không hiểu quả nhất Phương pháp vét cạn thử tất cả các khả năng xem khảnăng nào là nghiệm đúng của bài toán cần giải quyết
2.1 Phương pháp chia để trị (Divide - and - Conquer)
2.2.1 Ý tưởng:
Có lẽ quan trọng và áp dụng rộng rãi nhất là kỹ thuật thiết kế “Chia để trị” Nóphân rã bài toán kích thước n thành các bài toán con nhỏ hơn mà việc tìm lời giải củachúng là cùng một cách Lời giải của bài toán đã cho được xây dựng từ lời giải của cácbài toán con này Ta có thể nói vắn tắt ý tưởng chính của phương pháp này là : chia dữliệu thành từng miền đủ nhỏ, giải bài toán trên các miền đã chia rồi tổng hợp kết quả lại
2.3 Phương pháp quay lui (Back Tracking)
Hành động này được gọi là quay lui, thuật toán thể hiện phương pháp này gọi làquay lui Điểm quan trọng của thuật toán là phải ghi nhớ tại mỗi bước đi qua để tránhtrùng lặp khi quay lui Dễ thấy là các thông tin này cần được lưu trử vào một ngăn xếp,nên thuật toán thể hiện ý thiết kế một cách đệ quy
Trang 122.3.2 Mô hình
Lời giải của bài toán thường biểu diễn bằng một vectơ gồm n thành phần x = (x1, ,
xn ) phải thỏa mãn các điều kiện nào đó Để chỉ ra lời giải x, ta phải xây dựng dần cácthành phần lời giải xi
Tại mỗi bước i :
+ Đã xây dựng xong các thành phần x1, , xi-1.
+ Xây dựng thành phần xi bằng cách lần lượt thử tất cả các khả năng mà xi cóthể chọn :
• Nếu một khả năng j nào đó phù hợp cho xi thì xác định xi theo khảnăng j Thường phải có thêm thao tác ghi nhận trạng thái mới của bài toán để hổ trợ chobước quay lui Nếu i = n thì ta có được một lời giải, nguợc lại thì tiến hành bước i+1 đểxác định xi+1
• Nếu không có một khả năng nào chấp nhận được cho xi thì ta lùi lạibước trước (bước i-1) để xác định lại thành phần xi-1
Để đơn giản, ta giả định các khả năng chọn lựa cho các xi tại mỗi bước là nhưnhau, do đó ta phải có thêm một thao tác kiểm tra khả năng j nào là chấp nhận được cho
Trang 13- Giả sử xi-1 làmột nút ở mức thứ i-1, khi đó các nút con của xi-1 là các khảnăng mà xi có thể chọn, một khi đã tìm được các thành phần x1, , xi-1.
Như vậy, mỗi nút xi của cây biểu diễn một lời giải bộ phận, đó là các nút nằmtrên đường đi từ gốc đến nút đó
Ta có thể nói việc tìm kiếm nghiệm bằng phương pháp quay lui chính là tìmkiếm theo chiều sâu trên cây không gian các trạng thái
2.4 Phương pháp nhánh cận (Branch And Bound)
2.4.1 Ý tưởng:
Phương pháp quay lui, vét cạn có thể giải các bài toán tối ưu, bằng cách lựa chọnphương án tối ưu trong tất cả các lời giải tìm được Nhưng nhiều bài toán không gian cáclời giải là quá lớn, nên áp dụng phương pháp pháp quay lui khó đảm bảo về thời giancũng như kỹ thuật Cho nên ta cần phải cải tiến thuật toán quay lui để hạn chế bớt việcduyệt các phương án Có nhiều cách cải tiến, trong đó có phương pháp nhánh cận.Phương pháp nhánh cận là một cải tiến của phương pháp quay lui, dùng để tìm lời giải tối
ưu của bài toán
Ý tưởng chính của nó như sau: Trong quá trình duyệt ta luôn giữ lại một phương
án mẫu (có thể xem là lời giải tối ưu cục bộ – chẳng hạn có giá nhỏ nhất tại thời điểmđó) Đánh giá nhánh cận là phương pháp tính giá của phương án ngay trong quá trình xâydựng các thành phần của phương án theo hướng đang xây dựng có thể tốt hơn phương ánmẫu hay không Nếu không ta lựa chọn theo hướng khác
Nghiệm của bài toán nếu có sẽ được biểu diễn dưới dạng :x = (x1, ,xn)
Trong quá trình liệt kê theo phương pháp quay lui, ta xây dựng dần các thành phầncủa nghiệm
Một bộ phận i thành phần (x1, , xi) sẽ gọi là một lời giải (phương án) bộ phậncấp i Ta gọi Xi là tập các lời giải bộ phận cấp i, ∀ i= ´ 1 , n
Đánh giá cận là tìm một hàm g xác định trên các Xi sao cho :
g(x1, … , x i)≤ Min{f (a ):a=(a1, … , a n)∈ X , x i=a i , ∀ i= ´ 1.i }
Trang 14Bất đẳng thức này có nghĩa là giá trị g(x1, , xi ) không lớn hơn giá trị của cácphương án mở rộng từ lời giải bộ phận (x1,…, xi )
Sau khi tìm được hàm đánh giá cận g, ta dùng g để giảm bớt chi phí duyệt cácphương án theo phương pháp quay lui
Giả sử x* là lời giải tốt nhất hiện có (phương án mẫu), còn f* là giá trị tốt nhấttương ứng f* = f(x*)
Nếu g(x1, , xi ) > f* thì :
f¿≤ g(x1,… , x i)≤ Min {f ( a): a=(a1, …, a n)∈ X , x i=a i ,∀ i= ´ 1 i}
Nên chắc rằng các lời giải mở rộng từ (x1,…, xi ) sẽ không tốt hơn phương ánmẫu, do đó có thể bỏ đi không cần phát triển lời giải bộ phận (x1,…, xi ) để tìm lời giải tối
ưu của bài toán
Thủ tục quay lui sửa lại thành thủ tục nhánh cận như sau:
Try (i)
for (j = 1 n) if( Chấp nhận được )
xi -1
Trang 15Vấn đề là xác định hàm đánh giá cận như thế nào ?
Mở rộng khái niệm thuật toán : thuật giải
Trong quá trình nghiên cứu giải quyết các vấn đề - bài toán, người ta đã đưa ra những nhận xét như sau :
Có nhiều bài toán cho đến nay vẫn chưa tìm ra một cách giải theo kiểu thuật toán
và cũng không biết là có tồn tại thuật toán hay không
Có nhiều bài toán đã có thuật toán để giải nhưng không chấp nhận được vì thời gian giải theo thuật toán đó quá lớn hoặc các điều kiện cho thuật toán khó đáp ứng
Có những bài toán được giải theo những cách giải vi phạm thuật toán nhưng vẫn chấp nhận được
Từ những nhận định trên, người ta thấy rằng cần phải có những đổi mới cho khái
niệm thuật toán Người ta đã mở rộng hai tiêu chuẩn của thuật toán : tính xác định và tính
đúng đắn Việc mở rộng tính xác định đối với thuật toán đã được thể hiện qua các giải
thuật đệ quy và ngẫu nhiên Tính đúng của thuật toán bây giờ không còn bắt buộc đối vớimột số cách giải bài toán, nhất là các cách giải gần đúng Trong thực tiễn, có nhiều
trường hợp người ta chấp nhận các cách giải thường cho kết quả tốt (nhưng không phải
lúc nào cũng tốt) nhưng ít phức tạp và hiệu quả Chẳng hạn nếu giải một bài toán bằng
thuật toán tối ưu đòi hỏi máy tính thực hiện nhiều năm thì chúng ta có thể sẵn lòng chấp nhận một giải pháp gần tối ưu mà chỉ cần máy tính chạy trong vài ngày hoặc vài giờ
Các cách giải chấp nhận được nhưng không hoàn toàn đáp ứng đầy đủ các tiêu chuẩn của thuật toán thường được gọi là các thuật giải Khái niệm mở rộng này của
thuật toán đã mở rộng cửa cho chúng ta trong việc tìm kiếm phương pháp để giải quyết các bài toán được đặt ra
Một trong những thuật giải thường được đề cập đến và sử dụng là các cách giải theo
kiểu Heuristic Nó th hi n cách gi i bài toán v i các đ c tính sau : ể hiện cách giải bài toán với các đặc tính sau : ện cách giải bài toán với các đặc tính sau : ải bài toán với các đặc tính sau : ới các đặc tính sau : ặc tính sau :
Thường tìm được lời giải tốt (nhưng không chắc là lời giải tốt nhất)
Giải bài toán theo thuật giải Heuristic thường dễ dàng và nhanh chóng đưa rakết quả hơn so với giải thuật tối ưu, vì vậy chi phí thấp hơn
Trang 16 Thuật giải Heuristic thường thể hiện khá tự nhiên, gần gũi với cách suy nghĩ
và hành động của con người
Có nhiều phương pháp để xây dựng một thuật giải Heuristic, trong đó người tathường dựa vào một số nguyên lý cơ sở như sau:
Nguyên lý vét cạn thông minh: Trong một bài toán tìm kiếm nào đó, khi không
gian tìm kiếm lớn, ta thường tìm cách giới hạn lại không gian tìm kiếm hoặc thực hiệnmột kiểu dò tìm đặc biệt dựa vào đặc thù của bài toán để nhanh chóng tìm ra mục tiêu
Nguyên lý tham lam (Greedy): Lấy tiêu chuẩn tối ưu (trên phạm vi toàn cục)
của bài toán để làm tiêu chuẩn chọn lựa hành động cho phạm vi cục bộ của từng bước(hay từng giai đoạn) trong quá trình tìm kiếm lời giải
Nguyên lý thứ tự : Thực hiện hành động dựa trên một cấu trúc thứ tự hợp lý của
không gian khảo sát nhằm nhanh chóng đạt được một lời giải tốt
Hàm Heuristic: Trong việc xây dựng các thuật giải Heuristic, người ta thường
dùng các hàm Heuristic Ðó là các hàm đánh giá thô, giá trị của hàm phụ thuộc vào
trạng thái hiện tại của bài toán tại mỗi bước giải Nhờ giá trị này, ta có thể chọn đượccách hành động tương đối hợp lý trong từng bước của thuật giải
Meta heuristic: là loại heuristic tổng quát có thể áp dụng cho nhiều lớp bài toán.
Meta heuristic là một lãnh vực nghiên cứu phát triển mạnh mẽ, với sự ra đời của nhiềumeta heuristic như: giải thuật di truyền (genetic algorithm), giải thuật mô phỏng luyệnkim (simulated annealing), giải thuật đàn kiến ACO, tìm kiếm tabu (Tabu search)
CHƯƠNG 3: GIẢI THUẬT DI TRUYỀN (GA)
1 Giới thiệu về giải thuật di truyền
Giải thuật di truyền là một kỹ thuật của khoa học máy tính nhằm tìm kiếm giải pháp
thích hợp cho các bài toán tối ưu tổ hợp (combinatorial optimization) Giải thuật di
truyền là một phân ngành của giải thuật tiến hóa vận dụng các nguyên lý của tiến hóa như
di truyền, đột biến, chọn lọc tự nhiên, và trao đổi chéo
Giải thuật di truyền thường được ứng dụng nhằm sử dụng ngôn ngữ máy tính để mô phỏng quá trình tiến hoá của một tập hợp những đại diện trừu tượng (gọi là những nhiễm
sắc thể) của các giải pháp có thể (gọi là những cá thể) cho bài toán tối ưu hóa vấn đề Tập
hợp này sẽ tiến triển theo hướng chọn lọc những giải pháp tốt hơn
Thông thường, những giải pháp được thể hiện dưới dạng nhị phân với những chuỗi 0 và
1, nhưng lại mang nhiều thông tin mã hóa khác nhau Quá trình tiến hóa xảy ra từ một tậphợp những cá thể hoàn toàn ngẫu nhiên ở tất cả các thế hệ Trong từng thế hệ, tính thích nghi của tập hợp này được ước lượng, nhiều cá thể được chọn lọc định hướng từ tập hợp