Tải bản đầy đủ (.doc) (13 trang)

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

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 (215.48 KB, 13 trang )

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
Báo cáo môn học Nhập môn trí tuệ nhân tạo
Đề bài:
 !"
#"$%&'()*+, /+.*
/0&)*+122$"3245462
Tên học viên:
Khuất Đình Đăng
Giảng viên:
TS. Ngô Hữu Phúc
Yêu cầu:
780&' 9:4;$<=>?? 92@>A 9BC
I. Phương pháp %m kiếm Greedy Best First Search
D&)*+122$"3245462$@E&)*+
122$"3245462 FG"HIJK)*+2LJ*+MN
.)*+*
O !
 E
C)*+4;$<*E#"$%PQ =NRJ
JM*4STUV U1VJ
T4WPJQUWVJX*Y,J+Z
C)*+4;$<*EM[G\J] 9+J#"$%
WME)*+4SG 9MNME)*+
.ENM)*+*(EJ\J &J.#"$%
^\J] =E#"$%_"JMMGL`\J"+
 74WMZ$<ML


C)*+/.#"$%a
 b",W"4W*@
 6;$<*%/:W@
 6;$<*M4W]4W*INME)*+PM
[Y$J".:WQ
c(d4W.#"$%4Ja
 !!OaMNJ!OPJQ4W\J#I4MTZ ee!OPJQfg
Trạng thái đích
Trạng thái đích u
 !!ha!hPJQ^*:MTZ\J#IJMNMTZI
Z ee!hPJQfi
h D&122$"3245462
 jI
C'*+122$"3245462f)*+2LJ?
!4;$<&)*+"N,J
+Z CXT*Y,J+Z 9$2
%]..IN*+k+$2UV+ZUWGV2"/J`J
 CX]$2UV`MNZG..
Ví dụa)*+/h(n)f2",n+
WZ
Tìm kiếm đường đi với giá 6nh theo Kma
lMZ$</JG,Wm$+ZW3J24
 >@
6;$<Jk/ 6n+$22X%Y$`

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á;
End;
 bJK1356
• Tính đủa >.MM[@\JoP*M
M$J"EM*E*0/
 Q
• Độ phức tạp thời gian: pPQ 9+J2J4kG-W%+'"
4SGLJ
• Độ phức tạp không gian: pPQ FJ:G9$24
• Tính tối ưu: $*q/JK"r*qWJ
II. Các kết quả đạt được
O 78
3&'TMN 7R
-T./ 7R-4WX% 7R
Wh-/TW:h./ C]4WnMNR
Wh-T*%+:h./
1T /R
  T    * %+:h
. /    1  T    
$NR- TT
q -
h c#"  $%   PQ
1T     PQ  
R  -  J  J *    
      T 0  ^  *

  2     "  ,  
J+ Z  M  *
%+,   N    
2$J+
h(u) = d
cb
(u, e) + d(father(u),u)
C$

PJ2Q*q2",J+Zst2PJQ
UVJN2$Js$Pt2PJQJQ*%+,t2PJQ+
J
u +\J
 >N#"$%M)/
 >*M*J$.-
 >*M-M/J+-*.W4JK$
W
 9K-n`JM-*+v
 9GC'.n`J)*+
 C*+\J\J724423MwC23
 >GJv&'
>N&'a
 FNdinh-T&XMN./ FN"
*Jq4Ja
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;

- 44;$<..T'$-
- "TMTZ#-
- xyT4WX%-
- wa*Z-P-.E'[*ZQ
- !T-
- 6222$T-]0J"*
>&XZNa
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.
 FNcanhT&XMN/ >J
qNcanh
private int xdau, ydau, xcuoi, ycuoi;
// tọa độ 2 đỉnh của cạnh.
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
>&XNa
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
 FN$%GK*.T FN"-hJqh
LJJz{$J$sZK*LTM4WJ"/J
4Js.E4WLJK FN"hJqT
K*L$%M-MT
 FNGBFS T|JK1356 >JqN*4Ja
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ị
>&XNa
public double birdFly(dinh p)
// 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;Z4%*E

6%*EDDJ23a
private void pictureBox1_Paint(object sender,
PaintEventArgs e)
// hiển thị các cạnh, các đỉnh của đồ thị
6%*EGJa
private void pictureBox1_MouseDown(object sender,
MouseEventArgs e)
{
//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;
// 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();
}
6%*E$J".Ja
private void pictureBox1_MouseMove(object sender,
MouseEventArgs e)
{
// 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();
}
6%*EJa
private void pictureBox1_MouseUp(object sender,
MouseEventArgs e)
{
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();
}
9GvC'a
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ế
>v*2"/J`J

×