![Phân tích tư tưởng của nhân dân qua đoạn thơ: Những người vợ nhớ chồng… Những cuộc đời đã hóa sông núi ta trong Đất nước của Nguyễn Khoa Điềm](https://timtailieu.net/upload/document/136415/phan-tich-tu-tuong-cua-nhan-dan-qua-doan-tho-039-039-nhung-nguoi-vo-nho-chong-nhung-cuoc-doi-da-hoa-song-nui-ta-039-039-trong-dat-nuoc-cua-nguyen-khoa-136415.jpg)
Bài giảng Lập trình nâng cao - Chương 7: Simple AI
Số trang: 54
Loại file: pdf
Dung lượng: 228.11 KB
Lượt xem: 20
Lượt tải: 0
Xem trước 6 trang đầu tiên của tài liệu này:
Thông tin tài liệu:
Bài giảng "Lập trình nâng cao - Chương 7: Simple AI" cung cấp cho người học các kiến thức: Máy chơi Hangman, chương trình phức tạp (Mã giả và chia để trị), kỹ thuật thư viện tập hợp, thư viện ánh xạ,... Mời các bạn cùng tham khảo nội dung chi tiết.
Nội dung trích xuất từ tài liệu:
Bài giảng Lập trình nâng cao - Chương 7: Simple AISimple AI7 - Tìm kiếm và đếmhttps://github.com/tqlong/advprogramNội dung● Máy chơi Hangman● Chương trình phức tạp → Mã giả + chia để trị● AI = Dữ liệu + Tìm kiếm + Đếm (thống kê)● Kỹ thuật: ○ Thư viện tập hợp , thư viện ánh xạ ○ Vòng lặp for trên vector, set, map ○ Tìm kiếm ■ Tìm kiếm thỏa mãn điều kiện ■ Tìm kiếm lớn nhất, nhỏ nhất ○ ĐếmĐặt vấn đềLập trình cho máy chơi trò Hangman:● Người nghĩ từ● Máy đoán các chữ cái● Người trả lời các vị trí chữ cái đoán đúng… Người - chủ trò (host); Máy - người chơi (player)Các thành phần Giao diện tương Lõi trí tuệ nhân tác (UI) tạo (AI core)● Nhập số chữ cái của từ người ● Dựa vào các phán đoán đã chơi nghĩ (dễ) đưa ra và secretWord hiện● Hiển thị phán đoán, lịch sử phán thời đoán của máy và giá treo (đã làm) ○ Đưa ra phán đoán tiếp● Nhập trả lời của người chơi theo ○ Liệu máy tính có thể chơi Hangman giỏi hơn con người ?Nhập trả lời của người chơiKhi máy đưa ra phán đoán, người chơi trả lờibằng xâu mặt nạ (mask)● Một xâu ký tự toàn dấu gạch ngang● Chỉ hiển thị các vị trí đoán đúngVí dụ: người nghĩ từ “hangman” máy đoán p, người trả lời ------- máy đoán tiếp a, người trả lời tiếp -a---a- máy đoán tiếp g, người trả lời tiếp -a-g-a-Tiện ích sinh xâu mặt nạ // genmask.cpp // Mask generating tool for Hangman game #include #include using namespace std; int main(int argc, char* argv[]) { if (argc < 3) { cout Mã giả - chia để trịwordLength = getUserWordLength();secretWord = string(wordLength, -);incorrectGuess = 0;previousGuesses = empty set of characters;stop = false;do { guess = getNextGuess(previousGuesses, secretWord); Trí tuệ nhân tạo (AI) mask = getUserAnswer(guess); update(guess, mask, incorrectGuess, previousGuesses, secretWord, stop); render(incorrectGuess, previousGuesses, secretWord);} while (!stop);playAnimation(incorrectGuess == MAX_GUESSES, secretWord);Lập trình nhóm● Dự án phức tạp nhiều người ○ Mỗi người làm một phần● Dự án này ○ Một người làm giao diện ○ Một người làm phần lõi AI (getNextGuess) ■ Đây là phần khó, chưa biết làm thế nào ● Nếu đợi → làm chậm dự án ■ Cần một hàm getNextGuess() đơn giản để bên làm giao diện có thể phát triển độc lập ■ Đồng thời, bên làm AI có thể tìm cách cải tiếnTạo Project● Trong CodeBlocks tạo Project SimpleAI● Tạo tệp guesser.h, guesser.cpp thêm vào Project ○ Thêm hàm char getNextGuess(string, string) vào guesser.* ○ #include guesser.h trong main.cpp #pragma once guesser.h #include #include char getNextGuess(const std::set& previousGuesses, const std::string& secretWord);Giới thiệu thư viện ● previousGuesses cần lưu tập hợp các chữ cái đã đoán● : tập hợp các giá trị cùng kiểu ○ set: tập hợp (con) các số nguyên ○ set: tập hợp các ký tự ○ set: tập hợp các xâu ký tự● Các phần tử trong tập hợp đảm bảo luôn khác nhau (!=)Giới thiệu thư viện ● Các phép toán tập hợp: ○ s.insert(a): thêm phần tử a vào tập s ○ s.erase(a): xóa phần tử a khỏi tập s ○ s.find(a) != s.end(): phần tử a thuộc tập s ○ s.find(a) == s.end(): phần tử a không thuộc tập s ○ for (char c : s): duyệt các phần tử trong tập s ○ http://www.cplusplus.com/reference/set/set/getNextGuess đơn giảnChọn ngẫu nhiên 1 ký #include guesser.cpptự chưa đoán bao giờ #include guesses.h #include util.h● Thêm util.* vào using namespace std; Project char getNextGuess(const set& previousGuesses, const string& secretWord) {● #include util.h set remainingChars = getRemainingChars(previousGuesses); trong guesser.cpp if (remainingChars.size() == 0) return 0; else return selectRandomChar(remainingChars); }getRemainingChars()Bắt đầu, remainChars = tập chữ cái từ a → zsau đó xóa các chữ cái trong previousGuesses set getRemainingChars(const set& previousGuesses) { set remainingChars; for (char c = a; c selectRandomChar()Google “c++ select random element from set”http://stackoverflow.com/questions/3052788/how-to-select-a-random-element-in-stdset char selectRandomChar(const set& s) { int r ...
Nội dung trích xuất từ tài liệu:
Bài giảng Lập trình nâng cao - Chương 7: Simple AISimple AI7 - Tìm kiếm và đếmhttps://github.com/tqlong/advprogramNội dung● Máy chơi Hangman● Chương trình phức tạp → Mã giả + chia để trị● AI = Dữ liệu + Tìm kiếm + Đếm (thống kê)● Kỹ thuật: ○ Thư viện tập hợp , thư viện ánh xạ ○ Vòng lặp for trên vector, set, map ○ Tìm kiếm ■ Tìm kiếm thỏa mãn điều kiện ■ Tìm kiếm lớn nhất, nhỏ nhất ○ ĐếmĐặt vấn đềLập trình cho máy chơi trò Hangman:● Người nghĩ từ● Máy đoán các chữ cái● Người trả lời các vị trí chữ cái đoán đúng… Người - chủ trò (host); Máy - người chơi (player)Các thành phần Giao diện tương Lõi trí tuệ nhân tác (UI) tạo (AI core)● Nhập số chữ cái của từ người ● Dựa vào các phán đoán đã chơi nghĩ (dễ) đưa ra và secretWord hiện● Hiển thị phán đoán, lịch sử phán thời đoán của máy và giá treo (đã làm) ○ Đưa ra phán đoán tiếp● Nhập trả lời của người chơi theo ○ Liệu máy tính có thể chơi Hangman giỏi hơn con người ?Nhập trả lời của người chơiKhi máy đưa ra phán đoán, người chơi trả lờibằng xâu mặt nạ (mask)● Một xâu ký tự toàn dấu gạch ngang● Chỉ hiển thị các vị trí đoán đúngVí dụ: người nghĩ từ “hangman” máy đoán p, người trả lời ------- máy đoán tiếp a, người trả lời tiếp -a---a- máy đoán tiếp g, người trả lời tiếp -a-g-a-Tiện ích sinh xâu mặt nạ // genmask.cpp // Mask generating tool for Hangman game #include #include using namespace std; int main(int argc, char* argv[]) { if (argc < 3) { cout Mã giả - chia để trịwordLength = getUserWordLength();secretWord = string(wordLength, -);incorrectGuess = 0;previousGuesses = empty set of characters;stop = false;do { guess = getNextGuess(previousGuesses, secretWord); Trí tuệ nhân tạo (AI) mask = getUserAnswer(guess); update(guess, mask, incorrectGuess, previousGuesses, secretWord, stop); render(incorrectGuess, previousGuesses, secretWord);} while (!stop);playAnimation(incorrectGuess == MAX_GUESSES, secretWord);Lập trình nhóm● Dự án phức tạp nhiều người ○ Mỗi người làm một phần● Dự án này ○ Một người làm giao diện ○ Một người làm phần lõi AI (getNextGuess) ■ Đây là phần khó, chưa biết làm thế nào ● Nếu đợi → làm chậm dự án ■ Cần một hàm getNextGuess() đơn giản để bên làm giao diện có thể phát triển độc lập ■ Đồng thời, bên làm AI có thể tìm cách cải tiếnTạo Project● Trong CodeBlocks tạo Project SimpleAI● Tạo tệp guesser.h, guesser.cpp thêm vào Project ○ Thêm hàm char getNextGuess(string, string) vào guesser.* ○ #include guesser.h trong main.cpp #pragma once guesser.h #include #include char getNextGuess(const std::set& previousGuesses, const std::string& secretWord);Giới thiệu thư viện ● previousGuesses cần lưu tập hợp các chữ cái đã đoán● : tập hợp các giá trị cùng kiểu ○ set: tập hợp (con) các số nguyên ○ set: tập hợp các ký tự ○ set: tập hợp các xâu ký tự● Các phần tử trong tập hợp đảm bảo luôn khác nhau (!=)Giới thiệu thư viện ● Các phép toán tập hợp: ○ s.insert(a): thêm phần tử a vào tập s ○ s.erase(a): xóa phần tử a khỏi tập s ○ s.find(a) != s.end(): phần tử a thuộc tập s ○ s.find(a) == s.end(): phần tử a không thuộc tập s ○ for (char c : s): duyệt các phần tử trong tập s ○ http://www.cplusplus.com/reference/set/set/getNextGuess đơn giảnChọn ngẫu nhiên 1 ký #include guesser.cpptự chưa đoán bao giờ #include guesses.h #include util.h● Thêm util.* vào using namespace std; Project char getNextGuess(const set& previousGuesses, const string& secretWord) {● #include util.h set remainingChars = getRemainingChars(previousGuesses); trong guesser.cpp if (remainingChars.size() == 0) return 0; else return selectRandomChar(remainingChars); }getRemainingChars()Bắt đầu, remainChars = tập chữ cái từ a → zsau đó xóa các chữ cái trong previousGuesses set getRemainingChars(const set& previousGuesses) { set remainingChars; for (char c = a; c selectRandomChar()Google “c++ select random element from set”http://stackoverflow.com/questions/3052788/how-to-select-a-random-element-in-stdset char selectRandomChar(const set& s) { int r ...
Tìm kiếm theo từ khóa liên quan:
Bài giảng Lập trình nâng cao Kỹ thuật lập trình Máy chơi Hangman Simple AI Chương trình phức tạp Kỹ thuật thư viện tập hợpTài liệu liên quan:
-
Kỹ thuật lập trình trên Visual Basic 2005
148 trang 288 0 0 -
NGÂN HÀNG CÂU HỎI TRẮC NGHIỆM THIẾT KẾ WEB
8 trang 228 0 0 -
Giới thiệu môn học Ngôn ngữ lập trình C++
5 trang 215 0 0 -
Bài giảng Nhập môn về lập trình - Chương 1: Giới thiệu về máy tính và lập trình
30 trang 183 0 0 -
Luận văn: Nghiên cứu kỹ thuật giấu tin trong ảnh Gif
33 trang 156 0 0 -
Báo cáo thực tập Công nghệ thông tin: Lập trình game trên Unity
27 trang 122 0 0 -
Giáo trình về phân tích thiết kế hệ thống thông tin
113 trang 115 0 0 -
LUẬN VĂN: Tìm hiểu kỹ thuật tạo bóng cứng trong đồ họa 3D
41 trang 111 0 0 -
Bài giảng Kỹ thuật lập trình - Chương 10: Tổng kết môn học (Trường Đại học Bách khoa Hà Nội)
67 trang 109 0 0 -
Giáo trình Nhập môn lập trình VB6: Phần 2
184 trang 99 0 0