Danh mục

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 ...

Tài liệu được xem nhiều: