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

Một Agent tự nhận thức để tìm kiếm

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 (332.67 KB, 57 trang )

Luận văn tốt nghiệp GVHD: HUỲNH VĂN ĐỨC
PHẦN I : LÝ THUYẾT
CHƯƠNG I : Ý TƯỞNG VÀ ĐẶC TRƯNG CỦA BÀI TOÁN

1. Ýù Tưởng
Trong thời đại kỹ thuật công nghệ phát triển mạnh mẽ như hiện nay,
vấn đề tự động hoá luôn được đặt lên vò trí hàng đầu. Những công việc trước
đây con người phải tự tay làm thì ngày nay đã được thay thế dần bằng những
bộ máy hiện đại được lập trình theo những chức năng chuyên dụng.
Theo đà phát triển, con người đã chế tạo ra Robot – một loại máy
móc thông minh kết hợp từ các ngành cơ khí, điện tử và tin học – và nó giúp
con người rất nhiều việc: từ việc thám hiểm những nơi con người không đến
được cho đến những công việc nội trợ trong gia đình.
Từ khi xuất hiện đến nay, Robot luôn được các nhà khoa học đặc biệt
quan tâm và làm cho nó ngày càng thông minh hơn, chuyên nghiệp hơn để
thích ứng với những yêu cầu mới, những công việc mới trong những lónh vực
mới. Một trong những việc rất cần đến sự trợ giúp của Robot là lónh vực tìm
kiếm, chẳng hạn như việc tìm và gỡ mìn, một việc làm rất nguy hiểm đối
với con người nhưng Robot lại làm rất tốt. Bên cạnh đó, việc thám hiểm
SVTH: Đặng Hồng Hải Trang 1
Luận văn tốt nghiệp GVHD: HUỲNH VĂN ĐỨC
những hành tinh xa xôi, những đáy biển sâu… thì không có sự lựa chọn nào
tốt hơn Robot.
Hiện nay, con người còn có những ý tưởng chưa thực hiện được về
việc chế tạo Robot như: Robot cảnh sát chuyên trấn áp tội phạm, Robot nội
trợ, Robot có cảm xúc, Robot cảm nhận bằng âm thanh, Robot mô phỏng
các hoạt động của con người…
Tuy Robot được ứng dụng vào rất nhiều lónh vực khác nhau nhưng
hiện tại, việc chế tạo Robot vẫn còn gặp rất nhiều khó khăn về kỹ thuật
cũng như công nghệ. Thực tế đó đã làm nảy sinh ý tưởng: có thể mô phỏng
hoạt động của một Robot trong thế giới thực bằng máy tính được không? Câu


trả lời là có và đã có nhiều công ty lớn làm theo cách này. Đây là một
hướng phát triển rất quan trọng trong việc chế tạo Robot vì nó giúp cho việc
thiết kế cũng như thử nghiệm Robot không còn khó khăn và tốn kém như
trước.
Tuy nhiên, việc thể hiện toàn bộ hoạt động của một Robot từ thế giới
thực lên máy tính là một bài toán khá rộng lớn nên ở đây, trong giới hạn của
đề tài này, tôi chỉ tập trung tìm hiểu bài toán “Xây dựng mô hình mô phỏng
một đối tượng – tạm gọi là Robot – có khả năng nhận thức môi trường chung
quanh để tìm kiếm mục tiêu”. Phần quan trọng của bài toán này là mô phỏng
sự nhận thức của Robot, một bài toán tuy nhỏ nhưng không thể thiếu đối với
hầu hết các Robot.
Mục tiêu của bài toán là mô phỏng cách một Robot tự phân tích môi
trường chung quanh để đi tìm vật thể. Giống như con người, đầu tiên Robot
phải tìm nó bằng cách đi tìm khắp mọi nơi nhưng khi đã gặp thì Robot sẽ
nhớ vò trí đó để đònh vò cho lần tìm kiếm sau. Và trong quá trình tìm kiếm,
Robot phải tìm cách tránh né chướng ngại vật, phải đánh dấu đường đi đã
qua, phải tự đưa ra những quyết đònh khi đã có thêm thông tin…
SVTH: Đặng Hồng Hải Trang 2
Luận văn tốt nghiệp GVHD: HUỲNH VĂN ĐỨC
Với bài toán này, các nội dung chính cần đạt được là:
 Khả năng nhận thức môi trường xung quanh của Robot: Robot
sau khi “nhìn” sẽ phân biệt được chướng ngại vật, đường đi
hay vật cần tìm trong khung nhìn.
 Khả năng đưa ra hành vi thích hợp của Robot: sau khi nhận
thức được môi trường chung quanh, Robot sẽ đi tìm mục tiêu
theo hướng tốt nhất trong các hướng có thể đi được, kết hợp
chuyển hướng quan sát nếu gặp phải chướng ngại vật.
 Khả năng học của Robot: Robot có thể học bằng cách nhớ lại
vò trí của vật cần tìm để đònh vò cho lần tìm kiếm sau.
2. Đặc trưng của bài toán:

Do đây là một bài toán tìm kiếm nên nó có một số đặc trưng sau:
• Thông tin về đối tượng cần tìm có thể chưa chính xác hoặc bò
thay đổi (Heuristic chưa có hoặc bò thay đổi)
• Đối tượng cần tìm có thể ở những nơi mà Robot không bao giờ
tìm thấy được vì đối tượng bò che khuất phía sau vật cản. Kết
quả là không bao giờ tìm thấy trong trường hợp môi trường cần
tìm kiếm rộng lớn (có khả năng thất bại)
• Có thể có những đường không đi tiếp được mà thoạt đầu Robot
chưa biết (có khả năng quay lui)
• Có thể có những ngã đường buộc Robot phải chọn một trong số
các hướng có thể đi được. Trong thực tế, hướng “gần” đối
tượng cần tìm lại là hướng xa nhất do cuối cùng phải đi đường
vòng (khả năng mạo hiểm trong việc rẽ nhánh)
SVTH: Đặng Hồng Hải Trang 3
Luận văn tốt nghiệp GVHD: HUỲNH VĂN ĐỨC
• Robot có thể được đặt ở những nơi mà tất cả các hướng Robot
đều không thể đi tiếp. Kết quả là Robot sẽ quay lui về tới vò trí
xuất phát và ngưng quá trình tìm kiếm (khả năng kết thúc sớm)
• Đối tượng cần tìm có thể nằm ở những nơi Robot chỉ nhìn thấy
nhưng không thể đi đến được (khả năng Robot đi vòng quanh
đối tượng càng lúc càng xa)
• Có thể có những lối đi quá hẹp để Robot có thể đi qua được
(coi như đường đang đi là đường không đi tiếp được)
• Robot nên đi những nơi mà nó chưa đi qua. Do đó có thể có
khả năng đối tượng cần tìm nằm ở bên kia đường đã đi rồi. Kết
quả là Robot sẽ phải quay lui hoặc đi vòng.
SVTH: Đặng Hồng Hải Trang 4
Luận văn tốt nghiệp GVHD: HUỲNH VĂN ĐỨC
CHƯƠNG II : KIẾN THỨC LIÊN QUAN


Do đề tài mô phỏng khả năng nhận thức của Robot nên một số kiến thức
sau đây được sử dụng:
Đồ hoạ máy tính: để thể hiện giao diện và giải quyết một số vấn đề
kỹ thuật như: tạo khung nhìn, thu thập thông tin về những đối tượng trong
khung nhìn …
Trí tuệ nhân tạo: hỗ trợ khả năng nhận thức và đưa ra quyết đònh nhằm
phục vụ cho việc tìm kiếm.
Lập trình hướng đối tượng: vì tính chất của đề tài là mô phỏng thế giới
thực nên lập trình hướng đối tượng là một cách tiếp cận hiệu quả nhất.
UML (Unified Modeling Languge): được sử dụng để lên mô hình cho
dự án .
I. ĐỒ HỌA MÁY TÍNH:
SVTH: Đặng Hồng Hải Trang 5
Luận văn tốt nghiệp GVHD: HUỲNH VĂN ĐỨC
Đồ hoạ máy tính là một trong những lónh vực phát triển nhanh nhất và lý
thú nhất của ngành tin học. Ngay từ khi xuất hiện, đồ họa máy tính đã cuốn
hút rất nhiều người thuộc nhiều lónh vực khác nhau. Và nhờ có công nghệ
đồ họa mà con người có thể làm quen dễ dàng với máy tính. Do đó, để thể
hiện giao diện cũng như giải quyết một số vấn đề kỹ thuật, đề tài này cũng
dùng đến một số kỹ thuật sau:
Tiếp cận Camera tổng hợp: sử dụng cách tiếp cận này để tạo ra khung
nhìn cho Robot.
Các giải thuật xén: để lấy các đối tượng trong khung nhìn của Robot
nhằm mô phỏng việc Robot chỉ có thể thấy những gì nằm trong khung nhìn
của nó mà thôi.
1. Khái niệm :
Đồ họa là quá trình đưa ra một bức ảnh dựa vào một số mô tả. Để làm
được điều này chúng ta phải thực hiện đồng thời 2 việc: thứ nhất là đưa ra
một tiếp cận khả dó mô tả được các đối tượng từ đơn giản đến phức tạp, thứ
hai là xây dựng một tập đầy đủ các công cụ vẽ ảnh cho phép đưa ra những

bức ảnh từ những nét phác thảo thô sơ cho đến những hình ảnh sống động
đầy hiện thực. Nói cách khác, đồ họa máy tính là tất cả những gì liên quan
đến việc sử dụng máy tính để phát sinh ra hình ảnh. Các vấn đề liên quan
đến công việc này bao gồm: tạo, lưu trữ, thao tác trên các mô hình hình học
của đối tượng và các ảnh.
2. Các ứng dụng tiêu biểu của kỹ thuật đồ họa:
2.1 Xây dựng giao diện người dùng (User Interface)
SVTH: Đặng Hồng Hải Trang 6
Luận văn tốt nghiệp GVHD: HUỲNH VĂN ĐỨC
Giao diện đồ họa đang được đa số người dùng ưa thích nhờ tính thân
thiện, dễ sử dụng của nó. Ưu điểm của nó so với ứng dụng console có thể
được tóm tắt như sau:
• Người dùng có thể nắm bắt dễ dàng nếu các icon được thiết kế
tốt để gợi nhớ về chức năng của nó.
• Có khả năng mở rộng giao diện, nhiều cửa sổ.
2.2 Lónh vực giải trí, nghệ thuật và mô phỏng :
Các phần mềm đồ họa có thể cho phép các họa só tạo ra các hình ảnh
ngay trên màn hình máy tính. Người họa só được máy tính cung cấp các công
cụ làm việc rất đầy đủ như: khung vẽ, bảng pha màu, các thao tác cắt, dán,
tẩy, xóa, phóng to, thu nhỏ và rất nhiều công cụ toán học khác nhau mà họa
só trên khung vải không sao có được. Các phần mềm khác để xây dựng các
hình ảnh động và các kỹ xảo hoạt hình cũng có đầy đủ chức năng như vậy.
Hiện tại công nghệ VRML đang phát triển rất nhanh cho phép tạo ra các thế
giới thực tại ảo trên máy tính cũng như cho phép xây dựng những ứng dụng
trong giải trí, trò chơi, thương mại.
3. Giải thuật xén- Clipping:
Xén là tiến trình xác đònh các điểm của một đối tượng nằm trong hay
ngoài cửa sổ hiển thò. Đặc trưng của bài toán xén hình là loại bỏ các phần
hình ảnh nằm ngoài một vùng cho trước. Hiện nay có 2 hướng tiếp cận xén
thông dụng là cắt và tô. Phương pháp cắt được dùng trong trường hợp hình

nhỏ hơn vùng cần xén. Trong khi đó, phương pháp tô được dùng trong
trường hợp hình lớn hơn vùng cần xén. Vì tính chất của đề tài này là hình
ảnh rất lớn so với vùng cần xén (chứa luôn vùng cần xén) nên ở đây tôi
chọn phương pháp tô mà không chọn phương pháp cắt. Dựa trên phương
SVTH: Đặng Hồng Hải Trang 7
Luận văn tốt nghiệp GVHD: HUỲNH VĂN ĐỨC
pháp tô này, thay vì tô màu ở những vò trí cần tô ta lấy thông tin về đối
tượng tại đó.
Có hai cách tiếp cận chính để tô màu một vùng tô là: tô theo dòng
quét (scan-line fill) và tô theo đường biên (boundary fill). Phương pháp tô
màu theo dòng quét thường được dùng để tô màu các đa giác và một số
đường cong đơn giản. Còn phương pháp tô màu theo đường biên thường
được dùng cho các vùng tô có đường biên phức tạp hơn.
Vì khung nhìn của Robot chỉ là một đa giác đơn giản nên phương
pháp tô màu theo dòng quét được sử dụng thay vì phương pháp tô màu theo
đường biên.
Giải thuật tô màu đa giác theo dòng quét – Scanline:
Giải thuật dựa trên ý tưởng sử dụng một đường quét trên trục y của
màn hình đi từ y
max
đến y
min
của vùng cần được tô màu. Với mỗi giá trò y =
y
i
đường thẳng quét cắt các đường biên của vùng cần tô tạo ra đoạn thẳng y
= y
i
với giới hạn x ∈ [x
min

- x
max
]. Trên đoạn thẳng đó chúng ta tô màu các
điểm tương ứng đi từ x
min
> x
max
. Các điểm cần tô màu sẽ là (x
i
, y
i
) thuộc
đoạn thẳng y = y
i
nói trên.
Phép tô màu hình chữ nhật với giải thuật Scanline là phép tô màu đơn
giản nhất bởi với mọi đường quét y = y
i
ta đều thu được hai giá trò x
min

x
max
như nhau.
Phép tô màu cho một đa giác bất kỳ sẽ phức tạp hơn rất nhiều so với
hình chữ nhật. Độ phức tạp ở đây sẽ xảy ra từ việc xác đònh giải thuật cho
việc tính giao điểm của đường thẳng quét để tìm ra đường biên xấp xỉ khi tô
màu đến việc suy diễn đưa ra các phần đoạn thẳng cần tô màu trên đường
thẳng quét khi gặp loại hình đa giác lõm hay điểm cắt trùng với đỉnh của đa
giác khi mô tả.

SVTH: Đặng Hồng Hải Trang 8
Luận văn tốt nghiệp GVHD: HUỲNH VĂN ĐỨC
Phép tô màu một đa giác điển hình (như hình vẽ) sẽ theo những bước
sau:
 Tìm giao điểm của đường thẳng quét với các cạnh của đa giác.
 Sắp xếp các giao điểm theo thứ tự tăng dần của giá trò biến x.
 Tô màu từng đoạn thẳng nằm giữa cặp điểm giao của đường
thẳng quét và cạnh của đa giác. Trong bước này, ta phải giải
quyết một vấn đề nảy sinh khi đường thẳng quét đi qua đỉnh
của đa giác.
Giả sử rằng tại đỉnh của đa giác, đường thẳng quét sẽ cắt 2 cạnh của
đa giác tại hai điểm chồng khít lên nhau. Bài toán sẽ có lời giải trong một
số trường hợp khi số điểm cắt là chẵn. Với số điểm cắt lẻ thì chúng ta không
thể tìm được các cặp điểm cần tô màu.
Để khắc phục nhược điểm trên ta sắp xếp các đỉnh mà dòng quét đi
qua. Giải thuật sau đây sẽ cho phép ta quyết đònh lấy P là một điểm hay hai
điểm trùng khớp nhau vào danh sách các điểm cắt.
 Nếu P là giao điểm của 2 cạnh đa giác có hướng ngược nhau,
một cạnh có giá trò y tăng khi x tăng, một cạnh có giá trò y
giảm khi x tăng thì dòng quét tạo ra hai điểm giao trên P.
SVTH: Đặng Hồng Hải Trang 9
Luận văn tốt nghiệp GVHD: HUỲNH VĂN ĐỨC
 Ngược lại, nếu P là đỉnh chung của 2 cạnh đa giác có hướng y
cùng nhau, y tăng khi x tăng thì đỉnh P cung cấp 1 điểm giao
duy nhất cho danh sách điểm giao.
Điều này được minh họa như sau:
4. Camera tổng hợp:
Giống như con người, Robot cũng có khả năng nhìn và nhận biết được
sự có mặt của các đối tượng trong phạm vi quan sát. Để mô phỏng khả năng
này của Robot trên máy tính, tôi sử dụng cách tiếp cận camera tổng hợp với

các đặc điểm sau:
Là một công cụ hữu hiệu mà gói đồ họa 3D như CORE (Bergeron
1978), GKS3D và PHIGS (Brown 1985) cung cấp nhằm hỗ trợ cho việc lấy
ảnh của thế giới thực.
Camera tổng hợp có một mặt phẳng quan sát và một con mắt. Mặt
phẳng quan sát xác đònh hệ tọa độ quan sát. Cửa sổ mô tả trong mặt phẳng
quan sát. Con mắt, cửa sổ và các mặt phẳng trước, sau xác đònh khối quan
sát. Các cạnh đều bò xén qua 6 mặt của khối quan sát này, phần còn lại
được chiếu lên mặt phẳng quan sát, chuyển đến NDC (thiết bò đồ họa
chuẩn) và cuối cùng được vẽ lên thiết bò.
Nói cách khác, Camera tổng hợp mô tả một camera đònh vò và đònh
hướng trong không gian, gồm 3 phần chính:
SVTH: Đặng Hồng Hải Trang 10
Luận văn tốt nghiệp GVHD: HUỲNH VĂN ĐỨC
• Mặt phẳng quan sát (view plane) trong đó có đònh nghóa một
cửa sổ (window).
• Hệ quan sát.
• Và một con mắt.
Hình vẽ minh họa một camera như vậy lơ lửng trong hệ tọa độ thực
(World Coordinate System). Con mắt nhìn xuyên qua cửa sổ và thấy một
phần thế giới thực. Có thể coi camera tổng hợp như là một hệ tọa độ được
để tự do di chuyển trong không gian, mang theo mặt phẳng quan sát và con
mắt.
Các thành phần của camera tổng hợp:
• Gốc tọa độ của hệ UVN là điểm VRP (View Reference Point)
nằm trong mặt phẳng quan sát, được mô tả bằng r = (r
x
, r
y
, r

z
).
• Pháp tuyến của mặt phẳng quan sát xác đònh trục N của hệ
UVN, là vector VPN (View Plane Normal). Hệ UVN được
chọn là hệ tọa độ nghòch, các vector chỉ hướng tương ứng là u,
v, n và ta có u = n x v.
SVTH: Đặng Hồng Hải Trang 11
Luận văn tốt nghiệp GVHD: HUỲNH VĂN ĐỨC
Tính mềm dẻo của mô hình Camera tổng hợp:
Các thành phần của Camera cho phép điều khiển sự quan sát phù hợp
với cách di chuyển đầu của chúng ta.
• VRP (vector r) xác đònh vò trí của người quan sát, di chuyển
VRP giống như di chuyển đầu mà không thay đổi hướng nhìn.
• VPN (vector n) xác đònh hướng nhìn. Thay đổi VPN giống như
động tác quay đầu.
• Thay đổi “hướng lên” (thay đổi vector v) giống như nghiêng
đầu mà vẫn giữ mắt cố đònh trên đối tượng.
II. TRÍ TUỆ NHÂN TẠO
Trong cuộc sống ngày nay, máy tính là một trợ thủ đắc lực và không thể
thiếu của con người trong việc xử lý thông tin. Không những thế, máy tính
còn có khả năng giải quyết các nhiệm vụ ở mức độ trí tuệ ngày càng cao.
Theo một nghóa nào đó, máy tính đã được trang bò trí tuệ nhân tạo.
Mục tiêu của trí tuệ nhân tạo là nghiên cứu các kỹ thuật làm cho máy
tính có thể “suy nghó một cách thông minh”. Theo một nghóa hẹp, trí tuệ
nhân tạo nghóa là mô phỏng quá trình suy nghó của con người khi đưa ra
những quyết đònh, những lời giải bằng cách tìm kiếm thông tin trong không
SVTH: Đặng Hồng Hải Trang 12
Luận văn tốt nghiệp GVHD: HUỲNH VĂN ĐỨC
gian bài toán. Từ đó thiết kế các chương trình cho máy tính để giải quyết
bài toán trong quá trình tìm kiếm.

Trên cơ sở đó, ta ứng dụng kỹ thuật tìm kiếm của trí tuệ nhân tạo vào đề
tài nhằm giải quyết bài toán tìm kiếm của Robot.
1. Khái niệm:
Trong thực tế, nhiều dạng hoạt động của con người từ những tính toán
trong các nghiên cứu khoa học kỹ thuật, các bài toán xử lý dữ liệu cỡ lớn
trong quản lý kinh tế xã hội đến những hoạt động ít nhiều mang tính giản
đơn như giải đáp câu đố, chơi cờ, sửa chữa máy móc … đều đòi hỏi sự tham
gia của trí tuệ.
Trí tuệ nhân tạo là một ngành khoa học chuyên nghiên cứu và tạo ra các
chương trình thực hiện các công việc như con người hoặc mô phỏng hoạt
động của não người.
Ngoài ra, trí tuệ nhân tạo còn làm cho máy tính có khả năng suy nghó
cũng như có thể mô phỏng quá trình học của con người. Có thể nhận thấy
rằng bộ não của con người có thể tích hợp những tri thức mới mà không cần
phải thay đổi cách thức làm việc, không cần phải thay đổi cách suy diễn
trong não bộ hoặc loại bỏ đi những sự kiện đã được lưu trước đó. Trên cơ sở
đó các chuyên gia trí tuệ nhân tạo cố gắng làm cho các chương trình trí tuệ
nhân tạo hoạt động tương tự như thế.
2. Các lónh vực nghiên cứu và ứng dụng cơ bản của Trí Tuệ
Nhân Tạo:
Sự phát triển mạnh mẽ của trí tuệ nhân tạo và tin học trong những thập
niên gần đây đã tạo ra ngày càng nhiều sản phẩm thông minh phục vụ trong
đời sống hằng ngày, trong công nghiệp cũng như trong các ngành khoa học.
SVTH: Đặng Hồng Hải Trang 13
Luận văn tốt nghiệp GVHD: HUỲNH VĂN ĐỨC
Từ đó có thể phân chia các lónh vực nghiên cứu và ứng dụng quan trọng của
trí tuệ nhân tạo theo 4 hướng cơ bản sau :
• Mô hình hoá trên máy tính những chức năng khác nhau trong
quá trình sáng tạo như : các trò chơi, chứng minh tự động các
đònh lý, tổng hợp tự động các chương trình …

• Nâng cao khả năng trí tuệ “bên ngoài” của máy tính gắn liền
với các giao tiếp, hội thoại bằng cách sử dụng các kỹ thuật suy
diễn và tìm kiếm.
• Nâng cao khả năng trí tuệ “bên trong” của máy tính trên cơ sở
chế tạo các máy tính thế hệ mới với kiến trúc vật lý mới dựa
trên các nguyên lý của trí tuệ nhân tạo.
• Chế tạo các Robot thông minh có khả năng thực hiện những
thao tác phức tạp, có thể ”suy nghó” và “hành động” để đạt
đến mục đích đã đặt ra.
3. Các phương pháp và kỹ thuật Trí Tuệ Nhân Tạo
Các bài toán trí tuệ nhân tạo trải rộng trong nhiều lónh vực khác nhau
nên việc giải quyết chúng đòi hỏi phải đáp ứng những yêu cầu về phương
diện kỹ thuật tin học và cả về thiết bò tương ứng.
Các phương pháp và kỹ thuật trí tuệ nhân tạo cơ bản bao gồm:
- Các phương pháp biểu diễn tri thức và công nghệ xử lý tri thức.
- Các phương pháp giải quyết vấn đề.
- Các phương pháp Heuristic.
- Các phương pháp học.
- Các ngôn ngữ trí tuệ nhân tạo.
SVTH: Đặng Hồng Hải Trang 14
Luận văn tốt nghiệp GVHD: HUỲNH VĂN ĐỨC
Xử lý danh sách, kỹ thuật đệ quy, kỹ thuật quay lui … là những kỹ thuật
cơ bản của tin học truyền thống có liên quan trực tiếp đến trí tuệ nhân tạo.
Vì đề tài sử dụng các phương pháp tìm kiếm Heuristic và phương pháp
học nên ở đây chỉ đề cập đến hai phương pháp này. Còn những phương
pháp khác nếu có nhu cầu tìm hiểu thêm, xin xem thêm ở tài liệu tham
khảo.
4. Các Giải Thuật Tìm Kiếm Heuristic
Lập trình Heuristic là một hướng tiếp cận quan trọng trong việc xây dựng
các hệ thống trí tuệ nhân tạo. Lý thuyết tìm kiếm Heuristic bao gồm các

phương pháp và các kỹ thuật tìm kiếm, sử dụng các tri thức đặc biệt nảy
sinh từ bản thân bài toán cần giải để rút ngắn quá trình giải, nhanh chóng đi
đến kết quả mong muốn. Kỹ thuật cơ bản dựa trên các tri thức Heuristic hay
được sử dụng trong thực tiễn là các hàm đánh giá.
4.1 Giải thuật leo đồi
Giải thuật leo đồi là một giải thuật tìm kiếm dựa trên hàm đánh giá
theo chiều sâu nghóa là chỉ tập trung tìm kiếm theo một hướng.
Những nét chính của thuật giải
Thuật giải sử dụng 2 danh sách:
- Danh sách mở Open, chứa các đỉnh sẽ được xem xét ở các
bước kế tiếp.
- Danh sách đóng Close, chứa các đỉnh đã được xem xét.
SVTH: Đặng Hồng Hải Trang 15
Luận văn tốt nghiệp GVHD: HUỲNH VĂN ĐỨC
Các đối tượng chính trong thuật giải:
- Đỉnh bắt đầu s
- Đỉnh kết thúc g
- Đỉnh đang xét n
- Danh sách B(n) chứa các đỉnh đi được từ đỉnh n.
Thuật giải:
1. Open.Store(s)
2. while not Open.Empty() do
2.1 n = Open.Retrieve()
2.2 Close.Store(n)
2.3 if n == g then return true
2.4 for m ∈ B(n) do Open.Store(m)
3. return false
Danh sách mở Open được sử dụng trong trường hợp này là Stack.
4.2 Giải thuật A*:
Giải thuật A* là một giải thuật tìm kiếm dựa trên hàm đánh giá theo

chiều rộng với các thông tin Heuristic cho phép sắp xếp lại các đỉnh.
Những nét chính của thuật giải:
Thuật giải cũng sử dụng 2 danh sách:
- Danh sách mở Open, chứa các đỉnh sẽ được xem xét ở các bước kế
tiếp.
- Danh sách đóng Close, chứa các đỉnh đã được xem xét.
Các đối tượng chính trong thuật giải:
- Đỉnh bắt đầu s
SVTH: Đặng Hồng Hải Trang 16
Luận văn tốt nghiệp GVHD: HUỲNH VĂN ĐỨC
- Đỉnh kết thúc g
- Đỉnh đang xét n
- Danh sách B(n) chứa các đỉnh đi được từ đỉnh n.
Thuật giải A*:
1. Open.Store(s)
2. while not Open.Empty() do
2.1 n = Open.Retrieve()
2.2 Close.Store(n)
2.3 if (n == g) then return true
2.4 for m ∈ B(n) do
2.4.1 <Tính ^f(m)>
2.4.2 if (m ∉ Open ∪ Close) then Open. Store(m)
2.4.3 if (m == (m’ ∈Open∪Close) && ^f(m) < ^f(m’) then
2.4.3 .1 <đặt lại tham chiếu cho m’)
2.4.3 .2 if (m’ ∈ Close ) < chuyển m’ qua Open )
3. return false
Danh sách mở Open được sử dụng trong trường hợp này là Queue.
III. LẬP TRÌNH HƯỚNG ĐỐI TƯNG VỚI VISUAL C++
Thực tế, mọi thứ trong thế giới thực đều có thể được xem như đối tượng.
Do đó, để mô phỏng thế giới thực thì không có hướng tiếp cận nào tốt hơn

hướng đối tượng. Trong số các ngôn ngữ hỗ trợ hướng đối tượng thì C++
được xem là ngôn ngữ lập trình thông dụng nhất. Hiện nay, trên thò trường
có nhiều công cụ hỗ trợ lập trình trên C++ như Borland C++, Watson C++,
Visual C++… trong đó Visual C++ của hãng Microsoft được ưa chuộng nhất
vì tính thân thiện, dễ sử dụng và hỗ trợ triển khai ứng dụng nhanh. Vì thế,
SVTH: Đặng Hồng Hải Trang 17
Luận văn tốt nghiệp GVHD: HUỲNH VĂN ĐỨC
tôi chọn Visual C++ làm công cụ phát triển ứng dụng của mình trong đề tài
này.
1. Khái niệm về lập trình hướng đối tượng:
1.1 Tổng quan:
Lập trình hướng đối tượng (Object-Oriented Programming – gọi tắt là
OOP), hay chi tiết hơn là lập trình đònh hướng đối tượng, là một phương
pháp lập trình lấy đối tượng (object) làm nền tảng để xây dựng thuật giải,
xây dựng chương trình.
Lập trình hướng đối tượng đặt trọng tâm vào đối tượng - yếu tố quan
trọng trong quá trình phát triển chương trình- và không cho phép dữ liệu
biến động tự do trong hệ thống. Dữ liệu được gắn chặt với các hàm thành
các vùng riêng mà chỉ có các hàm đó tác động lên và cấm các hàm bên
ngoài truy cập tới một cách tuỳ tiện. Lập trình hướng đối tượng cho phép
chúng ta phân tích bài toán thành các thực thể được gọi là các đối tượng và
sau đó xây dựng các dữ liệu cùng các hàm xung quanh các đối tượng đó.
Các đối tượng có thể tác động, trao đổi thông tin với nhau thông qua cơ chế
truyền nhận thông điệp (message). Việc tổ chức một chương trình hướng đối
tượng có thể được mô tả như sau:
Lập trình hướng đối tượng có các đặc tính chủ yếu sau:
• Tập trung vào dữ liệu thay cho các hàm.
• Chương trình được chia thành các đối tượng.
SVTH: Đặng Hồng Hải Trang 18
Đối tượng A

Dữ liệu
Đối tượng B
Dữ liệu
Đối tượng C
Dữ liệu
message
Luận văn tốt nghiệp GVHD: HUỲNH VĂN ĐỨC
• Cấu trúc dữ liệu được thiết kế sao cho đặc tả được đối tượng.
• Các hàm thao tác trên các vùng dữ liệu của đối tượng được gắn
với cấu trúc dữ liệu đó.
• Dữ liệu được đóng gói lại, được che giấu và không cho phép
các hàm ngoại lai truy cập tự do.
• Các đối tượng tác động và trao đổi thông tin với nhau qua các
hàm
• Có thể dễ dàng bổ sung dữ liệu và các hàm mới vào đối tượng
nào đó khi cần thiết.
• Chương trình được thiết kế theo cách tiếp cận từ dưới lên
(bottom-up).
Sau đây là một số khái niệm được sử dụng trong lập trình hướng đối
tượng.
1.2 Một số khái niệm:
Đối tượng (object)
Đối tượng là sự kết hợp giữa dữ liệu và phương thức thao tác trên dữ
liệu đó. Có thể đưa ra công thức phản ánh bản chất kỹ thuật của lập trình
hướng đối tượng như sau:
Đối tượng = dữ liệu + phương thức
Lớp (class)
Lớp là một khái niệm mới trong lập trình hướng đối tượng so với các
kỹ thuật lập trình khác. Đó là một tập các đối tượng có cấu trúc dữ liệu và
các phương thức giống nhau (hay nói cách khác là một tập các đối tượng

cùng loại). Như vậy khi có một lớp thì chúng ta sẽ biết được một mô tả cấu
trúc dữ liệu và phương thức của các đối tượng thuộc lớp đó. Mỗi đối tượng
sẽ là một thể hiện cụ thể (instance) của lớp đó. Trong lập trình, chúng ta có
SVTH: Đặng Hồng Hải Trang 19
Luận văn tốt nghiệp GVHD: HUỲNH VĂN ĐỨC
thể coi một lớp như là một kiểu còn các đối tượng sẽ là các biến có kiểu của
lớp.
Nguyên tắc đóng gói dữ liệu
Trong lập trình hướng đối tượng ta đã thấy các hàm hay thủ tục được
sử dụng mà không cần biết nội dung cụ thể của nó. Người sử dụng chỉ cần
biết chức năng của hàm cũng như các tham số cần truyền vào để gọi hàm
thực thi mà không cần quan tâm đến những lệnh cụ thể bên trong nó. Người
ta gọi đó là sự đóng gói về chức năng.
Trong lập trình hướng đối tượng, không những chức năng được đóng
gói mà cả dữ liệu cũng như vậy. Với mỗi đối tượng, người ta không thể truy
cập trực tiếp vào các thành phần dữ liệu của nó mà phải thông qua các
thành phần chức năng (các phương thức) để làm việc đó.
Chúng ta sẽ thấy sự đóng gói thực sự về dữ liệu chỉ có trong một
ngôn ngữ lập trình hướng đối tượng “thuần khiết” (pure) theo nghóa các
ngôn ngữ được thiết kế ngay từ đầu chỉ cho lập trình hướng đối tượng. Còn
đối với các ngôn ngữ “lai” (hybrid) được xây dựng trên các ngôn ngữ khác
(ban đầu chưa phải là hướng đối tượng) như C++ vẫn có những ngoại lệ nhất
đònh vi phạm nguyên tắc đóng gói dữ liệu.
Tính thừa kế (inheritance)
Một khái niệm quan trọng của lập trình hướng đối tượng là sự thừa
kế. Sự thừa kế cho phép chúng ta đònh nghóa một lớp mới trên cơ sở các lớp
đã tồn tại có bổ sung những phương thức hay các thành phần dữ liệu mới.
Khả năng kế thừa cho phép chúng ta sử dụng lại một cách dễ dàng các
module chương trình mà không cần thay đổi các module đó. Đây là một
điểm mạnh của lập trình hướng đối tượng so với lập trình cấu trúc.

Tính đa hình (polymorphime)
SVTH: Đặng Hồng Hải Trang 20
Luận văn tốt nghiệp GVHD: HUỲNH VĂN ĐỨC
Tính đa hình xuất hiện khi có khái niệm kế thừa. Giả sử chúng ta có
một kế thừa lớp hình tứ giác và tam giác từ lớp hình đa giác (hình tam giác
và tứ giác có đầy đủ các thuộc tính và tính chất của một hình đa giác). Lúc
này một đối tượng thuộc lớp hình tam giác hay tứ giác đều có thể hiểu rằng
nó là một hình đa giác. Mặt khác với mỗi đa giác ta có thể tính diện tích của
nó. Như vậy làm thế nào mà một đa giác có thể sử dụng đúng công thức để
tính diện tích phù hợp với nó là hình tam giác hay tứ giác. Ta gọi đó là tính
đa hình.
1.3 Các ưu điểm của lập trình hướng đối tượng:
Lập trình hướng đối tượng đem lại một số lợi thế cho người thiết kế
lẫn người lập trình. Cách tiếp cận hướng đối tượng giải quyết được nhiều
vấn đề tồn tại trong quá trình phát triển phần mềm và tạo ra được những
phần mềm có độ phức tạp và chất lượng cao. Phương pháp này mở ra một
triển vọng to lớn cho người lập trình. Những ưu điểm chính của lập trình
hướng đối tượng là:
• Thông qua nguyên lý kế thừa, chúng ta có thể loại bỏ được
những chương trình lặp lại trong quá trình mô tả các lớp và có
thể mở rộng khả năng sử dụng của các lớp đã xây dựng mà
không cần phải viết lại.
• Chương trình được xây dựng từ những đơn thể (đối tượng) trao
đổi với nhau nên việc thiết kế và lập trình sẽ được thực hiện
theo quy trình nhất đònh chứ không phải dựa vào kinh nghiệm
và kỹ thuật như trước nữa. Điều này đảm bảo rút ngắn được
thời gian xây dựng hệ thống và tăng năng suất lao động.
• Nguyên lý đóng gói hay che giấu thông tin giúp lập trình viên
tạo ra được những chương trình an toàn không bò thay đổi bởi
những đoạn chương trình khác.

SVTH: Đặng Hồng Hải Trang 21
Luận văn tốt nghiệp GVHD: HUỲNH VĂN ĐỨC
• Có thể xây dựng được ánh xạ các đối tượng của bài toán vào
đối tượng chương trình.
• Cách tiếp cận thiết kế đặt trọng tâm vào dữ liệu, giúp chúng ta
xây dựng được mô hình chi tiết và dễ dàng cài đặt hơn.
• Các hệ thống hướng đối tượng dễ mở rộng, nâng cấp thành
những hệ lớn hơn.
• Kỹ thuật truyền thông điệp trong việc trao đổi thông tin giữa
các đối tượng làm cho việc mô tả giao diện với các hệ thống
bên ngoài trở nên đơn giản hơn.
• Có thể quản lý được độ phức tạp của những sản phẩm phần
mềm.
Với nhiều đặc tính phong phú của lập trình hướng đối tượng nói riêng,
của phương pháp phân tích thiết kế và phát triển hướng đối tượng nói chung,
chúng ta hy vọng công nghiệp phần mềm sẽ có những cải tiến vượt bậc
không những về chất lượng mà còn gia tăng nhanh về số lượng trong tương
lai.
2. Ngôn ngữ lập trình Visual C++ trên môi trường Windows
2.1 Tổng quan:
Như chúng ta đã biết, các chương trình ứng dụng ngày nay thường là
phức tạp và quy mô hơn so với trước đây. Hơn nữa, bên cạnh quy mô lớn và
phức tạp thì giao diện đồ họa gần như không thể thiếu trong những chương
trình ứng dụng này.
SVTH: Đặng Hồng Hải Trang 22
Luận văn tốt nghiệp GVHD: HUỲNH VĂN ĐỨC
Tuy nhiên, cho dù các chương trình ứng dụng ngày càng đòi hỏi tính quy
mô, phức tạp hơn thì người lập trình vẫn có khả năng giảm thiểu các công
việc của mình nếu họ chọn được một công cụ lập trình hợp lý.
Visual C++ là một trong những công cụ nói trên. Với code-generating

wizards, Visual C++ có thể tạo ra khung sườn cho các chương trình ứng dụng
thực thi trong môi trường Windows trong vòng vài giây. Các lớp thư viện đi
kèm với Visual C++ như là Microsoft Foundation Classes (MFC) đã trở
thành một trong các tiêu chuẩn để phát triển các phần mềm dưới môi trường
Windows cho các trình biên dòch C khác nhau. Bên cạnh đó, các công cụ
soạn thảo khả kiến cũng tạo ra cho chúng ta các công cụ hữu hiệu để có thể
tạo các menu và các hộp hội thoại.
Nói tóm lại, việc nghiên cứu Visual C++ là một việc làm cần thiết cho
các nhà lập trình ứng dụng khi viết các chương trình thực thi trong môi
trường Windows và giao diện đồ họa.
Để cung cấp cho lập trình viên một môi trường làm việc hiệu quả,
Microsoft Developer Studio đã kết hợp các giai đoạn của việc lập trình như
soạn thảo, biên dòch và kiểm tra lỗi lại thành một giao diện duy nhất, điều
đó có nghóa chúng ta có thể cài đặt hay xoá bỏ các Breakpoint phục vụ cho
việc Debug chương trình trong cùng một giao diện với việc soạn thảo phần
Source code. Hơn thế nữa, khi chúng ta tiến hành xây dựng một đề án, môi
trường phát triển tích hợp (IDE - Integrated Development Environment) có
thể phát hiện các lỗi và cho phép chúng ta tiếp cận ngay đến vò trí lỗi đó
một cách nhanh chóng cho dù tập tin chứa các lỗi này chưa được mở.
Với Microsoft Visual C++, chương trình ứng dụng thường được xây dựng
trên cơ sở các lớp (classes). Có rất nhiều lớp khác nhau đã được xây dựng
sẵn thành thư viện để phục vụ cho người lập trình. Chẳng hạn như lớp CDC
SVTH: Đặng Hồng Hải Trang 23
Luận văn tốt nghiệp GVHD: HUỲNH VĂN ĐỨC
là lớp phục vụ rất đắc lực cho việc vẽ hình trong các ứng dụng viết bằng
Visual C++.
Lớp CDC
Một cách chuyên dụng, lớp CDC được thiết kế cho mục đích chính là vẽ
hình để tạo những hình ảnh thông báo hay để thực thi hàm OnDraw() khi
chúng ta cần làm việc trong các cửa sổ. Trong thực tế thì lớp CDC được

thiết kế bao gồm hai nhóm Device Context: một dùng cho việc quản lý các
quá trình vẽ và một dùng cho việc quản lý các quá trình hỏi đáp – truy vấn
(query). Việc quản lý quá trình vẽ trên các DC được thực thi bởi m_hDC và
việc quản lý các quá trình chất vấn là do m_hAttribDC. Khi chúng ta can
thiệp vào CDC dù với một công việc sơ đẳng nhất thì đáp ứng tương tự sẽ
xảy ra cho DC tương ứng. Do đó chúng ta có thể thực hiện các công việc
một cách đơn giản là sử dụng các hàm thành phần của CDC.
Đồng thời Windows cũng giới thiệu một thư viện GDI (Graphic Device
Interface). Thư viện này giúp cho chương trình viết ra có thể tiếp cận driver
Video và Printer của hệ thống một cách dễ dàng. Chương trình này có thể
gọi các hàm chức năng của GDI, tham khảo cấu trúc của các dữ liệu bằng
cách gọi Device Context. Windows sẽ ánh xạ cấu trúc Device Context
thành Physical Device và đưa ra Input/Output tương ứng.
Microsoft Developer Studio và tiến trình xây dựng:
Visual C++ là một thành phần của Microsoft Developer Studio là IDE
(Integrated Development Environtment). IDE có nguồn gốc từ Visual
Workbench dựa trên Quick C cho Window. Microsoft Developer Studio
cung cấp khả năng :
• Help Online làm việc như một Web Browser.
• AppWizard
• Có thể xem Project ở nhiều khía cạnh (editor, workspace)
• ClassWizard
SVTH: Đặng Hồng Hải Trang 24
Luận văn tốt nghiệp GVHD: HUỲNH VĂN ĐỨC
• Xây dựng giao diện gồm trình đơn và các khung đối thoại
• Compiling, Linking
• Debugging
Tiến trình xây dựng một ứng dụng của Visual C++ :
Ở đây, trong phạm vi đề tài này, chúng ta chỉ nghiên cứu lập trình C++
với sự hỗ trợ của thư viện MFC (Microsoft Foundation Class). Thư viện này

là một công cụ quan trọng để xây dựng nhanh các chương trình ứng dụng
Windows sử dụng Visual C++. Nó cũng làm cho việc lập trình dễ dàng hơn
bằng cách cung cấp những lớp, những đối tượng với các hành vi (Methods)
và các thuộc tính (Properties).
2.2 Thư viện MFC:
Thư viện MFC hỗ trợ 2 loại ứng dụng: SDI (Single Document Interface)
và MDI (Multi Document Interface).
SVTH: Đặng Hồng Hải Trang 25

×