Tính đơn giản của giải thuật khiến nó trở thành lựa chọn đầu tiên trong số các toán, một bài toán quen thuộc với những người lập trình, chúng em sẽ đưa ra cơ chế của thuật toán, ưu nhược
Trang 1TRƯỜNG ĐẠI HỌC TÀI NGUYÊN VÀ MÔI TRƯỜNG HÀ NỘI
KHOA CÔNG NGHỆ THÔNG TIN -
KỲ THI KẾT THÚC HỌC PHẦN HỌC KÌ ……… NĂM HỌC 2020-2021
Tên đề tài: Xây dựng phần mềm ứng dụng giải bài toán leo đồi và tìm
kiếm tốt nhất đầu tiên
Giảng viên hướng dẫn : Nguyễn Đức Toàn Sinh viên thực hiện :
Hà Nội - 2021
Trang 2i
MỤC LỤC
LỜI MỞ ĐẦU 1
1 Lý do chọn đề tài 1
2 Đối tượng và phạm vi nghiên cứu của đề tài 1
3 Nội dung 1
CHƯƠNG 1.TỔNG QUAN VỀ TRÍ TUỆ NHÂN TẠO 3
1.1 Khái niệm về AI 3
1.2 Ứng dụng của AI 4
1.3 Machine Learning 4
CHƯƠNG 2 MÔ TẢ THUẬT TOÁN 7
2.1 Thuật toán Best First Search 7
2.1.1 Kỹ thuật tìm kiếm tốt nhất đầu tiên 7
2.1.2 Hàm đánh giá 7
2.1.3 Ưu và nhược điểm của phương pháp tìm kiếm tốt nhất đầu tiên 7
2.2 Thuật toán tìm kiếm Hill Climbing 8
2.2.1 Giới thiệu giải thuật Hill Climbing 8
2.2.2 Nguồn gốc giải thuật Hill climbing 9
2.2.3 Mô tả thuật toán – Mã giả 9
2.2.4 Kỹ thuật tìm kiếm leo đồi 11
2.2.5 Các vấn đề và hạn chế của thuật toán 12
2.2.6 Nhận xét giải thuật 13
CHƯƠNG 3.DEMO SẢN PHẨM 14
Tài Liệu Tham Khảo 15
Trang 3LỜI MỞ ĐẦU
1 Lý do chọn đề tài
Trong khoa học máy tính, giải thuật Hill Climbing là một kỹ thuật tối ưu toán học thuộc họ tìm kiếm cục bộ Nó thực hiện tìm một trạng thái tốt hơn trạng thái hiện tại để mở rộng Để biết trạng thái tiếp theo nào là lớn hơn, nó dùng một hàm H
để xác định trạng thái nào là tốt nhất
Hill Climbing dễ dàng tìm thấy một giải pháp tốt cục bộ (local optimum) nhưng khó tìm thấy giải pháp tốt nhất (global optinum) trong tất cả các giải pháp được đưa
ra (search space) Hill Climbing phù hợp để giải các bài toán “convex” (dịch tạm: lồi) như là tìm kiếm đơn giản (simplex programming) trong lập trình tuyến tính, tìm kiếm nhị phân
Tính đơn giản của giải thuật khiến nó trở thành lựa chọn đầu tiên trong số các
toán, một bài toán quen thuộc với những người lập trình, chúng em sẽ đưa ra cơ chế của thuật toán, ưu nhược điểm cũng như độ phức tạp của những thuật
2 Đối tƣợng và phạm vi nghiên cứu của đề tài
2.1 Đối tượng nghiên cứu: Đề tài tập trung nghiên cứu phương pháp giải bài toán
tìm kiếm leo đồi
2.2 Phạm vi nghiên cứu: là sinh viên khoa Công Nghệ Thông Tin đang học tập tạị
trường Đại Học Tài Nguyên Và Môi Trường Hà Nội
3 Nội dung:
- Tìm hiểu khái quát về sự phát triển của Trí Tuệ Nhân Tạo
- Tìm hiểu thuật leo đồi để ứng dụng vào xây dựng phần mềm
- Phân tích thiết kế hệ thống Xây dựng hệ cơ sở dữ liệu cho đề tài
Trang 4CHƯƠNG 1: TỔNG QUAN VỀ TRÍ TUỆ NHÂN TẠO
Trong những năm gần đây, các cụm từ như “AI” hay “Trí tuệ nhân tạo”… dường như đã quá phổ biến trong cuộc sống hiện nay Vậy AI là gì? AI có ý nghĩa như thế nào? Tầm ảnh hưởng như thế nào đến cuộc sống hiện tại?
1.1 Khái niệm về AI
AI - Artificial Intelligence hay còn gọi là Trí tuệ nhân tạo là một ngành khoa học, kỹ
thuật chế tạo máy móc thông minh, đặc biệt là các chương trình máy tính thông minh
AI được thực hiện bằng cách nghiên cứu cách suy nghĩ của con người, cách con người học hỏi, quyết định và làm việc trong khi giải quyết một vấn đề nào đó Sử dụng những kết quả nghiên cứu này như một nền tảng để phát triển các phần mềm và hệ thống thông minh, từ đó áp dụng vào các mục đích khác nhau trong cuộc sống Nói một cách dễ hiểu thì AI là việc sử dụng, phân tích các dữ liệu đầu vào nhằm đưa ra sự dự đoán rồi đi đến quyết định cuối cùng
Tóm lại: Trí tuệ nhân tạo là trí tuệ máy móc được tạo ra bởi con người Trí tuệ này có thể tư duy, suy nghĩ, học hỏi,… như con người Xử lý dữ liệu ở mức độ rộng hơn, quy mô hơn, hệ thống khoa học và nhanh hơn so với con người
AI có ba mức độ khác nhau:
Narrow AI: Trí tuệ nhân tạo được cho là hẹp khi máy có thể thực hiện một nhiệm vụ
cụ thể tốt hơn so với con người Nghiên cứu hiện tại về AI hiện đang ở cấp độ này
General AI: Trí tuệ nhân tạo đạt đến trạng thái chung khi nó có thể thực hiện bất kỳ
nhiệm vụ sử dụng trí tuệ nào có cùng độ chính xác như con người
Strong AI: AI rất mạnh khi nó có thể đánh bại con người trong nhiều nhiệm vụ cụ thể
1.2 Ứng dụng của AI
1.2.1 Ý nghĩa của AI:
– Tạo ra các hệ thống chuyên gia - là các ứng dụng máy tính được phát triển để giải quyết các vấn đề phức tạp trong một lĩnh vực cụ thể, ở mức độ thông minh và chuyên môn
của con người
– Thực hiện trí thông minh của con người trong máy móc - Tạo ra các hệ thống có thể
hiểu, suy nghĩ, học hỏi và hành xử như con người
1.2.2 Ứng dụng AI trong các lĩnh vực của cuộc sống
AI là một ngành khoa học và công nghệ dựa trên nhiều ngành khác như Khoa học máy tính, Toán học, Sinh học, Kỹ thuật…
Hình 1.1 Một số lĩnh vực của AI
Trang 5Ví dụ ứng dụng trong lĩnh vực y tế:
– Quản trị: Các hệ thống AI trợ giúp các công việc hành chính hàng ngày, để giảm thiểu lỗi của con người và tối đa hóa hiệu quả
– Điều trị từ xa: Đối với các tình huống không khẩn cấp, bệnh nhân có thể liên hệ với
hệ thống AI của bệnh viện để phân tích các triệu chứng, nhập các dấu hiệu quan trọng của
họ và đánh giá xem có cần phải chăm sóc y tế hay không Điều này làm giảm khối lượng công việc của các chuyên gia y tế bằng cách chỉ đưa các trường hợp quan trọng đến họ – Hỗ trợ chuẩn đoán: Thông qua thị giác máy tính và mạng lưới thần kinh tích chập, AI hiện có khả năng đọc quét hình ảnh cộng hưởng từ để kiểm tra khối u và sự phát triển ác tính khác của nó, với tốc độ nhanh hơn so với các bác sĩ x-quang và sai số thấp hơn
– Phẫu thuật có sự trợ giúp của robot: Robot phẫu thuật có sai số rất nhỏ và có thể thực hiện phẫu thuật suốt ngày đêm mà không bị kiệt sức
– Giám sát các chỉ số quan trọng
Ngoài ra còn rất nhiều những ứng dụng trong các lĩnh vực khác trong đời sống như nhận diện khuôn mặt, nhận diện giọng nói, ô tô tự lái…
1.3 Machine Learning
Hình 1.2 Machine Learning
1.3.1 Khái niệm Machine Learning
Machine Learning còn được gọi là học máy, có thể viết ứng dụng có AI mà không sử dụng học máy, nhưng phải viết cả triệu triệu dòng code để xây dựng các trường hợp xảy ra Học máy là cách để có được AI, máy tự học mà không cần phải code nhiều như không có học máy Nói cách khác, nếu AI là mục tiêu thì học máy là phương tiện để đạt được mục tiêu đó
Máy sẽ được “học” bằng cách train nó với một lượng dữ liệu khổng lồ và một thuật toán, thuật toán có khả năng điều chỉnh và xây dựng model Tuy nhiên, nếu như trong training dữ liệu có ngôn ngữ khác trong thực tế (tiếng Việt thay vì tiếng Anh…) thì rất có thể máy sẽ dự báo không chính xác nữa
Về cơ bản, AI hay trí thông minh nhân tạo là công nghệ mô phỏng các quá trình suy nghĩ và học tập của con người cho máy móc, đặc biệt là các hệ thống máy tính Còn Machine Learning là một tập con của AI, là một lĩnh vực nhỏ của khoa học máy tính, nó có khả năng tự học hỏi dựa trên dữ liệu đưa vào mà không cần phải được lập trình cụ thể
1.3.2 Phân nhóm thuật toán Machine Learning
Có hai cách phổ biến phân nhóm các thuật toán Machine Learning: dựa trên phương
Trang 6thức học (learning style) và dựa trên chức năng (function)
Theo phương thức học, các thuật toán Machine Learning thường được chia làm 4 nhóm:
Supervised learning (Học có giám sát)
Là thuật toán dự đoán đầu ra (outcome) của một dữ liệu mới (new input) dựa trên các cặp ( input, outcome ) đã biết từ trước, còn được gọi là cặp (data, label) - (dữ liệu - nhãn), cũng chính là tập training data (dữ liệu huấn luyện), từ đó tạo ra một hàm số ánh xạ xấp xỉ thật tốt để tính được đầu ra Supervised learning được chia nhỏ thành 2 loại chính: Classification (Phân loại) ( các label của input data được chia thành một số hữu hạn nhóm)
và Regression (Hồi quy) ( label không được chia thành các nhóm mà là một giá trị thực cụ thể)
Unsupervised learning (Học không giám sát)
Trong thuật toán này, chúng ta không biết được outcome hay nhãn mà chỉ có dữ liệu đầu vào, dựa vào cấu trúc của dữ liệu để phân nhóm (clustering) phân nhóm toàn bộ dữ liệu thành các nhóm nhỏ dựa trên sự liên quan giữa các dữ liệu trong mỗi nhóm, giảm số chiều của dữ liệu (dimension reduction) để thuận tiện trong việc lưu trữ và tính toán hoặc khám phá ra một quy luật dựa trên nhiều dữ liệu cho trước
Semi-supervised lerning (Học bán giám sát)
Là thuật toán mà chỉ một phần trong dữ liệu được gán nhãn và nó nằm giữa hai nhóm được nêu bên trên Rất nhiều các bài toán Machine Learning thuộc vào nhóm này vì việc thu thập dữ liệu có nhãn tốn rất nhiều thời gian và có chi phí cao
Reinforcement learning (Học củng cố)
Là các bài toán giúp cho một hệ thống tự động xác định hành vi dựa trên hoàn cảnh để đạt được lợi ích cao nhất Nó chủ yếu được áp dụng vàoGame Theory, các thuật toán cần xác định nước đi tiếp theo để đạt được điểm số cao nhất
1.3.3 Phân loại Marchine Learning
Theo chức năng, Machine Learning được chia thành các loại:
Regression Algorithms (Thuật toán hồi quy)
Classification Algorithms (Thuật toán phân loại)
Instance-based Algorithms (Thuật toán dựa trên sơ đồ)
Regularization Algorithms (Thuật toán chính quy)
Bayesian Algorithms (Thuật toán Bayes)
Clustering Algorithms (Thuật toán phân cụm)
Artificial Neural Network Algorithms (Thuật toán mạng nơ ron nhân tạo)
Dimensionality Reduction Algorithms (Thuật toán giảm kích thước)
Ensemble Algorithms (Thuật toán tập hợp)
Thuật toán Linear Regression (Hồi quy tuyến tính)
Một trong những thuật toán cơ bản nhất của Machine Learning có tên là Linear Regression (Hồi quy tuyến tính), là 1 thuật toán Supervised Learning
Ví dụ: Ta xét các số đo của một căn nhà: rộng mét vuông, có phòng ngủ và cách trung tâm thành phố km, xét nó có giá là bao nhiêu? (Giả sử chúng ta đã có số liệu thống
kê từ 1000 căn nhà trong thành phố đó) khi đó hàm dự đoán sẽ có dạng như thế
Trang 7nào?
Ta có thể thấy rằng:
Diện tích nhà càng lớn thì giá nhà càng cao
Số lượng phòng ngủ càng lớn thì giá nhà càng cao
Càng xa trung tâm thì giá nhà càng giảm
Do đó hàm số cơ bản nhất mô tả mối quan hệ giữa giá nhà và 3 đại lượng đầu vào là:
Với là giá trị thực, là giá trị dự đoán, là hằng số, là bias (kiểu hệ số tự do) Bài toán chúng ta trở thành đi tìm các hệ số tối ưu
Với là sự sai khác giữa giá trị thực và giá trị dự đoán , để thuận tiện cho việc tính toán, ta xét:
̂ ̅ Với
̅ ̂
Và
̅
là vector (hàng) dữ liệu đầu vào mở rộng Số 1 ở đầu được thêm vào để phép tính đơn giản hơn và thuận tiện cho việc tính toán.Điều chúng ta muốn, tổng sai số là nhỏ nhất, tương đương với việc tìm w để hàm số sau đạt giá trị nhỏ nhất:
∑ ̅
Sau các biến đổi đại số, ta tìm được w thỏa mãn yêu cầu là:
̅ ̅ ̅
Từ đó có thể xây dựng code dự đoán được giá tiền nhà dựa trên các đặc điểm đã cho
Ví dụ hồi quy truyển tính để dự đoán
Ta xét bảng dữ liệu đầu vào sau:
Bảng 1.1 Dữ liệu đầu vào
(cm)
(kg)
(cm)
(kg)
Bài toán đặt ra là: Liệu có thể dự đoán cân nặng của một người dựa vào chiều cao của họ không?
Trang 8Trên thực tế là không, bởi ngoài chiều cao thì rất nhiều yếu tố khác ảnh hưởng đến cân nặng, tuy nhiên để thuận tiện trong việc xét 1 ví dụ đơn giản, ta giả sử cân nặng sẽ tỉ lệ thuận với chiều cao (người càng cao thì càng nặng)
Do đó ta có thể sử dụng Linear Regression cho việc dự đoán này Để kiểm tra độ chính xác của cân nặng tìm được, chúng ta sẽ giữ lại cột 155 cm và 160 cm để kiểm thử, các cột còn lại được sử dụng để huấn luyện (train) model
Trước tiên, chúng ta cần có hai thư viện numpy cho đại số tuyến tính và matplotlib cho việc vẽ hình
Tiếp theo, chúng ta khai báo và biểu diễn dữ liệu trên một đồ thị
Hình 1.3 Đồ thị biểu diễn dữ liệu
Từ đồ thị này ta thấy rằng dữ liệu được sắp xếp gần như theo 1 đường thẳng, vậy mô hình Linear Regression nhiều khả năng sẽ cho kết quả tốt:
Tiếp theo, chúng ta sẽ tính toán các hệ số và dựa vào công thức
̅ ̅ ̅
Tìm ra được và là:
Ta vẽ đường 1 đường thẳng dự đoán dựa trên và ở trên:
Trang 9Hình 1.4 Mô hình Linear Regression
Từ đồ thị bên trên ta thấy rằng các điểm dữ liệu màu đỏ nằm khá gần đường thẳng dự
đoán màu xanh Vậy mô hình Linear Regression hoạt động tốt với tập dữ liệu training Bây
giờ, chúng ta sử dụng mô hình này để dự đoán cân nặng của hai người có chiều cao 155 và
160 cm mà chúng ta đã không dùng khi tính toán nghiệm
Kết quả là:
Chúng ta thấy rằng kết quả dự đoán khá gần với số liệu thực tế
Tuy nhiên thuật toán Linear Regression là thuật toán cơ bản nhất của Machine Learning, nên nó cũng có những mặt hạn chế nhất định như là nó rất nhạy cảm với nhiễu (sensitive to noise)
Trong ví dụ về mối quan hệ giữa chiều cao và cân nặng bên trên, nếu có chỉ một cặp dữ liệu nhiễu (150 cm, 90kg) thì kết quả sẽ sai khác đi rất nhiều:
Hình 1.5 Loại bỏ nhiễu
Vì vậy, trước khi thực hiện Linear Regression, các nhiễu cần phải được loại bỏ
Trang 10CHƯƠNG 2 MÔ TẢ THUẬT TOÁN 2.1 Thuật toán Best First Search
Tìm kiếm tốt nhất - đầu tiên (best-first search) là tìm kiếm theo bề rộng được hướng dẫn bởi hàm đánh giá Nhưng nó khác với tìm kiếm theo bề rộng ở chỗ, trong tìm kiếm theo bề rộng ta lần lượt phát triển tất cả các đỉnh ở mức hiện tại để sinh ra các đỉnh ở mức tiếp theo, còn trong tìm kiếm tốt nhất - đầu tiên ta chọn đỉnh để phát triển là đỉnh tốt nhất được xác định bởi hàm đánh giá (tức là đỉnh có giá trị hàm đánh giá là nhỏ nhất), đỉnh này có thể
ở mức hiện tại hoặc ở các mức trên
Hình 2.1 Không gian trạng thái được biểu diễn bởi đồ thị
Ví dụ: Xét không gian trạng thái được biểu diễn bởi đồ thị như hình 2.7
Trong đó trạng thái ban đầu là A, trạng thái kết thúc là B Giá trị của hàm đánh giá là các
số ghi cạnh mỗi đỉnh Quá trình tìm kiếm tốt nhất - đầu tiên diễn ra như sau:
Đầu tiên phát triển đỉnh A sinh ra các đỉnh kề là C, D và E Trong ba đỉnh này, đỉnh D có giá trị hàm đánh giá nhỏ nhất, nó được chọn để phát triển và sinh ra F, I Trong số các đỉnh chưa được phát triển C, E, F, I thì đỉnh E có giá trị đánh giá nhỏ nhất, nó được chọn để phát triển và sinh ra các đỉnh G, K Trong số các đỉnh chưa được phát triển thì G tốt nhất, phát triển G sinh ra B, H Đến đây ta đã đạt tới trạng thái kết thúc Cây tìm kiếm tốt nhất - đầu
tiên được biểu diễn trong hình 2.8
Hình 2.2 Cây tìm kiếm tốt nhất - đầu tiên
Sau đây là thủ tục tìm kiếm tốt nhất - đầu tiên Trong thủ tục này, chúng ta sử dụng danh sách L để lưu các trạng thái chờ phát triển, danh sách được sắp theo thứ tự tăng dần của hàm
Trang 11đánh giá sao cho trạng thái có giá trị hàm đánh giá nhỏ nhất ở đầu danh sách
Dữ liệu tương tự như giải thuật tìm kiếm rông và sâu, sử dụng danh sách MO để lưu các đỉnh sẽ xét
Procedure BFS; {Best First Search}
Begin
Push(MO,n0);
while MO <> null do
begin
i := Pop(MO);
if i Goals then
exit;
for j T(i) do
Push(MO,j);
Sort(MO); {theo thứ tự của hàm đánh giá}
end;
write(„Khong co loi giai‟);
end;
Ƣu điểm
- Phương pháp tìm kiếm tốt nhất đầu tiên tổ hợp các ưu điểm của phương pháp tìm kiếm rộng và tìm kiếm sâu
- Ưu điểm chủ yếu của phương pháp tìm kiếm tốt nhất đầu tiên là dùng tri thức để dẫn dắt việc tìm kiếm Tri thức này giúp người ta bắt đầu từ đâu là tốt nhất và cách tốt nhất để tiến hành tìm lời giải
- Tìm kiếm tốt nhất đầu tiên tuân theo cách suy lý của một chuyên gia Do đó có thể thấy rõ đường đi hơn tìm kiếm rộng và tìm kiếm sâu
Nhƣợc điểm
- Quá trình tìm kiếm có thể đi xa khỏi lời giải Kỹ thuật này chỉ xét một phần của không gian và coi đó là phần hứa hẹn hơn cả