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

Tìm hiểu về thuật toán Heuristic và ứng dụng trong việc giải quyết một số bài toán

15 1,9K 4

Đ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 15
Dung lượng 326,5 KB

Nội dung

Đối với nhiều bài toán, hoặc không có lời giải, hoặc độ phức tạp tính toán làhàm mũ, hoặc là bài toán NP-đầy đủ…, có nghĩa là nó không có lời giải khả thi, thì thông thường thay vì tìm l

Trang 1

PHƯƠNG PHÁP NGHIÊN CỨU KHOA HỌC TRONG

TIN HỌC

Đề tài : “Tìm hiểu về thuật toán Heuristic và ứng dụng trong việc giải quyết một số bài toán”

Bùi Duy Linh – CHK7

Trang 2

MỤC LỤC

Phần I: Thuật toán Heuristic 2

1 Lời giới thiệu 2

2 Mô tả thuật toán 3

Phần II: Ứng dụng thuật toán Heuristic vào một số bài toán 5

1 Bài toán người đưa thư 6

1.1 Mô tả bài toán 7

1.2 Cài đặt bài toán 8

1.3 Nhận xét và kết luận 9

2 Bài toán tô màu đồ thị 10

2.1 Mô tả bài toán 31

2.2 Cài đặt thuật toán 33

2.3.Kết luận 33

Trang 3

Đối với nhiều bài toán, hoặc không có lời giải, hoặc độ phức tạp tính toán là

hàm mũ, hoặc là bài toán NP-đầy đủ…, có nghĩa là nó không có lời giải khả thi,

thì thông thường thay vì tìm lời giải tối ưu cho chúng, chúng ta cố gắng tìm lời

giải có thể chấp nhận được, đáp ứng được yêu cầu của thực tế Các lời giải này

chính là các thuật toán Heuristic

Các thuật toán tìm kiếm luôn luôn đóng vai trò quan trọng trong việc giải

các bài toán tin học Các thuật toán loại này rất phong phú, có thể kể đến như: vét

cạn, đệ quy quay lui, nhánh cận, nhị phân…Tuy nhiên, khi gặp những bài toán có

không gian tìm kiếm lớn (đặc biệt trong các trò chơi cờ) thì các thuật toán tìm

kiếm thông thường không cho kết quả hoặc kết quả không tối ưu (do những hạn

chế về thời gian và bộ nhớ) Một hướng tiếp cận độc đáo có thể đáp ứng được đòi

hỏi cho nhiều bài toán loại này là dùng thuật toán Heuristic

Để hiểu rõ hơn về thuật toán này, em đã có bài “Tìm hiểu về thuật toán

Heuristic” Trong quá trình làm bài không tránh khỏi sự thiếu xót, em rất mong

được sự góp ý của thầy giáo và các bạn

Trang 4

I – Khái quát về thuật toán Heuristic

Thuật ngữ Heuristic xuất phát từ tiếng Hy Lạp là ″heuriskein″ có nghĩa là

″tìm kiếm″ hoặc ″phát minh″ Chắc chắn chúng ta vẫn còn nhớ câu chuyện về nhà

bác học Archimedes Khi phát hiện ra định luật về trọng lượng riêng, ông đã trần

truồng chạy ra đường và kêu lớn ″tôi tìm ra rồi″ Thực ra, lúc đó ông đã kêu lên

″heureka″, về sau này người ta đổi từ này thành ″eureka″

Thuật ngữ Heuristic được Feigenbaum Feldman định nghĩa như sau:

″Heuristic là các quy tắc, phương pháp, chiến lược, mẹo giải hay phương cách nào

đó nhằm làm giảm khối lượng tìm kiếm lời giải trong không gian bài toán cực lớn

Tư tưởng chính để giảm khối lượng tìm kiếm là thay vì ″loại bỏ các hướng

tìm kiếm chắc chắn không dẫn đến lời giải″, ta hãy ″chọn đi theo hướng có nhiều

khả năng dẫn đến lời giải″.

Do thuật toán Heuristic được con người sử dụng thường mang đặc trưng của

những gợi ý hay lời khuyên, nên các phương pháp dựa trên Heuristic đôi khi

không chỉ ra con đường trực tiếp để đạt tới mục đích

Nhiều kết quả nghiên cứu trong trí tuệ nhân tạo cho thấy rằng, tuy có nhiều

điểm mạnh nổi bật, nhưng trong một vài lĩnh vực nghiên cứu nào đó thì các

phương pháp Heuristic còn bộc lộ những điểm yếu nhất định Điều phức tạp chính

là vì mọi chương trình máy tính phải đảm bảo chắc chắn kết thúc công việc (theo

định nghĩa một thuật toán phải đảm bảo tính đúng và tính dừng) Vì vậy, nếu nói

rằng một chương trình nào đó sử dụng Heuristic thì kết luận về tính dừng chỉ đúng

trong đa số các trường hợp Do đó, trong phần lớn trường hợp giải quyết bài toán,

các chương trình Heuristic có lúc cho kết quả mong đợi, đôi khi lại không

Trang 5

Các Heuristic không chỉ tác động đến các chiến lược tìm kiếm, mà còn ảnh

hưởng quyết định tới các chiến lược điều khiển (hướng tìm kiếm trong không

gian bài toán và xử lý cạnh tranh) Đối với những bài toán trí tuệ phức tạp, số khả

năng có thể lớn tới mức không thể có một máy tính nào dầu hiện đại đến mấy đáp

ứng nổi Do vậy, thủ tục duyệt toàn thể không thể chấp nhận được Trong phần lớn

các bài toán chứng minh định lý sử dụng logic, số khả năng cần phải xét trở lên vô

hạn Việc lựa chọn một nước đi tốt nhất trong trò chơi đòi hỏi phải tìm kiếm trong

khoảng 1040 khả năng khác nhau, thậm chí đối với chơi cờ, số khả năng cỡ 10120

Một cách xử lý tốt trong những trường hợp này là sử dụng thao tác rút gọn các

hướng tìm kiếm

Vấn đề quan trọng là ở chỗ, chúng ta biết khai thác khéo léo thông tin tại

mỗi trạng thái để tìm ra thứ tự ưu tiên và đẩy nhanh quá trình tìm kiếm Thông

thường ta gắn với mỗi trạng thái của bài toán với một số đo (một hàm đánh giá)

nào đó để đánh giá mức độ gần đích của nó

Một kỹ thuật Heuristic được coi là hợp lý khi nó cho phép tiến hành đánh

giá các khả năng để làm rõ khả năng nào tốt hơn các khả năng còn lại Những ví

dụ điển hình về các hàm đánh giá là các ước lượng khoảng cách đường chim bay

từ một đỉnh nào tới đỉnh đích trong bài toán xác định đường đi ngắn nhất, hay các

đánh giá ước lượng mức độ quan trọng của các quân cờ trong mỗi thế cờ dựa trên

tổ hợp các trọng số của chúng…

Trang 6

II - Ứng dụng thuật toán Heuristic vào giải quyết một số bài toán

1- Bài toán người đưa thư

Bài toán: Để tiết kiệm thời gian đi đưa thư trong một địa phương Người đưa

thư phải đi qua tất cả các điểm cần phát thư rồi trở về vị trí ban đầu với đường đi

ngắn nhất Bài toán có thể phát biểu lại như sau: Giả sử có một đồ thị có trọng số

dương, tìm đường đi ngắn nhất qua tất cả các đỉnh của đồ thị rồi trở về đỉnh ban

đầu.

Hạn chế khi sử dụng giải thuật tối ưu : Đồ thị có n đỉnh, khi đó thuật toán tối

ưu cho bài toán này sẽ là thuật toán tìm đường đi ngắn nhất cho chu trình

Haminton Do đó thuật toán tối ưu sẽ có độ phức tạp là O( n!) là Không thể thực

hiện thuật toán

-> cần Tìm một thuật giải Heuristic cho bài toán này.

Theo kinh nghiệm của con người trong thực tế thì khi ta đi trên những

đoạn đường ngắn nhất thì cuối cùng ta sẽ có một hành trình ngắn

nhất là “sử dụng nguyên lý tham lam”.

- Thuật giải bài toán sử dụng nguyên lý tham lam:

- Ví dụ về thuật giải trên:

Trang 7

Với một đồ thị trọng số dương như hình bên Nếu

ta xuất phát từ đỉnh sổ 1, thì đỉnh tiếp theo phải

đến là 2 ( vì cạnh 1-2 có trọng số nhỏ nhất so với

các đỉnh chưa đến của 1), như vậy tiếp theo ta sẽ

đến các đỉnh theo thứ tự là 5, 3, 4, và trở về 1

Như vậy đường đi ngắn nhất theo giải thuật trình bày trên tìm được là:

1 + 3 + 2 + 1+ 7 = 14

- Ta có dạng ma trận hóa của đồ thị

trong ví dụ ở mục 3, như hình bên:

- Chương trình được viết trên môi

trường visual C++ 6.0

- Input: một ma trận vuông bằng file “graph.txt “ có dạng như hình

bên, hay nhập ma trận bằng tay

- Output: đường đi theo thuật giải Heuristic, và chi phí của đường đi

đó

- Tổ chức dữ liệu chương trình: (hình bên)

+ n: là biến cho biết số đỉnh của đồ thị

+ G: dùng để trỏ tới các giá trị của ma trận

+ v[Gr.n + 1]: dùng để lưu trữ đường đi theo thuật giải Heuristic

+ Gr.G[ i][j ]: đồ thị dưới dạng ma trận

+ x: là đỉnh đầu tiên xuất phát

+ initGraph(Graph &Gr): Hàm dùng để khởi tạo một đồ thị mới từ cấu

trúc đã tổ chức

Trang 8

+ ReadGraph(Graph &Gr): dùng để đọc đồ thị từ file txt

+ inputHandle( Graph &Gr): dùng để nhập đồ thị bằng tay

+ outputGraph(Graph Gr): dùng để xuất đồ thị đã được nhập ra màn

hình

+ testGraph(int a, int* v, Graph Gr): Kiểm tra điểm đang duyệt có

trùng với điểm đã duyệt trên ma trận không Được gọi trong hàm

topNear(…)

+ topNear(int a, Graph Gr, int* v) : Hàm tìm đỉnh kế tiếp theo thuật

giải Heuristic Được gọi lại trong hàm FindWay(…)

Trang 9

+ FindWay(int x, Graph Gr, int* v): Hàm tìm đường đi theo giải thuật

Heuristic Dựa theo cách tìm đường đi có trọng số nhỏ nhất để đi bước

tiếp theo

- Giao diện chương trình: console Aplication

Khi thực thi, chương trình sẽ yêu cầu chọn nhập ma trận đồ thị bằng

tay hay bằng file “graph.txt” Ví dụ như hình trên chọn nhập ma trận

bằng file txt Ta nhập tiếp đỉnh bắt đầu (ở đây nhập 1), thì chương

trình sẽ cho ra đáp án cho ví dụ trên:

Đường đi là: 1 – 2 – 5 – 3 – 4 – 1

Chi phí cho đường đi này theo giải thuật Heuristic là: 14

Trang 10

Nếu như chọn cách nhập ma trận bằng tay thì ta phải nhập từng giá

trị của ma trận vào

- Nhấn ESC để thoát khỏi chương trình, Phím bất kỳ để tiếp tục

chương trình với cách duyệt từ đỉnh khác

- Ưu điểm: Thuật giải Heuristic cho bài toán người đưa thư có độ phức

tạp O(n2 ) tốt hơn rất nhiều so với thuật toán tối ưu ( có độ phức tạp

O( n!) )

- Nhược điểm: thuật giải có những hạn chế, chưa cho ra lời giải chính

xác

-> K ế t lu ậ n : Thuật giải Heuristic cho bài toán người đưa thư tuy chưa

đưa ra được lời giải chính xác cho bài toán, nhưng nó cho ra một lời

giải có thể chấp nhận được với độ phức tạp thấp hơn nhiều so với

thuật toán tối ưu

Trang 11

2 - Bài toán tô màu cho đồ thị

Giả sử G = là một đồ thị không định hướng Yêu cầu tô màu cho tất cả các

đỉnh của G sao cho hai đỉnh được nối bằng một cung thì phải có hai màu khác

nhau Có thể thấy rằng bài toán tô màu này sao cho số màu được dùng là ít nhất là

một bài toán NP-đầy đủ Lúc này, ta tìm một lời giải tốt có thể chấp nhận được

theo một thuật toán heuristic như sau:

Ban đầu chọn một màu và một đỉnh xuất phát Ta tô màu đỉnh này và tất cả

các đỉnh khác có thể tô được mà vẫn thoả mãn điều kiện của bài toán Chúng ta

chọn màu mới và một đỉnh xuất phát mới (chưa được tô), ta tô đỉnh này và tất cả

các đỉnh khác (còn chưa được tô) có thể tô được bằng màu thứ hai, và cứ như

vậy…cho đến khi tô hết các đỉnh của G thì thôi

Bài tập: Các ô vuông thần bí

Kế tục thành công của trò chơi với khối lập phương thần bí, Ngài Rubik

sáng tạo ra dạng phẳng của trò chơi này gọi là trò chơi các ô vuông thần bí Đây là

một bảng gồm 8 ô vuông bằng nhau (xem Hình 1)

Chúng ta xét bảng trong đó mỗi ô vuông có một màu khác nhau Các màu

được ký hiệu bởi tám số nguyên dương đầu tiên (xem Hình 1) Trạng thái của

bảng được cho bởi dãy ký hiệu màu của các ô được viết lần lượt theo chiều kim

đồng hồ bắt đầu bởi ô ở góc trái trên và kết thúc tại ô ở góc trái dưới Ví dụ, trạng

thái của bảng trong hình 1 được cho bởi dãy (1, 2, 3, 4, 5, 6, 7, 8) Trạng thái này

Trang 12

được gọi là trạng thái khởi đầu (hay trạng thái đích)

Có thể dùng 3 phép biến đổi cơ bản đối với bảng có tên là′A′, ′B′, ′C′:

′A′: đổi chỗ dòng trên và dòng dưới Ví dụ sau phép biến đổi ′A′thì hình 1

thành:

′B′: thực hiện một phép hoán vị vòng quanh sang phải Ví dụ sau phép biến

đổi ′B′ thì hình 1 thành:

′C′: quay theo chiều kim đồng hồ bốn ô giữa Ví dụ sau phép biến đổi ′C′ thì

hình 1 thành:

Biết rằng từ một trạng thái khởi đầu luôn có thể chuyển về một trạng thái bất

kỳ bằng cách dùng các phép biến đổi cơ bản nói trên

Hãy viết chương trình tìm các phép biến đổi cơ bản để chuyển bảng từ trạng

thái khởi đầu cho trong hình 1 về một trong các trạng thái cho trước (Câu A), bạn

sẽ được thêm hai điểm nếu số lượng phép biến đổi tìm được không vượt quá 300

(Câu B)

Dữ liệu vào: file INPUT.TXT chứa 8 số nguyên dương trong dòng đầu tiên mô tả

trạng thái đích

Trang 13

phép biến đổi của dãy các phép biến đổi tìm được Trong L dòng tiếp theo phải ghi

dãy tên các phép biến đổi cơ bản theo trình tự thực hiện, mỗi tên ghi ở vị trí đầu

tiên của mỗi dòng

Ví dụ về dữ liệu vào và dữ liệu ra:

Trang 14

KẾT LUẬN

Thuật toán Heuristic tuy có nhiều điểm mạnh nổi bật, nhưng trong một vài

lĩnh vực nghiên cứu nào đó thì các phương pháp Heuristic còn bộc lộ những điểm

yếu nhất định, vì vậy chúng ta phải tìm hiểu kỹ thuật toán để có thể áp dụng vào

từng trường hợp cụ thể nhằm thu được kết quả tốt nhất

Trang 15

TÀI LIỆU THAM KHẢO

1 Phan Dũng, Phương pháp luận sáng tạo khoa học kỹ thuật, Nhà xuất bản

TP.HCM-1998

2 Hoàng Kiếm, Giải một bài toán trên máy tính như thế nào (tập 1, 2, 3),

Nhà xuất bản Giáo dục 2001, 2002, 2004

Ngày đăng: 05/07/2015, 11:28

TỪ KHÓA LIÊN QUAN

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

TÀI LIỆU LIÊN QUAN

w