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

Báo cáo trí tuệ nhân tạo: Xây dựng chương trình cho phép tìm kiếm đường đi từ 1 điểm tới 1 điểm khác trên bản đồ theo phương pháp tìm kiếm Beam

10 1,8K 5

Đang tải... (xem toàn văn)

THÔNG TIN TÀI LIỆU

Thông tin cơ bản

Định dạng
Số trang 10
Dung lượng 345,5 KB

Nội dung

I.Mô tả bài toán-Phương pháp Tìm kiếm beam (beam search) giống như tìm kiếm theo bề rộng, nó phát triển các đỉnh ở một mức rồi phát triển các đỉnh ở mức tiếp theo. Tuy nhiên, trong tìm kiếm theo bề rộng, ta phát triển tất cả các đỉnh ở một mức, còn trong tìm kiếm beam, ta hạn chế chỉ phát triển k đỉnh tốt nhất (các đỉnh này được xác định bởi hàm đánh giá). Do đó trong tìm kiếm beam, ở bất kỳ mức nào cũng chỉ có nhiều nhất k đỉnh được phát triển, trong khi tìm kiếm theo bề rộng, số đỉnh cần phát triển ở mức d là bd (b là nhân tố nhánh). -Áp dụng vào bài toán: Một người cần tìm đường đi từ 1 điểm tới 1 điểm khác trên bản đồ của 1 phường, xã nào đó. Chỉ cần biết điểm bắt đầu và kết thúc đưa ra đường đi tối ưu đi được giữa 2 điểm đó.II.Mô tả chương trình1.Giao diện chương trình

Trang 1

HỌC VIỆN KỸ THUẬT QUÂN SỰ KHOA CÔNG NGHỆ THÔNG TIN

BÁO CÁO MÔN HỌC TRÍ TUỆ NHÂN TẠO

Đề tài: Xây dựng chương trình cho phép tìm kiếm

đường đi từ 1 điểm tới 1 điểm khác trên bản đồ theo phương pháp tìm kiếm Beam

Giáo viên hướng dẫn: Ngô Hữu Phúc

Sinh viên thực hiện : Văn Anh Đức

Lớp : TH5A

HÀ NỘI 3/2010

Trang 2

I Mô tả bài toán

- Phương pháp Tìm kiếm beam (beam search) giống như tìm kiếm theo bề rộng, nó phát triển các đỉnh ở một mức rồi phát triển các đỉnh ở mức tiếp theo Tuy nhiên, trong tìm kiếm theo bề rộng, ta phát triển tất cả các đỉnh ở một mức, còn trong tìm kiếm beam, ta hạn chế chỉ phát triển k đỉnh tốt nhất (các đỉnh này được xác định bởi hàm đánh giá) Do đó trong tìm kiếm beam, ở bất kỳ mức nào cũng chỉ có nhiều nhất k đỉnh được phát triển, trong khi tìm kiếm theo bề rộng, số đỉnh cần phát triển ở mức d là bd (b là nhân tố nhánh)

- Áp dụng vào bài toán: Một người cần tìm đường đi từ 1 điểm tới 1 điểm khác trên bản đồ của 1 phường, xã nào đó Chỉ cần biết điểm bắt đầu và kết thúc đưa ra đường đi tối ưu đi được giữa 2 điểm đó

II Mô tả chương trình

1 Giao diện chương trình

Đây là giao diện chương trình mô tả bài toán gồm có:

+ 1Picturebox: Là 1 bản đồ diễn tả không gian trạng thái của bài toán với các vị trí đã được xác định trước

+ 2Combobox: Chứa danh sách các điểm xuất phát và địa điểm đích

+ 1Combobox: Chứa danh sách số các node hạn chế

Trang 3

+ 1 lable show: chứa nội dung kết quả tìm đường của bài toán

2 Mô tả thuật toán

- Do yêu cầu bài toán đặt ra là sử dụng phương pháp tìm kiếm Beam nên thuật toán Beam được sử dụng chính trong bài toán này

- Áp dụng:

+ Tạo 1 mảng lưu trữ các trường: tọa độ x,y, tên và ID của các địa điểm tương ứng trên bản đồ

+ Khởi tạo mảng 2 chiều lưu trữ danh sách các địa điểm kề với điểm xuất phát

+ Khởi tạo hàm đánh giá Heuristic được tính bằng khoảng cách đường chim bay từ các điểm tới điểm đích

+ Chọn K node giới hạn + Tạo vòng lặp và kiểm tra

Nếu các node lưu trữ trong mảng chứa danh sách các đỉnh kề rỗng thì Stop.Thông báo tìm kiếm thất bại Loại trạng thái u ở đầu danh sách ra khỏi mảng

Xét các điểm kề với địa điểm bắt đầu và lưu vào trong 1 queue Sau đó đưa so sánh hàm đánh giá của các địa điểm này với nhau rồi sau đó sắp xếp các địa điểm này vào 1 mảng khác

Kiểm tra điều kiện của K; nếu k node vượt quá n địa điểm kề với node cha thì gán k=n

Nếu trạng thái u ở trạng thái kết thúc thì Stop Thông báo thành công

3 VD bài toán

Tìm đường đi từ Viện nghiên cứu địa chính-HQV đến ngã 4 nghĩa tân - Nguyễn phong Sắc

Nhập: điểm xuất phát (Start)- Viện nghiên cứu địa chính-HQV Điểm đích: (End)

Trang 4

Chọn K=2

Click: Beamsearch

Và kết quả:

Trang 5

4 Mô tả code

Tạo class point với các trường i, j, name, ID và mảng lưu trữ danh sách địa điểm kề: ke

Public Class point

Public ke As New ArrayList()

Public x, s, y, ID As Integer

Public name As String

Public Sub New()

End Sub

Public Sub New(ByVal i As Integer, ByVal j As Integer, ByVal n As String, ByVal o As Integer)

x = i

y = j

name = n

ID = o

End Sub

End Class

Tạo sub dinhke() lưu tất cả các địa điểm kề với các điểm khác:

Public Sub dinhke()

lblshow.Text = ""

For i As Integer = 0 To 12

arr(i).ke.Clear()

Next

Trang 6

arr(0).ke.Add(arr(1))

arr(0).ke.Add(arr(2))

arr(0).ke.Add(arr(3))

arr(0).ke.Add(arr(7))

arr(1).ke.Add(arr(0))

arr(1).ke.Add(arr(2))

arr(2).ke.Add(arr(0))

arr(2).ke.Add(arr(1))

arr(2).ke.Add(arr(3))

arr(2).ke.Add(arr(4))

arr(3).ke.Add(arr(0))

arr(3).ke.Add(arr(2))

arr(3).ke.Add(arr(4))

arr(3).ke.Add(arr(5))

arr(3).ke.Add(arr(7))

arr(4).ke.Add(arr(2))

arr(4).ke.Add(arr(3))

arr(4).ke.Add(arr(5))

arr(4).ke.Add(arr(11))

arr(5).ke.Add(arr(3))

arr(5).ke.Add(arr(4))

arr(5).ke.Add(arr(6))

arr(5).ke.Add(arr(7))

arr(6).ke.Add(arr(5))

arr(6).ke.Add(arr(7))

arr(6).ke.Add(arr(8))

arr(6).ke.Add(arr(9))

arr(7).ke.Add(arr(0))

arr(7).ke.Add(arr(3))

arr(7).ke.Add(arr(5))

arr(7).ke.Add(arr(6))

arr(7).ke.Add(arr(8))

arr(8).ke.Add(arr(7))

arr(8).ke.Add(arr(9))

arr(8).ke.Add(arr(10))

arr(9).ke.Add(arr(6))

arr(9).ke.Add(arr(8))

arr(9).ke.Add(arr(10))

arr(10).ke.Add(arr(8))

arr(10).ke.Add(arr(9))

arr(10).ke.Add(arr(11))

arr(10).ke.Add(arr(12))

arr(11).ke.Add(arr(7))

arr(11).ke.Add(arr(10))

arr(11).ke.Add(arr(12))

arr(12).ke.Add(arr(10))

arr(12).ke.Add(arr(11))

End Sub

Click Load form ta khởi tạo các tọa độ, tên, ID và các đỉnh kề tương ứng với các địa điểm:

dinhke()

Trang 7

arr(0) = New point(130, 30, "Viện nghiên cứu địa chính-HQV" , 0) arr(1) = New point(41, 238, "Phạm Văn Đồng" , 1)

arr(2) = New point(266, 250, "Trần Quốc Hoàn" , 2)

arr(9) = New point(724, 190, "Ngã 3 Tô Hiệu" , 9)

arr(10) = New point(757, 328, "CV Nghĩa Đô" , 10)

arr(11) = New point(527, 370, "Trần Đăng Ninh" , 11)

arr(12) = New point(670, 486, "Chùa Hà" , 12)

Tạo hàm đánh giá “dodai”:

Function dodai(ByVal d1 As point, ByVal d2 As point) As Double

Return Math.Sqrt(Math.Pow((d1.x - d2.x), 2) + Math.Pow((d1.y - d2.y),2)) End Function

Tạo Sub Beam search thực hiện thuật toán áp dụng

Gán và lưu trữ 2 giá trị của điểm bắt đầu và kết thúc vào 2 biến “pend” và

“pstart”

Tạo vòng lặp và kiểm tra: nếu trường tên trong mảng arr(i) trùng tên trên

combobox bắt đầu thì gán “pstart” =arr(i) và đưa vào cuối mảng Queue và thoát khỏi vòng lặp

For i As Integer = 0 To 12

If (arr(i).name = cmbs.Text) Then

pstart = arr(i)

q.Enqueue(arr(i))

Exit For

End If

Next

Với điểm kết thúc tương tự nhưng ta không đưa điểm kết thúc vào mảng queue:

For i As Integer = 0 To 12

If (arr(i).name = cmbe.Text) Then

pend = arr(i)

Exit For

End If

Next

Khai báo biến found kiểu booloean = false

Trang 8

Tạo vòng lặp với điều kiện số phần tử trong queue “số con của điểm cha khác rỗng”

While (q.Count <> 0)

Đưa giá trị trong mảng queue ra xét và gán vào biến p kiểu point Sau đó kiểm tra: nếu ID của điểm đích trùng với ID trong mảng queue thì tìm kiếm thành công thoát khỏi vòng lặp “While”

While (q.Count <> 0)

p = q.Dequeue()

If (p.ID = pend.ID) Then

found = True

Exit While

End if

Vòng lặp duyệt các điểm kề với điểm bắt đầu và lưu trữ trong mảng queue Đồng

thời xóa điểm bắt đầu ra khỏi mảng queue

For Each diemke In p.ke

For l = 0 To diemke.ke.Count - 1

px = diemke.ke(l)

If (px.ID = p.ID) Then

diemke.ke.RemoveAt(l)

Exit For

End If

Next

q.Enqueue(diemke)

father(diemke.ID) = p.ID

Next

lưu trữ ID của node cha vào mảng father(.ID)

Đưa queue ra 1 mảng rồi sắp xếp mảng đó theo thứ tự tăng dần sau đó lại đưa lại vào queue:

For Each diem As point In q

phu(i) = diem

i += 1

Next

For i = 0 To n - 1

For j As Integer = i + 1 To n

If dodai(phu(i), p) > dodai(phu(j), p) Then

Dim ph As point = phu(i)

phu(i) = phu(j)

phu(j) = ph

End If

Next

Trang 9

Next

Clear()

Xét điều kiện K node do user chọn So sánh k với số node n trong queue

Nếu n< k thì gán k=n

Dim k As Integer = Integer.Parse(cmbk.Text) - 1

If (n < k) Then k = n

Lặp quá trình đưa k node kề vào trong queue

For i = 0 To k

q.Enqueue(phu(i))

Next

Kết thúc vòng lặp while

Thực hiện quá trình hiển thị lộ trình đi trên lblshow:

If found Then

MsgBox( "Found Success" , MsgBoxStyle.Information, "Happi" )

demw = 1

Dim w As New point()

w = pend

Dim s As Integer = 0

arrw(0) = w

Dim so As Integer = w.ID

lblshow.Text += w.name & vbNewLine

While (so <> pstart.ID)

so = father(so)

s += 1

For i As Integer = 0 To 12

If arr(i).ID = so Then

demw += 1

arrw(s) = arr(i)

lblshow.Text += "<++ " + arr(i).name & vbNewLine End If

Next

End While

End If

Ở btnbeam ta xử lý = 1 số lệnh hỏi và gọi sub beamsearch() và sub vẽ đường đi trên bản đồ ra:

isDraw = True

If cmbs.Text = "" Then

MsgBox( "Choose start point" , MsgBoxStyle.Information, "Try again" ) ElseIf cmbe.Text = "" Then

MsgBox( "Choose end point" , MsgBoxStyle.Information, "Try again" ) ElseIf cmbk.Text = "" Then

MsgBox( "Choose K" , MsgBoxStyle.Information, "Try again" )

Else

Call beamsearch()

Call picb1.Invalidate()

End If

Trang 10

III Kết luận đánh giá

- Thuật toán luôn cho kết quả nếu có đường đi từ điểm xuất phát tới điểm đích tuy nhiên sử dụng hàm đánh giá trong bài toán này là

đường chim bay giữa các địa điểm với nhau nên tìm ra lời giải tối ưu chưa đạt được

- Chương trình mô phỏng thuật toán với hàm đánh giá Heuristic áp dụng theo bài giảng chỉ đáp ứng được yêu cầu của đề bài nên còn rất nhiều hạn chế khi áp dụng thực tế Một phần nữa là do khả năng viết chương trình còn hạn chế nên chưa lột tả được hết đặc tính ưu việt của bài toán nên mong được sự đóng góp và đánh giá của thầy Em xin chân thành cám ơn

Ngày đăng: 25/03/2014, 20:52

TỪ KHÓA LIÊN QUAN

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

TÀI LIỆU LIÊN QUAN

w