Download as docx, pdf, or txt
Download as docx, pdf, or txt
You are on page 1of 28

ĐẠI HỌC CÔNG NGHỆ GIAO THÔNG VẬN TẢI

KHOA CÔNG NGHỆ THÔNG TIN


-----🙞🙜🕮🙞🙜-----

NHÓM 4: BÀI TOÁN NGƯỜI DU LỊCH

Sinh viên thực hiện:

Lê Hải Anh
Nguyễn Đức Cường(72DCTT20215)
Vũ Hoàng Dương
Vương Phú Thắng
Nguyễn Quang Vũ

GV HƯỚNG DẪN: Đoàn Thị Thanh Hằng

HÀ NỘI – 2023
MỤC LỤC
LỜI MỞ ĐẦU......................................................................................................3
CHƯƠNG I: TỔNG QUAN VỀ TRÍ TUỆ NHÂN TẠO.................................5
1.1. Lịch sử hình thành và phát triển của trí tuệ nhân tạo.....................5
1.2. Khái niệm về trí tuệ nhân tạo.............................................................7
1.3. Các lĩnh vực trí tuệ nhân tạo nghiên cứu..........................................7
1.4. Ưu điểm, nhược điểm của trí tuệ nhân tạo........................................9
CHƯƠNG II: PHÂN TÍCH BÀI TOÁN.........................................................11
2.1. Mục đích của bài toán.......................................................................11
2.2. Đặt vấn đề...........................................................................................12
2.3. Mô tả trạng thái.................................................................................12
2.4. Toán tử chuyển trạng thái................................................................12
2.5. Không gian trạng thái của bài toán.................................................13
2.6. Biểu diễn không gian trạng thái dưới dạng đồ thị..........................13
CHƯƠNG III: THUẬT TOÁN VÀ BIỂU DIỄN TRẠNG THÁI CỦA BÀI
TOÁN.................................................................................................................15
3.1. Thuật toán Heuristic, nguyên lý vét cạn:........................................15
3.2. Thuật toán Trò chơi đoán số:...........................................................16
3.3. Trạng thái bài toán............................................................................17
CHƯƠNG IV: CHƯƠNG TRÌNH GIẢI QUYẾT BÀI TOÁN....................19
4.1. Viết chương trình:..............................................................................19
4.2. Kết quả chạy được.............................................................................24
KẾT LUẬN........................................................................................................28
LỜI MỞ ĐẦU
Trong khoa học máy tính, trí tuệ nhân tạo hay AI (tiếng Anh: artificial
intelligence), đôi khi được gọi là trí thông minh nhân tạo, là trí thông minh được
thể hiện bằng máy móc, trái ngược với trí thông minh tự nhiên của con người.
Thông thường, thuật ngữ "trí tuệ nhân tạo" thường được sử dụng để mô tả các
máy móc chủ(hoặc máy tính) có khả năng bắt chước các chức năng "nhận thức"
mà con người thường phải liên kết với tâm trí, như "học tập" và "giải quyết vấn
đề".

Khi máy móc ngày càng tăng khả năng, các nhiệm vụ được coi là cần "trí
thông minh" thường bị loại bỏ khỏi định nghĩa về AI, một hiện tượng được gọi
là hiệu ứng AI. Một câu châm ngôn trong Định lý của Tesler nói rằng "AI là bất
cứ điều gì chưa được thực hiện." Ví dụ, nhận dạng ký tự quang học thường bị
loại trừ khỏi những thứ được coi là AI, đã trở thành một công nghệ thông
thường. khả năng máy hiện đại thường được phân loại như AI bao gồm thành
công hiểu lời nói của con người, cạnh tranh ở mức cao nhất trong trò chơi chiến
lược (chẳng hạn như cờ vua và Go), xe hoạt động độc lập, định tuyến thông
minh trong mạng phân phối nội dung, và mô phỏng quân sự.

Trí tuệ nhân tạo có thể được phân thành ba loại hệ thống khác nhau: trí tuệ
nhân tạo phân tích, lấy cảm hứng từ con người và nhân tạo. AI phân tích chỉ có
các đặc điểm phù hợp với trí tuệ nhận thức; tạo ra một đại diện nhận thức về thế
giới và sử dụng học tập dựa trên kinh nghiệm trong quá khứ để thông báo các
quyết định trong tương lai. AI lấy cảm hứng từ con người có các yếu tố từ trí tuệ
nhận thức và cảm xúc; hiểu cảm xúc của con người, ngoài các yếu tố nhận thức
và xem xét chúng trong việc ra quyết định. AI nhân cách hóa cho thấy các đặc
điểm của tất cả các loại năng lực (nghĩa là trí tuệ nhận thức, cảm xúc và xã hội),
có khả năng tự ý thức và tự nhận thức được trong các tương tác.

Trí tuệ nhân tạo được thành lập như một môn học thuật vào năm 1956, và
trong những năm sau đó đã trải qua nhiều làn sóng lạc quan,sau đó là sự thất
vọng và mất kinh phí (được gọi là " mùa đông AI "), tiếp theo là cách tiếp cận
mới, thành công và tài trợ mới Trong phần lớn lịch sử của mình, nghiên cứu AI
đã được chia thành các trường con thường không liên lạc được với nhau.Các
trường con này dựa trên các cân nhắc kỹ thuật, chẳng hạn như các mục tiêu cụ
thể (ví dụ: " robot học " hoặc "học máy"), việc sử dụng các công cụ cụ thể
("logic" hoặc mạng lưới thần kinh nhân tạo) hoặc sự khác biệt triết học sâu sắc.
Các ngành con cũng được dựa trên các yếu tố xã hội (các tổ chức cụ thể hoặc
công việc của các nhà nghiên cứu cụ thể).

Lĩnh vực này được thành lập dựa trên tuyên bố rằng trí thông minh của con
người "có thể được mô tả chính xác đến mức một cỗ máy có thể được chế tạo để
mô phỏng nó". Điều này làm dấy lên những tranh luận triết học về bản chất của
tâm trí và đạo đức khi tạo ra những sinh vật nhân tạo có trí thông minh giống
con người, đó là những vấn đề đã được thần thoại, viễn tưởng và triết học từ thời
cổ đại đề cập tới. Một số người cũng coi AI là mối nguy hiểm cho nhân loại nếu
tiến triển của nó không suy giảm. Những người khác tin rằng AI, không giống
như các cuộc cách mạng công nghệ trước đây, sẽ tạo ra nguy cơ thất nghiệp
hàng loạt.

Trí tuệ nhân tạo đang trở thành một môn học phổ biến và được sử dụng
trong hầu hết các ứng dụng hiện nay. Có thể kể đến về một vài ứng dụng của trí
tuệ nhân tạo trong lập trình game rồi các trương trình xử lý phân tích toán học
phức tạp…Trong đó tìm kiếm là một mảng luôn luôn được nhắc tới nhiều nhất
trong trí tuệ nhân tạo. Vì vậy chúng em chọn đề tài “Trò chơi đoán số”, là một
trò chơi khá phổ biến, trò chơi thể hiện đặc trưng của thuật toán.
CHƯƠNG I: TỔNG QUAN VỀ TRÍ TUỆ NHÂN TẠO

1.1. Lịch sử hình thành và phát triển của trí tuệ nhân tạo.

Turing được coi là người khai sinh ngành trí tuệ nhân tạo bởi phát hiện của
ông về máy tính có thể lưu trữ chương trình và dữ liệu. Phép thử Turing dưới
dạng một trò chơi như sau. Hình dung có ba người tham gia trò chơi, một người
đàn ông (A), một người đàn bà (B) và một người chơi (C). Người chơi ngồi ở
một phòng tách biệt với A và B, không biết gì về A và B (như hai đối tượng ẩn
X và Y) và chỉ đặt các câu hỏi cũng như nhận câu trả lời từ A và B qua một màn
hình máy tính. Người chơi cần kết luận trong X và Y ai là đàn ông ai là đàn bà.
Trong phép thử này, A luôn tìm cách làm cho C bị nhầm lẫn và B luôn tìm cách
giúp C tìm được câu trả lời đúng. Phép thử Turing thay A bằng một máy tính, và
bài toán trở thành liệu C có thể phân biệt được trong X và Y đâu là máy tính đâu
là người đàn bà. Phép thử Turing cho rằng máy tính là thông minh (qua được
phép thử) nếu như biết cách làm sao cho C không thể chắc chắn kết luận của
mình là đúng. Phép thử Turing có ý nghĩa rất lớn là đã nhấn mạnh rằng khả năng
giao tiếp thành công của máy với con người trong một cuộc đối thoại tự do và
không hạn chế là một biểu hiện của trí thông minh nhân tạo.

TTNT được chú ý và được nghiên cứu từ rất sớm, ra đời trong một hội thảo
tại đại học Dartmout, năm 1956. Những nhà khoa học tham dự khi đó như Allen
Newell (CMU), Herbert Simon (CMU), John McCarthy (MIT), Marvin Mnsky
(MIT) và Arthur Samuel (IBM) đã trở thành những người sáng lập và lãnh đạo
các nhóm nghiên cứu về TTNT. Kể từ đó, TTNT bắt đầu được coi là một ngành
khoa học thực sự. Trong tiến trình lịch sử phát triển của mình, khoa học nghiên
cứu TTNT đã trải qua một số mốc quan trọng sau:

 Giữa thập niên 1960: Khởi đầu lạc quan với nhiều phong trào nghiên cứu
rộng.
 Những năm 1974: gián đoạn lần 1, mùa đông TTNT với sự thất vọng, mất
phương hướng và thiếu hụt kinh phí.
 Đầu những năm 1980: Hồi sinh nhờ thành công của các sản phẩm thương
mại của TTNT là hệ chuyên gia.
 Năm 1987: TTNT rơi vào giai đoạn gián đoạn và khó khăn lần thứ 2.
 Cuối những năm 90 và đầu thế kỉ 21: Thành công với các cách tiếp cận
mới, có nhiều tài trợ mới. TTNT bắt đầu chứng tỏ sức mạnh của mình khi chiến
thắng con người trong cờ vây, AI trở thành trợ lý của con người.
 Năm 2015 và tới bây giờ: bước ngoặt của TTNT với hàng loạt các dự án
phần mềm sử dụng AI.

Hình 1: Lịch sử phát triển của Trí tuệ nhân tạo (Nguồn: Applied Sciences)
Những năm gần đây, TTNT đã phát triển đáng kinh ngạc như màn ra mắt
bùng nổ của ChatGPT là cú huých dẫn đến hình thành một cuộc đua nghiên cứu,
phát triển và ứng dụng AI trên phạm vi toàn cầu, với sự tham gia của hàng loạt
ông lớn công nghệ như Microsoft, Google, Alibaba, Baidu…. Kéo theo đó các
nhà tạo lập phải liên tục phát triển các AI như ChatGPT nên ta thấy trí tuệ nhân
tạo ngày càng phát triển mạnh trong thời buổi công nghệ hóa những năm gần
đây và sau này.
1.2. Khái niệm về trí tuệ nhân tạo.

Trí tuệ nhân tạo (AI: Artificial Intelligence) là trí thông minh được thể hiện
bằng máy móc, trái ngược với trí thông minh tự nhiên được con người thể hiện.
Thông thường, thuật ngữ "trí tuệ nhân tạo" thường được sử dụng để mô tả các
máy móc (hoặc máy tính) bắt chước các chức năng "nhận thức" mà con người
liên kết với tâm trí con người, như "học tập" và "giải quyết vấn đề". Trí tuệ nhân
tạo có thể được coi là trí thông minh của máy tính được tạo ra bởi những lập
trình của con người với mục tiêu giúp máy tính có được hành vi thông minh tự
động hóa giống con người. Tuy nhiên, hiện nay, định nghĩa về TTNT chưa thực
sự thống nhất, còn tồn tại một số quan điểm khác nhau về trí tuệ nhân tạo như
sau:

 TTNT phân tích: dựa trên kết quả dữ liệu trong quá khứ để phân tích để
thông báo các quyết định trong tương lai.
 TTNT con người: có những yếu tố cảm xúc, nhận định, nhận thức như con
người.
 TTNT nhân cách hóa: có các đặc điểm của tất cả các loại trí tuệ nhận thức,
cảm xúc và xã hội, có khả năng tự ý thức và tự nhận thức được trong các tương
tác.

Nói ngắn gọn thì trí tuệ nhân tạo là khả năng của một hệ thống máy tính để
thực hiện các nhiệm vụ mà thông thường được coi là yêu cầu trí tuệ của con
người, chẳng hạn như học hỏi, suy luận và giải quyết vấn đề.

1.3. Các lĩnh vực trí tuệ nhân tạo nghiên cứu.

Hiện nay Trí tuệ nhân tạo đã được chia ra làm nhiều nhánh nghiên cứu nhỏ;
mỗi nhánh quan tâm đến một vài khả năng của con người như được trình bày ở
Bảng sau.
Khả năng Nhánh nghiên cứu Mục tiêu
Khả năng học Học máy, Học sâu Học máy nghiên cứu và phát
triển các kỹ thuật giúp cho máy
tính có thể học tri thức từ dữ liệu
đầu vào.
Khả năng biểu Các phương pháp biểu Nhánh cung cấp cơ sở để máy
diễn tri thức và diễn tri thức và suy diễn tính có thể thực hiện việc suy
suy diễn diễn như con người.
Khả năng nghe, Thị giác máy tính, Xử Các nhánh này nghiên cứu và
nhìn lý tiếng nói phát triển các kỹ thuật để giúp
máy tính có thể nghe và nhìn
như con người.
Khả năng sử Xử lý ngôn ngữ tự Nhánh nghiên cứu này giúp cho
dụng ngôn ngữ nhiên máy tính có thể hiểu được ngôn
ngữ mà con người đang sử
dụng.
Khả năng thể Robotics Nhánh này giúp robot thể hiện
hiện cử chỉ các hành động và cử chỉ như con
người.

Bảng 2: Các lĩnh vực nghiên cứu của Trí tuệ nhân tạo

Một số thành tựu nổi bật của các lĩnh vực như sau:

Hai bài toán cơ bản của Xử lý tiếng nói là Nhận dạng tiếng nói và Tổng
hợp tiếng nói; Nhận dạng Tiếng nói chuyển một tín hiệu âm dạng số sang dạng
văn bản gồm các tiếng có trong đoạn âm, còn Tổng hợp tiếng nói làm công việc
ngược lại. Hiện nay đã có những sản phẩm cung cấp hai khả năng này với độ
chính xác và tốc độ rất cao, thậm chí cho Tiếng Việt

TTNT cũng được nghiên cứu và ứng dụng trong các lĩnh vực như :

Giao thông: Nhờ các thiết bị cảm biến, thiết bị định tuyến có chi phí giảm
và độ chính xác tăng. Nhờ có dữ liệu và kết nối này, sẽ có sự nhận biết (sensing)
và dự báo giao thông thời gian thực, tính toán lộ trình, đi xe chung và ô tô tự
hành.

Y tế: Các ứng dụng dựa trên TTNT có thể cải thiện các kết quả sức khỏe và
chất lượng cuộc sống cho con người. Những ứng dụng chính bao gồm hỗ trợ
quyết định lâm sàng, theo dõi và điều trị bệnh nhân, các thiết bị tự động để hỗ
trợ trong phẫu thuật hoặc chăm sóc bệnh nhân, và quản lý các hệ thống chăm
sóc sức khỏe.

Giáo dục: TTNT cung cấp việc học ở quy mô cá nhân hóa. Các công nghệ
TTNT để hỗ trợ giáo viên trong lớp học và ở nhà có khả năng sẽ mở rộng đáng
kể, cũng như sẽ học dựa trên các ứng dụng thực tế ảo.

An ninh và an toàn công cộng: Một số thành phố đã bắt đầu triển khai công
nghệ TTNT cho an toàn và an ninh công cộng.

Giải trí: Đối với các cộng đồng game trực tuyến, người chơi tưởng tượng
sự tồn tại của mình như trong một thế giới ảo với đầy đủ các cảm xúc.

1.4. Ưu điểm, nhược điểm của trí tuệ nhân tạo.

Ưu điểm của trí tuệ nhân tạo:

 Giảm sai sót của con người: AI có thể giúp giảm sai sót của con người
trong các nhiệm vụ lặp đi lặp lại, đòi hỏi tính chính xác cao, chẳng hạn như
kiểm tra chất lượng, chẩn đoán bệnh và điều khiển hệ thống.
 Tăng hiệu quả: AI có thể giúp tăng hiệu quả của các quy trình và hệ thống,
bằng cách tự động hóa các tác vụ, tối ưu hóa các nguồn lực và đưa ra các quyết
định tốt hơn.
 Mở ra các khả năng mới: AI có thể giúp mở ra các khả năng mới, chẳng
hạn như phát triển các phương pháp điều trị bệnh mới, tạo ra các sản phẩm và
dịch vụ mới.
 Hoạt Động 24/7 : Các hệ thống AI có thể hoạt động liên tục mà không cần
nghỉ, giúp cải thiện tính khả dụng và linh hoạt trong nhiều ngữ cảnh.
Theo đó các ưu điểm nổi bật của trí tuệ nhân tạo thì vẫn có một số nhược
điểm đáng chú ý sau:

 Chi phí phát triển: Việc phát triển các hệ thống AI phức tạp có thể tốn kém
và đòi hỏi nhiều thời gian và tài nguyên.
 Sự phụ thuộc và mất kiểm soát: Các hệ thống AI có thể trở nên quá phức
tạp để con người hiểu rõ và kiểm soát hoàn toàn.
 Rủi ro đạo đức: AI có thể được sử dụng cho các mục đích xấu, chẳng hạn
như phát triển vũ khí tự động hay tạo ra các thông tin sai lệch.
 Tính sáng tạo: Các mô hình dựa trên các kỹ thuật trí tuệ nhân tạo có khả
năng gần như vô hạn khi nó phân tích, nhưng không có khả năng tưởng tượng và
sáng tạo. Trong lịch sử, trí tưởng tượng và sáng tạo chính là các yếu tố quan
trọng để xã hội loài người phát triển.
 Khả năng giao tiếp: Lắng nghe, đồng cảm và xây dựng mối quan hệ là điều
rất quan trọng để kết nối với thế giới xung quanh. Kỹ năng giao tiếp sẽ được
đánh giá cao và là nhân tốt quyết định tới sự thành công trong tương lai.

Nói chung thì trí tuệ nhân tạo là một công nghệ có tiềm năng mang lại
nhiều lợi ích cho xã hội. Tuy nhiên, cần nhận thức rõ những ưu điểm và nhược
điểm của AI để có thể phát triển và ứng dụng công nghệ này một cách an toàn
và hiệu quả.
CHƯƠNG II: PHÂN TÍCH BÀI TOÁN
2.1. Mục đích của bài toán
Đề 6: Trò chơi đoán số
Cậu bé nghĩ ra 1 số (Gọi là S) gồm bỗn chữ số (không nhất thiết khác nhau)
trong sáu chữ số từu 1 đến 6. Để tìm số đó máy lần lượt đưa ra các số dự đoán
(gọi là M), mỗi số gồm 4 chữ số không nhất thiết khác nhau. Với mỗi lần dự
đoán, máy nhận được 2 câu trả lời của cậ bé cho 2 câu hỏi sau.

+ Có bao nhiêu chữ số trong M là chữ số trong S nhưng vị trí xuất hiện của
mỗi chữ số đó là sai?

+ Có bao nhiêu chữ số trong M là chữ số trong S và đồng thời vị trí xuất hiện
của mỗi chữ số đều đúng?

Yêu cầu: Hãy hiện lên màn hình các số máy dự đoán và nói mỗi số đó nhận 2
câu trả lời từ bàn phím của cậu bé cho đến khi được số đúng như cậu bé nghĩ.
(Số lần dự đoán không quá 6 lần).

Ví dụ: Số cần tìm là 5436


1234
Đúng số - Đúng vị trí : 1
Đúng số - Sai vị trí : 1
2156
Đúng số - Đúng vị trí : 1
Đúng số - Sai vị trí : 1
1416
Đúng số - Đúng vị trí : 2
Đúng số - Sai vị trí : 0
5436
Đúng số - Đúng vị trí : 4
Đúng số - Sai vị trí : 0
Chọn đúng số
2.2. Đặt vấn đề
Khi giải quyết bài toán bằng phương pháp tìm kiếm, trước hết ta phải xác
định không gian tìm kiếm bao gồm tất cả các đối tượng trên đó thực hiện việc
tìm kiếm.

Một phương pháp biểu diễn văn để phù hợp là sử dụng các khái niệm trạng
thái (state) và toán tử (operator).

Phương pháp giải quyết vấn đề dựa trên khái niệm trạng thái và toán từ
được gọi là cách tiếp cận giải quyết vấn đề nhờ không gian trạng thái.

2.3. Mô tả trạng thái


Giải bài toán trong không gian trạng thái, trước hết phải xác định dạng mô
tả trạng thái bài toán sao cho bài toàn trở nên đơn giản hơn, phù hợp bản chất
vật lý của bài toán (Có thể sử dụng các xấu ký hiệu, véctơ, màng hai chiều, cây,
danh sách)

Mỗi trạng thái chính là mỗi hình trạng của bài toán, các tình trạng ban đầu
và tình trang cuối của bài toán gọi là trang thai đầu và trang thái cuối.

2.4. Toán tử chuyển trạng thái


Toán tử chuyển trạng thái thực chất là các phép biến đổi đưa từ trạng thái
này sang trạng thái khác. Có hai cách dùng để biểu diễn các toán tử Biểu diễn
như một hàm xác định trên tập các trạng thái và nhận giá trị cũng trong tập này
Biểu diễn dưới dạng các quy tắc sản xuất S? A có nghĩa là nếu có trạng thái S thì
có thể đưa đến trang thái A. Ví dụ. Bài toán đong nước Các thao tác sử dụng để
chuyển trạng thái này sang trạng thái khác gồm:

Đổ đầy một bình, đổ hết nước trong một bình ra ngoài, đồ nước từ bình này
sang bình khác. Như vậy, nếu trạng thái đang xét là (x,y) thì các trạng thái kế
tiếp có thể chuyển đến sẽ là:

(m,y)
(x,n)
(0,y)
(x,0)
(x,y) (0, x+ y) nếu x+y < = n
(x+y-n,n) nếu x+y > n
(x+y,0) nếu x+y < = m
(m, x+y-m) nếu x+y > m
2.5. Không gian trạng thái của bài toán
Không gian trạng thái là tập tất cả các trạng thái có thể có và tập các toán tử
của bài toán.

Không gian trạng thái là một bộ bốn, Ký hiệu: K=(T,S,G,F). Trong đó:

T: tập tất cả các trạng thái có thể có của bài toán

S: trạng thái đầu

G: tập các trạng thái đích

F: tập các toán tử

Ví dụ 1. Không gian trang thái của bài toán đong nước là bộ

bốn T, S, G, F xác định như sau:

T={(x,y)/0<=x<m;0<=y<=n\}

S=(0,0)

G={(x,k) hoặc (k,y) / 0 <= x <= m; 0<=y<=n\}

F=Tap các thao tác dong đầy, đồ ra hoặc đổ sang bình khác thực hiện trên
một bình.

2.6. Biểu diễn không gian trạng thái dưới dạng đồ thị
Các khái niệm

Đồ thị G = (V,E) trong đó V:tập đỉnh, E: tập cung (E CV*V)

Chú ý
G là đồ thị vô hướng thì (i, j) là một cạnh cũng như là (j, i) (tức là: (i, j)ICE
thì (j,i)l E)

Nếu G là đồ thị có hướng thì cung (i, j) hoàn toàn khác với cung (j, i).
CHƯƠNG III: THUẬT TOÁN VÀ BIỂU DIỄN TRẠNG
THÁI CỦA BÀI TOÁN
3.1. Thuật toán Heuristic, nguyên lý vét cạn:
Heuristic ("tìm kiếm" hay "khám phá") là các kỹ thuật dựa trên kinh
nghiệm để giải quyết vấn đề, học hỏi hay khám phá nhằm đưa ra một giải pháp
mà không được đảm bảo là tối ưu. Với việc nghiên cứu khảo sát không có tính
thực tế, các phương pháp heuristic được dùng nhằm tăng nhanh quá trình tìm
kiếm với các giải pháp hợp lý thông qua các suy nghĩ rút gọn để giảm bớt việc
nhận thức vấn đề khi đưa ra quyết định. Ví dụ của phương pháp này bao gồm sử
dụng một luật ngón tay cái, giả thuyết, phán đoán trực giác, khuôn mẫu hay
nhận thức thông thường. Thuật giải Heuristic là một sự mở rộng khái niệm thuật
toán. Nó thể hiện cách giải bài toán với các đặc tính sau: Thường tìm được lời
giải tốt (nhưng không chắc là lời giải tốt nhất) Giải bài toán theo thuật giải
Heuristic thường dễ dàng và nhanh chóng đưa ra kết quả hơn so với giải thuật
tối ưu, vì vậy chi phí thấp hơn. Thuật giải Heuristic thường thể hiện khá tự
nhiên, gần gũi với cách suy nghĩ và hành động của con người.

Có nhiều phương pháp để xây dựng một thuật giải Heuristic, trong đó
người ta thường dựa vào một số nguyên lý cơ bản như sau:

+ Nguyên lý vét cạn thông minh:

Trong một bài toán tìm kiếm nào đó, khi không gian tìm kiếm lớn, ta
thường tìm cách giới hạn lại không gian tìm kiếm hoặc thực hiện một kiểu dò
tìm đặc biệt dựa vào đặc thù của bài toán để nhanh chóng tìm ra mục tiêu.

+ Nguyên lý tham lam (Greedy):

Lấy tiêu chuẩn tối ưu (trên phạm vi toàn cục) của bài toán để làm tiêu
chuẩn chọn lựa hành động cho phạm vi cục bộ của từng bước (hay từng giai
đoạn) trong quá trình tìm kiếm lời giải.

+ Nguyên lý thứ tự:


Thực hiện hành động dựa trên một cấu trúc thứ tự hợp lý của không gian
khảo sát nhằm nhanh chóng đạt được một lời giải tốt.

+ Hàm Heuristic:

Trong việc xây dựng các thuật giải Heuristic, người ta thường dùng các
hàm Heuristic. Đó là các hàm đánh già thô, giá trị của hàm phụ thuộc vào trạng
thái hiện tại của bài toán tại mỗi bước giải. Nhờ giá trị này, ta có thể chọn được
cách hành động tương đối hợp lý trong từng bước của thuật giải.

3.2. Thuật toán Trò chơi đoán số:


- Bài toán được xây dựng dựa trên thuật toán Heurictic và ứng dụng nguyên
lý vét cạn thông minh. Thuật toán Heurictic giúp giới hạn không gian tìm kiếm
hoặc thực hiện một kiểu dò tìm đặc biệt dựa vào đặc thù của bài toán từ đó tìm
ra một giải thuật tối ưu và đưa ra đáp án một cách dễ dàng, nhanh chóng.

- Các bước hoạt động của bài toán như sau:

+ Cậu bé nghĩ ra 1 số (gọi là S) gồm bỗn chữ số (không nhất thiết khác
nhau) trong sáu chữ số từ 1 đến 6.

+ Máy tính sẽ lần lượt đưa ra các số dự đoán ngẫu nhiên (gọi là M), mỗi số
gồm 4 chữ số tạo thành từ các chữ số từ 1 đến 6 và không nhất thiết phải khác
nhau.

+ Với mỗi lần dự đoán, máy sẽ nhận được từ cậu bé 2 câu trả lời: Có bao
nhiêu chữ số trong M là chữ số trong S nhưng vị trí xuất hiện của mỗi chữ số đó
là sai hoặc đúng.

+ Sau mỗi câu trả lời của cậu bé, máy sẽ lưu lại các giá trị của M là chữ số
của S và có vị trí xuất hiện của chữ số đúng. Loại bỏ các giá trị mà xuất hiện
trong M nhưng không xuất hiện trong S và các số xuất hiện trong M là chữ số
của S có vị trí xuất hiện đúng mà máy tính đã lưu và không còn xuất hiện lần
nào nữa. Từ đó sẽ giúp máy tính đưa ra được số dự đoán tiếp theo tối giản hơn.
3.3. Trạng thái bài toán
Mỗi trạng thái chính là mỗi hình trạng của bài toán, các tình trạng ban
đầu và tình trạng cuối của bài toán gọi là trạng thái đầu và trạng thái
cuối.
Ví dụ 1: (Trò chơi đoán số - Bulls and Cows)

- Gọi x là số chữ số trong M là chữ số trong 5 và đồng thời vị trí xuất hiện
của mỗi chữ số đều đúng.

- Gọi y là số số trong M là chữ số trong S nhưng vị trí xuất hiện của


mỗi chữ số đó là sai.
Như vậy bộ có thứ tự (x | y) có thể xem là trạng thái của bài toán. Với
cách mô tả như vậy, các trạng thái đặc biệt của bài toán sẽ là:
* Xét trường hợp: Các số không trùng nhau
+ T là tập các đỉnh như hình dưới
+ S Trạng thái ban đầu là (x | y) với x + y ≥ 2 và (x | y) = (31)

+ G Trạng thái cuối là (4 | 0)

+ F: Random

abcd 1 2 3 4 5 6 ≠ (0,0) (1,0) (0,1) (3,1)

mnpq 1364
CHƯƠNG IV: CHƯƠNG TRÌNH GIẢI QUYẾT BÀI TOÁN

4.1. Viết chương trình:


#include <stdio.h>
#include <conio.h>
#include <stdlib.h>
#include <time.h>

int rand(int minN, int maxN, int b, int c, int d, int e, int f, int g, int h, int k, int
l,int m){
int x,y;
int a[4];
for(int j = 1; j < 2; ++j)
{
x = minN + rand() % (maxN + 1 - minN);
y = x;
for(int i=4;i>0;i--)
{
a[i] = y % 10;
y = y/10;
}
for(int i=1;i<5;i++)
{
if((a[i]!=b) or (b==0))
if((a[i]!=c) or (c==0))
if((a[i]!=d) or (d==0))
if((a[i]!=e) or (e==0))
if((a[i]!=f) or (f==0))
if((a[i]!=g) or (g==0))
{
j = 0;
i = 6;
}
}
}
if(h!=0)
y=y*10+h;
else
y=y*10+a[1];
if(k!=0)
y=y*10+k;
else
y=y*10+a[2];
if(l!=0)
y=y*10+l;
else
y=y*10+a[3];
if(m!=0)
y=y*10+m;
else
y=y*10+a[4];
return y;
}

int main()
{
int choitiep=1;
while(choitiep!=0)
{
int S, M, x, y, z, o, d, dd, ds;
int a[4], b[4], c[6];
int M1=0, M2=0, M3=0, M4=0;
int N = 0;
int da = 0;
printf("Nhap so nguyen duong S="); scanf("%d",&S);
x = S;
y = S;
for(int i=1;i<7;i++)
{
c[i]=i;
}
for (int i=4; i>0; i--)
{
a[i] = x%10;
x = x/10;
}
for(d=1;d<7;d++)
{
while(M==N)
{
srand((int)time(0));
M=rand(1111,6666,c[1],c[2],c[3],c[4],c[5],c[6],M1,M2,M3,M4);
}
N = M;
z = M;
printf("so doan la: %d\n", M);
if(M!=S)
{
printf("Dung so - Dung vi tri: ");
scanf("%d",&dd);
printf("\n");
printf("Dung so - Sai vi tri: ");
scanf("%d",&ds);
for (int i=4; i>0; i--)
{
b[i] = z%10;
z = z/10;
}
for (int i=1;i<5;i++)
{
for (int j=1;j<5;j++)
{
if(b[i]==a[j])
{
if(i==j)
{
if(i==1) M1=b[i];
else
if(i==2) M2=b[i];
else
if(i==3) M3=b[i];
else M4=b[i];
for(o=1;o<5;o++)
{
if((b[i]==a[o]) and (o!=i))
{
o = 6;
}
}
if(o==5)
{
for(da=1;da<7;da++)
{
if(b[i]==c[da])
{
c[da]=0;
}
}
}
da = 1;
dd = dd - 1;
}
else
{
ds = ds - 1;
da = 1;
}
}
}
if(da==0)
{
for(da=1;da<7;da++)
{
if(b[i]==c[da])
{
c[da]=0;
}
}
}
da = 0;
}
dd = 0;
ds = 0;
}
else
{
printf("Dung so - Dung vi tri: 4\n");
printf("Dung so - Sai vi tri: 0\n");
printf("Chon so dung \n");
printf("chon dung o lan so: %d\n", d);
d = 11;
}
}
printf(" Cam on ban da tham gia tro choi\n");
printf(" Ban co muon tham gia tiep khong (1/0)\n");
printf("Moi nhap so khac voi so 0 de choi tiep : ");
scanf("%d",&choitiep);
}
}
4.2. Kết quả chạy được
Ví dụ chạy thử 1: Số cần tìm là 6534.

* Lần thứ 1:
Máy sẽ đưa ra số dự đoán gồm 4 chữ số từ các số 1, 2, 3, 4, 5, 6:
Số dự đoán là: 5654

+ Đúng số - Đúng vị trí: 1


+ Đúng số - Sai vị trí: 2

=> Máy sẽ lưu lại chữ số xuất hiện trong M là chữ số trong S và xuất hiện có vị
trí xuất hiện đúng là 4, ở vị trí 4, trong S không còn xuất hiện số 4 nên loại số 4
ra khỏi danh sách để dự đoán.
* Lần thứ 2:
Máy sẽ đưa ra số dự đoán gồm 4 chữ số từ các số 1, 2, 3, 5, 6 và có vị trí thứ 4 là
số 4:
Số dự đoán là: 2514

+ Đúng số - Đúng vị trí: 2


+ Đúng số - Sai vị trí: 0

=> Máy lưu lại chữ số có trong M là chữ số của S và xuất hiện đúng vị trí là 5 ở
vị trí 2, trong S không còn xuất hiện 5, thì loại 5 ra khỏi danh sách dự đoán. Loại
bỏ chữ số xuất hiện trong M nhưng không xuất hiện trong S là số 2,1.
* Lần thứ 3:
Máy sẽ đưa ra số dự đoán gồm 4 chữ số từ các số 3, 6 và có vị trí thứ 2 là số 5
và vị trí thứ 4 là số 4:
Số dự đoán: 3534

+ Đúng số - Đúng vị trí: 3


+ Đúng số - Sai vị trí: 0

=>Máy lưu lại chữ số có trong M là chữ số của S và xuất hiện đúng vị trí là 3 ở
vị trí 3, trong S không còn xuất hiện 3, thì loại 3 ra khỏi danh sách dự đoán.
* Lần thứ 4:
Máy sẽ vẫn đưa ra dự đoán gồm 4 chữ số gồm số 6 và có vị trí thứ 2 , 3 và 4 lần
lượt là 5, 3, 4.
Số dự đoán: 6534

+ Đúng số - Đúng vị trí: 4


+ Đúng số - Sai vị trí: 0
=> Chọn đúng số ở lần thứ 4
Ví dụ chạy thử 2: Số cần tìm là 3265
* Lần thứ 1:
Máy sẽ đưa ra số dự đoán gồm 4 chữ số từ các số 1, 2, 3, 4, 5, 6:
Số dự đoán là: 4636

+ Đúng số - Đúng vị trí: 0


+ Đúng số - Sai vị trí: 2

=> Loại bỏ chữ số xuất hiện trong M nhưng không xuất hiện trong S là 4.
* Lần thứ 2:
Máy sẽ đưa ra số dự đoán gồm 4 chữ số từ các số 1,2, 3, 5,6 :
Số dự đoán là: 1556

+ Đúng số - Đúng vị trí: 0


+ Đúng số - Sai vị trí: 2

=> Loại bỏ chữ số xuất hiện trong M nhưng không xuất hiện trong S là 1.
* Lần thứ 3:
Máy sẽ vẫn đưa ra dự đoán gồm 4 chữ số từ các số 2,3,5,6
Số dự đoán: 2355

+ Đúng số - Đúng vị trí: 1


+ Đúng số - Sai vị trí: 2
=> Máy lưu lại chữ số có trong M là chữ số của S và xuất hiện đúng vị trí là chữ
số 5, ở vị trí thứ 4. Trong S không còn xuất hiện chữ số 5, thì loại 5 ra khỏi danh
sách dự đoán.
* Lần thứ 4:
Máy sẽ vẫn đưa ra dự đoán gồm 4 chữ số từ các số 2,3,6 với vị trí thứ 4 là số 5 :
Số dự đoán: 3265

+ Đúng số - Đúng vị trí: 4


+ Đúng số - Sai vị trí: 0

=> Chọn đúng số ở lần thứ 4


KẾT LUẬN
Sau thời gian nghiên cứu, tìm hiểu và thực hiện đề tài: “Trò chơi đoán số”
nhóm chúng em đã hiểu hơn về cách ……. Chúng em hiểu được các bước
để……. Bên cạnh đó, chúng em cũng biết được cách …..

Mặc dù đã rất cố gắng tìm hiểu về các kiến thức đã học, tham khảo tài liệu
để hoàn thành nhưng do thời gian, kinh nghiệm còn hạn chế nên chắc chắn
không tránh khỏi những thiếu sót. Vì vậy chúng em rất mong nhận được sự góp
ý của thầy cô để bài báo cáo của chúng em được hoàn thiện hơn, đồng thời
chúng em được bổ sung vốn kinh nghiệm trên chặng đường phía trước.

Cuối cùng chúng em xin chân thành cảm ơn cô giáo Bùi Thị Như đã tận tình
giảng dạy, trang bị, cung cấp cho chúng em những kiến thức nền tảng, chuyên
môn cần thiết cho chúng em.

Chúng em xin chân thành cảm ơn!

You might also like