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

Báo cáo đồ án trí tuệ nhân tạo: Xây dựng chương trình tìm kiếm đường đi từ một đỉểm nào đó trên bản đồ đến một điểm khác trên bản đồ bằng phương pháp tìm kiếm Greedy Best First Search

13 1,6K 9

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

Nội dung

Báo cáo môn học Nhập môn trí tuệ nhân tạo Đề bài: Không gian trạng thái được mô tả là một bản đồ giao thông của một xã, phường nào đó. Hãy xây dựng chương trình cho phép tìm kiếm đường đi từ một đỉểm nào đó trên bản đồ đến một điểm khác trên bản đồ bằng phương pháp tìm kiếm Greedy Best First Search. Tên học viên: Khuất Đình Đăng Giảng viên: TS. Ngô Hữu Phúc Yêu cầu: Mô phỏng bằng chương trình. Ngôn ngữ sử dụng là VC++.Net hoặc C#.NET I.Phương pháp tìm kiếm Greedy Best First Search Phương pháp tìm kiếm Greedy Best First Search là một dạng đặc biệt của phương pháp tìm kiếm Greedy Best First Search. Lấy ý tưởng của giải thuật tìm kiếm theo chiều rộng kết hợp với hàm đánh giá để tìm kiếm trong không gian trạng thái. 1.Hàm đánh giá. a.Khái niệm. Trong tìm kiếm sử dụng kinh nghiệm, ta xây dựng một hàm đánh giá h(n). Với mỗi trạng thái u thuộc vào không gian trạng thái, hàm đánh giá sẽ xác định “giá” của trạng thái đó. “Giá” của u là một giá trị số h(u) tượng trưng cho “độ tốt” của trạng thái u, tức là khả năng từ u đi được đến đích. Trong tìm kiếm sử dụng kinh nghiệm, hàm đánh giá có vai trò rất quan trọng. Nếu xây dựng được hàm đánh giá tốt, việc tìm kiếm sẽ rất nhanh. Ngược lại, với một hàm đánh giá tồi, công việc tìm kiếm có thể đi chệch hướng và tìm kiếm kém hiệu quả. Không có một phương pháp chung để xây dựng hàm đánh giá tổng quát cho mọi bài toán. Việc xây dựng hàm đánh giá tùy thuộc vào vấn đề cần giải quyết. b.Một số ví dụ về hàm đánh giá.

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

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

HÀ NỘI 3/2010

Trang 2

Báo cáo môn học Nhập môn trí tuệ nhân tạo

Đề bài:

Không gian trạng thái được mô tả là một bản đồ giao thông của một xã, phường nào đó Hãy xây dựng chương trình cho phép tìm kiếm đường đi từ một đỉểm nào đó trên bản đồ đến một điểm khác trên bản đồ bằng phương pháp tìm kiếm Greedy Best First Search

Tên học viên:

Khuất Đình Đăng

Giảng viên:

TS Ngô Hữu Phúc

Yêu cầu:

Mô phỏng bằng chương trình Ngôn ngữ sử dụng là VC++.Net hoặc C#.NET

Trang 3

I Phương pháp tìm kiếm Greedy Best First Search

Phương pháp tìm kiếm Greedy Best First Search là một dạng đặc biệt của phương pháp tìm kiếm Greedy Best First Search Lấy ý tưởng của giải thuật tìm kiếm theo chiều rộng kết hợp với hàm đánh giá

để tìm kiếm trong không gian trạng thái

1 Hàm đánh giá

a Khái niệm

Trong tìm kiếm sử dụng kinh nghiệm, ta xây dựng một hàm đánh giá h(n) Với mỗi trạng thái u thuộc vào không gian trạng thái, hàm đánh giá sẽ xác định “giá” của trạng thái đó “Giá” của u là một giá trị số h(u) tượng trưng cho “độ tốt” của trạng thái u, tức là khả năng từ u đi được đến đích

Trong tìm kiếm sử dụng kinh nghiệm, hàm đánh giá có vai trò rất quan trọng Nếu xây dựng được hàm đánh giá tốt, việc tìm kiếm sẽ rất nhanh Ngược lại, với một hàm đánh giá tồi, công việc tìm kiếm có thể đi chệch hướng và tìm kiếm kém hiệu quả Không có một phương pháp chung để xây dựng hàm đánh giá tổng quát cho mọi bài toán Việc xây dựng hàm đánh giá tùy thuộc vào vấn đề cần giải quyết

b Một số ví dụ về hàm đánh giá

Trong bài toán tìm kiếm đường đi trên bản đồ, có thể xây dựng hàm đánh giá:

 Đường chim bay từ thành phố này sang thành phố khác, hoặc

 Sử dụng khoảng cách thực trên đường đi giữa các thành phố, hoặc

 Sử dụng cả khoảng cách và một số trọng số khác ảnh hưởng tới việc tìm kiếm (đóng vai trò làm tăng thời gian di chuyển giữa các thành phố),

Xét bài toán 8 số, ta có thể xây dựng hàm đánh giá như sau:

 Hàm H1: với một trạng thái u, H1(u) là số quân ở sai vị trí // H1(u) = 4

Trạng thái đích

Trang 4

Trạng thái đích u

 Hàm H2: H2(u) là tổng khoảng cách giữa vị trí quân ở trạng thái u với vị trí ở trạng thái đích // H2(u) = 9

2 Phương pháp Greedy Best First Search

a Ý tưởng

Tìm kiếm Greedy Best First Search = tìm kiếm theo chiều rộng + hàm đánh giá

Hàm đánh giá sử dụng trong phương pháp tìm kiếm này là hàm ước lượng giá từ trạng thái u đến trạng thái đích Tức là xác định khả năng từ trạng thái u đi được đến trạng thái đích Node được lựa chọn để phát triển ở bước kế tiếp là node có “giá” đến trạng thái đích “tốt nhất” theo yêu cầu bài toán Tức là chọn node “được cho là” gần với trạng thái đích nhất để phát triển

Ví dụ: trong tìm kiếm trên bản đồ, hàm h(n) = Khoảng cách theo đường chim bay từ n đến thành

phố đích

Tìm kiếm đường đi với giá tính theo Km:

Trang 5

Ở ví dụ trên, xuất phát từ thành phố Arad đi đến đích là thành phố Bucharest.

b Cài đặt

Sử dụng hàng đợi có ưu tiên Sắp xếp các node trong hàng đợi theo thứ tự tăng dần của hàm đánh giá

Procedure Greedy_Best_First_Search;

Begin

Khởi tạo queue L chỉ chứa trạng thái ban đầu;

Loop do

1 If L rỗng then { thông báo thất bại; stop; }

2 Loại trạng thái u ở đầu queue L;

3 If u là trạng thái kết thúc then { thông báo thành

công; stop; }

4 For mỗi trạng thái v kề u do

Xen v vào queue L sao cho các node trong L được sắp xếp theo thứ tự tăng dần của hàm đánh giá;

Trang 6

c Đánh giá giải thuật GBFS

Tính đủ: Không Có thể vào vòng lặp quẩn (trường hợp bài toán có không gian trạng thái vô

hạn và ta duyệt phải nhánh vô hạn trong khi nghiệm của bài toán không nằm trên nhánh đó.)

Độ phức tạp thời gian: O(bm) Nếu hàm heuristic xấp xỉ tốt trong thực tế thì thời gian chạy

sẽ giảm đi rất nhiều

Độ phức tạp không gian: O(bm) Lưu trữ tất cả các Nodes.

Tính tối ưu: do không có tính đủ nên giải thuật này cũng không có tính tối ưu.

Trang 7

II Các kết quả đạt được

1 Mô phỏng bản đồ giao thông xã, phường

Bản đồ giao thông xã, phường được mô tả trong chương trình như một đồ thị vô hướng Mỗi đỉnh của đồ thị tượng trưng cho một điểm trên bản đồ Mỗi đỉnh được gán một số thứ tự Mỗi cạnh nối 2 đỉnh trên đồ thị tượng trưng cho đường nối giữa 2 điểm trên bản đồ Trọng số gắn với mỗi cạnh nối 2 đỉnh của đồ thị tượng trưng cho khoảng cách thực tế giữa 2 điểm trên bản đồ

Giá trị được ghi trên mỗi cạnh của

đồ thị là khoảng cách thực tế giữa 2 điểm trên bản đồ Giá trị được ghi dưới mỗi đỉnh của đồ thị là giá trị hàm

Giá trị của hàm đánh giá h(n) tại mỗi đỉnh u thuộc không gian trạng thái được xác định bằng tổng khoảng cách theo đường chim bay từ trạng thái u đến trạng thái đích và khoảng cách thực tế từ trạng thái trước đó đã expand ra trạng thái u đến nó

h(u) = d cb (u, e) + d(father(u),u)

Trong đó, dcb(u,e) là khoảng cách tính theo đường chim bay từ u đến đích; father(u) là trạng thái

“cha” của trạng thái u, trước đó đã expand ra u; d(father(u),u) là khoảng cách thực tế từ father(u) đến u

3 Kết quả làm được

a Các bước xây dựng bản đồ và tìm đường trên bản đồ

Click vào background để tạo các đỉnh

 Click vào đỉnh và rê chuột đến đỉnh khác để tạo cạnh nối sau đó nhập độ dài cạnh nối

Trang 8

 Nhập đỉnh bắt đầu và đỉnh kết thúc.

 Nhấn Tìm để bắt đầu tìm kiếm

 Thông báo kết quả thông qua MessageBox và RichTextBox

b Cấu trúc chương trình

Các lớp của chương trình:

Lớp dinh mô tả các đỉnh của đồ thị tương ứng với các điểm trên bản đồ Lớp này được

khai báo các thuộc tính như sau:

private Graphics gr;

private int x, y, ID;

private int r = 30;

public double H;

private SolidBrush sbr = new SolidBrush ( Color Blue); private bool selected;

- gr, sbr được sử dụng để hiển thị hình dạng đỉnh

- x, y xác định vị trí tâm của đỉnh

- ID xác định số thứ tự đỉnh

- R: bán kính đỉnh (đỉnh được thể hiện là một hình tròn bán kính r)

- H là giá trị hàm đánh giá tại đỉnh

- Selected xác định đỉnh có đang được chọn bằng chuột hay không

Các phương thức chính của lớp:

public bool ifChecked( int _x, int _y) xác định có phải đỉnh đang được trỏ đến bởi chuột hay không.

public void show( PaintEventArgs e)

hiển thị đỉnh bằng một hình tròn bán kính r và số thứ tự đỉnh.

public void showH( PaintEventArgs e)

hiển thị giá trị hàm đánh giá bên dưới hình tròn.

Lớp canh mô tả các cạnh của đồ thị tương ứng với các đường đi trên bản đồ Các thuộc tính của lớp canh

private int xdau, ydau, xcuoi, ycuoi;

// tọa độ 2 đỉnh của cạnh.

Trang 9

private int dinhdau, dinhcuoi;

// số thứ tự 2 đỉnh.

private Graphics gr;

private Pen pen = new Pen ( Color Black, 1);

// gr và pen dùng để “vẽ” cạnh ra màn hình

private int dodai;

// độ dài cạnh

Các phương thức của lớp:

public void show( PaintEventArgs e)

// hiển thị cạnh ra màn hình là một đường thẳng

public void showS( PaintEventArgs e)

// hiển thị độ dài cạnh

 Lớp bando thực chất là ma trận kể của đồ thị Lớp này chỉ có 2 thuộc tính, một mảng 2 chiều public int[,] duongdi; chính là ma trận kề của đồ thị và một số nguyên public int sophantu; thể hiện số chiều của ma trận Lớp này có 2 contructor tính toán giá trị của ma trận kề dựa vào các đỉnh và các cạnh của đồ thị

Lớp GBFS định nghĩa thuật toán GBFS Các thuộc tính của lớp được khai báo như sau:

ArrayList alC;

// mảng các cạnh của đồ thị

ArrayList alD;

// mảng các đỉnh của đồ thị

dinh start, end;

// đỉnh bắt đầu và đỉnh kết thúc

int tongquangduong;

// độ dài đường đi tìm được từ đỉnh đầu đến đỉnh kết thúc int sodinh;

// số đỉnh của đồ thị

int [,] Matrix;

// ma trận kề của đồ thị

Các phương thức của lớp:

public double birdFly( dinh p)

Trang 10

// trả về khoảng cách đường chim bay từ đỉnh p đến đỉnh kết thúc

double F( dinh p, dinh cha)

// tính toán giá trị hàm đánh giá tại p

public void GBFS_algorith( RichTextBox r, ArrayList

arrlCanh)

// tìm kiếm đường đi từ đỉnh bắt đầu đến đỉnh kết thúc bằng thuật toán GBFS Thông báo kết quả thông qua RichTextBox và MessageBox

c Xử lí các sự kiện

Sự kiện Paint của PictureBox:

// hiển thị các cạnh, các đỉnh của đồ thị

Sự kiện nhấn chuột:

private void pictureBox1_MouseDown( object sender,

{

//nếu nhấn chuột trái

if (e.Button == MouseButtons Left)

{

foreach ( dinh temp in pList)

// nếu nhấn vào một đỉnh

if (temp.ifChecked(e.X, e.Y))

{

drag = true ;

// cập nhật tọa độ đỉnh đầu, đỉnh cuối của cạnh trùng với tọa độ tâm đỉnh được nhấn

c.X1 = c.X2 = temp.X;

c.Y1 = c.Y2 = temp.Y;

Trang 11

// lưu ID đỉnh đầu cạnh = ID đỉnh đang được nhấn

c.P1 = temp.getID;

return ;

}

// nếu đang nhấn 1 vị trí “trống”

if (ID <= 14)

{

ID++;

// thêm một đỉnh vào mảng các đỉnh

pList.Add( new dinh (ID, e.X, e.Y));

}

}

pictureBox1.Invalidate();

}

Sự kiện di chuyển chuột:

private void pictureBox1_MouseMove( object sender,

{

// nếu trước đó vừa nhấn vào một đỉnh

if (drag)

{

// cập nhật tọa độ đỉnh cuối của cạnh bằng với tọa độ chuột hiện tại

c.X2 = e.X; c.Y2 = e.Y;

}

foreach ( dinh temp in pList)

// cập nhật lại trạng thái các đỉnh (có đang được chuột trỏ vào hay không)

temp.ifChecked(e.X, e.Y);

pictureBox1.Invalidate();

Trang 12

}

Sự kiện nhả chuột:

private void pictureBox1_MouseUp( object sender,

{

foreach ( dinh temp in pList)

{

// nếu vị trí chuột hiện tại trùng với vị trí tâm của một đỉnh và trước đó đã nhấn vào một đỉnh

if (temp.ifChecked(e.X, e.Y) && drag)

{

// cập nhật đỉnh cuối của cạnh

c.P2 = temp.getID;

// gọi form nhập độ dài cạnh, trong form đó thực hiện thêm cạnh đó vào trong mảng các cạnh

Inputbox = new inputBox ( new canh (c.X1, c.Y1, temp.X, temp.Y, c.P1, c.P2, 1));

Inputbox.Show();

break ;

}

}

// cho đỉnh đầu đỉnh cuối cạnh trùng nhau (để hiển thị không

bị lỗi)

c.X2 = c.X1; c.Y2 = c.Y1;

drag = false ;

pictureBox1.Invalidate();

}

Nhấn nút Tìm:

Trang 13

private void button1_Click( object sender, EventArgs

e)

{

start = true ;

richTextBox1.Clear();

map = new bando (pList.Count, cList);

int isp= int Parse(textBox1.Text);

int iep= int Parse(textBox2.Text);

dinh ps= new dinh ();

dinh pe = new dinh ();

foreach ( dinh p in pList)

{

if (p.getID == isp) ps = p;

if (p.getID == iep) pe = p;

}

GBFS greedy = new GBFS (cList,

pList,map.duongdi,ps,pe);

foreach ( dinh p in pList)

{

// cập nhật giá trị hàm đánh giá cho các đỉnh

p.H = greedy.birdFly(p);

}

pictureBox1.Invalidate();

// thực hiện giải thuật GBFS

greedy.GBFS_algorith(richTextBox1,cList);

}

III Hạn chế

Chưa mô tả đúng không gian trạng thái theo yêu cầu bài toán

Ngày đăng: 25/03/2014, 22:19

TỪ KHÓA LIÊN QUAN

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

TÀI LIỆU LIÊN QUAN

w