Thực hành Toán rời rạc - Chương 6: Cơ bản về đại số Bool, Finite State Machine

17 13 0
Thực hành Toán rời rạc - Chương 6: Cơ bản về đại số Bool, Finite State Machine

Đang tải... (xem toàn văn)

Tài liệu hạn chế xem trước, để xem đầy đủ mời bạn chọn Tải xuống

Thông tin tài liệu

Thực hành Toán rời rạc - Chương 6: Cơ bản về đại số Bool, Finite state machine. Chương này cung cấp cho học viên những nội dung về: cơ bản đại số Bool với Python; khái niệm về Máy trạng thái hữu hạn FSM (Finite State Machines); xây dựng chương trình kiểm tra ngữ pháp đơn giản;... Mời các bạn cùng tham khảo!

Bộ mơn Khoa học Dữ liệu THỰC HÀNH TỐN RỜI RẠC TÀI LIỆU PHỤC VỤ SINH VIÊN NGÀNH KHOA HỌC DỮ LIỆU Nhóm Giảng viên biên soạn: TS Hồng Lê Minh – Hoàng Thị Kiều Anh – Khưu Minh Cảnh – Phạm Trọng Nghĩa –Nguyễn Công Nhựt – Trần Ngọc Việt – Lê Ngọc Thành – Đỗ Đình Thủ – Nguyễn Hữu Trí Nhật – Lê Cơng Hiếu – Nguyễn Thị Thanh Bình – Nguyễn Thái Hải – Huỳnh Thái Học Giảng viên khác TP.HCM – Năm 2020 Thực hành Tốn rời rạc Trang Bộ mơn Khoa học Dữ liệu MỤC LỤC CHƯƠNG 6: CƠ BẢN VỀ ĐẠI SỐ BOOL, FINITE STATE MACHINE Cơ đại số Bool với Python Khái niệm Máy trạng thái hữu hạn FSM (Finite State Machines) 2.1 Mô hình tốn học: 2.2 Ví dụ: Mạch điện đèn điều khiển tín hiệu giao thông Xây dựng chương trình kiểm tra ngữ pháp đơn giản BÀI TẬP CHƯƠNG 17 Thực hành Toán rời rạc Trang Bộ môn Khoa học Dữ liệu CHƯƠNG 6: CƠ BẢN VỀ ĐẠI SỐ BOOL, FINITE STATE MACHINE Mục tiêu: - Khái niệm đại số Bool - Biểu diễn Finite State Machine Python Nội dung chính: Cơ đại số Bool với Python Tóm tắt lý thuyết: Cho = {0,1}, biến Khi đó, hàm số ( , , … , = {( , gọi biến bool nhận giá trị ) gọi hàm bool xác định tập ,…, )| ∈ , = 1, } Các đặc tính: cho hai hàm số bool, phép toán hội (∧), phép toán tuyển (∨) cho hai hàm số phép toán phủ định cho hàm số cho kết hàm số bool Các kí hiệu: - Hội hai hàm bool: ( ∧ ) Tuyển hai hàm bool: ( ∨ ) Phủ định hàm bool: ̅ Ví dụ 1: Cho hàm bool theo bảng sau xác định biểu thức bool thể ngôn ngữ Python: x y Hàm f(x,y) 1 1 0 0 Nhận xét: f(x,y)=1 x=1, y=0 f(x,y)=0 trường hợp cịn lại giá trị x, y Từ đó, kết luận biểu thức bool hàm f(x,y) ∧ Với Python, viết hàm thể hàm bool Một cách đơn giản liệt kê tất trường hợp tương ứng với giá trị hàm bool cho bảng: Sinh viên thực thể hàm f bên dưới: >>> def bool_xy(x, y): kq = if (x==1) and (y==1): Thực hành Toán rời rạc Trang Bộ môn Khoa học Dữ liệu kq = if (x==1) and (y==0): kq = if (x==0) and (y==1): kq = if (x==0) and (y==0): kq = return kq Thực chạy chương trình: >>> for x in [1,0]: for y in [1,0]: print (bool_xy(x,y)) ……………………………………… Cải tiến hàm theo phân tích: >>> def bool_xy1(x,y): kq = if (x == 1) and (y==0): kq = return kq Thực chạy chương trình lần nữa: >>> for x in [1,0]: for y in [1,0]: print (bool_xy(x,y)) Thực hành Tốn rời rạc Trang Bộ mơn Khoa học Dữ liệu ……………………………………… Ví dụ 2: Trong hình bên dưới, hai mạch thiết kế với chức Trong đó, mạch bên trái nhiều linh kiện mạch bên phải tính Sinh viên viết chương trình Python để mơ tả hai mạch bên Lưu ý: Trong thực tế, mong muốn ban đầu đại số Bool tối thiểu thiết kế “mạch” việc thiết kế mạch thực tế vấn đề lớn Vì việc thiết kế mạch ảnh hưởng đến độ bền thiết bị, linh kiện, mức độ “chịu đựng” điện áp hiệu ứng nhiễu (trong thiết bị âm thanh, thu phát sóng,…trong mơi trường khác nhau), lượng tiêu thụ yếu tố khác Do đó, việc sử dụng giải pháp đại số Bool để làm đơn giản hóa mạch vấn đề khác Đôi khi, với thiết kế phức tạp mạch trở nên ổn định, bền chống nhiễu đưa vào sử dụng Khái niệm Máy trạng thái hữu hạn FSM (Finite State Machines) Một “Finite State Machine” viết tắt FSM gọi “máy trạng thái” “Finite State Automaton” máy ảo gồm tập trạng thái (bao gồm trạng thái khởi đầu nhiều trạng thái cuối), tập kiện nhập, tập kiện xuất hàm chuyển đổi trạng thái Hàm chuyển đổi trạng thái lấy state kiện nhập đầu vào trả tập kiện xuất trạng thái (trạng thái mới) Một số trạng thái gọi trạng thái “chấm dứt” (terminal states) chuyển sang trạng thái khác Hoạt động FSM bắt đầu trạng thái gọi trạng thái khởi đầu xử lý xuyên suốt dịch chuyển phụ thuộc vào trạng thái khác thông thường kết thúc trạng thái cuối Một trạng thái đánh dấu dịng thành cơng hoạt động gọi trạng thái chấp nhận (accept state) Kỹ thuật state machine sử dụng ứng dụng: trò chơi (games), giao diện người sử dụng, giao thức mạng chương trình phân tích Thực hành Tốn rời rạc Trang Bộ mơn Khoa học Dữ liệu 2.1 Mơ hình tốn học: Một máy trạng thái hữu hạn xác định 5: (Σ, , - - , , !) với: Σ bảng chữ đầu vào (tập hữu hạn không rỗng kí hiệu) tập trạng thái hữu hạn khơng rỗng trạng thái ban đầu, phần tử hàm chuyển đổi trạng thái, mô tả sau: : × Σ → Trong máy trạng thái hữu hạn không xác định, hàm : × Σ → ℘( ), nghĩa trả tập trạng thái, ℘( ) power set (tập tập con) tập ! trạng thái cuối (tập tập rỗng), nghĩa ! tập tập Hệ máy trạng thái hữu hạn (FSM – Finite State Machines) có ứng dụng điều khiển phận động cơ, phanh… tàu điện ngầm muốn dừng tàu khẩn cấp vận tốc: 50km/h, 100km/h, 300km/h Nhiều hệ FSM cài đặt để đáp ứng nhu cầu sử dụng, đặc biệt hệ thống nhúng, điều khiển, vi điều khiển để đảm bảo an toàn ổn định hệ thống 2.2 Ví dụ: Mạch điện đèn điều khiển tín hiệu giao thơng Một mạch điện cho đèn xanh – đỏ giao thông gồm trạng thái: s0 (xanh), s1 (vàng) s2 (đỏ) Cứ giây, tín hiệu điều khiển đưa vào trạng tái biến đổi mô tả sau: Trạng thái Tín hiệu điều khiển vào Trạng thái tương lai S0 S0 S0 S1 S1 S1 S1 S2 S2 S2 S2 S0 Rõ ràng, với hệ thống mạch đèn giao thông minh họa cho state machine thỏa điều kiện: biết trạng thái biến đổi biết liệu có lưu trạng thái Lưu ý: biến global Python có nghĩa sử dụng biến tồn cục Thực hành Tốn rời rạc Trang Bộ mơn Khoa học Dữ liệu Sau đó, sinh viên thử nghiệm biến đổi trạng thái: >>> tap_tinhieu = [1, 0, 1, 0, 1, 1, , 0, 1] # thiết lập tập liệu đầu vào >>> for i in tap_tinhieu: chuyen(i) ……………………………………………………… Bên cạnh việc xây dựng chương trình trên, Python hỗ trợ phương thức viết đơn giản hiệu Chúng ta xem xét đoạn mã đây: >>> trang_thai = "s0" >>> trangthai_ke = { 's0': ['s0', 's1'], 's1': ['s1', 's2'], 's2': ['s2', 's0']} Thực hành Toán rời rạc Trang Bộ môn Khoa học Dữ liệu >>> ket_qua = { 's0': [ 0, 1], 's1': [ 0, 1], 's2': [ 0, 1]} Sau đó, thử nghiệm: >>> tap_tinhieu = [1, 0, 1, 0, 1, 1, , 0, 1] >>> for i in tap_tinhieu: chuyen_trangthai(i) ………………………………………………… # so sánh kết với chương trình bên Xây dựng chương trình kiểm tra ngữ pháp đơn giản Giả định muốn nhận diện nghĩa câu nhỏ với từ vựng ngữ pháp tối giản theo quy tắc sau:   Những câu phải bắt đầu với từ “Python is” sau là: Một tính từ, từ “not” (khơng) với tính từ Ví dụ: - “Python is great” (nghĩa tích cực) [Python vĩ đại] “Python is stupid” (nghĩa tiêu cực) [Python ngu ngốc] “Python is not ugly” (nghĩa tích cực) [Python khơng xấu xí] Nếu mẫu trên, nghĩa câu viết sai! Thực hành Tốn rời rạc Trang Bộ mơn Khoa học Dữ liệu Từ đó, có mơ hình xử lý sau: Trả lỗi Sai (Error): bắt đầu câu chữ “Python” chữ chữ “is”/“is not” chữ sau chữ “is”/“is not” chữ “not” khơng phải tính từ (adjective) Chương trình Python Để cài đặt ví dụ trên, xây dựng chương trình Finite State Machine sau: Thực hành Tốn rời rạc Trang Bộ mơn Khoa học Dữ liệu Thể code: class StateMachine: def init (self): self.tap_xuly = {} self.trangthaiBatdau = None self.trangthaiKetThuc = [] def them_Trangthai(self, trangthai, xuly, trangthai_ketthuc = 0): trangthai = trangthai.upper() self.tap_xuly[trangthai] = xuly if trangthai_ketthuc: self.trangthaiKetThuc.append(trangthai) Thực hành Toán rời rạc Trang 10 Bộ môn Khoa học Dữ liệu def thietlap_TrangthaiBatdau(self, trangthai): self.trangthaiBatdau = trangthai.upper() def thucthi(self, dauvao): try: xuly = self.tap_xuly[self.trangthaiBatdau] except: raise InitializationError("Phai gÍi thietlap_TrangthaiBatdau() truoc goi thucthi() ") if not self.trangthaiKetThuc: raise InitializationError("It nhat trang thai phai la trang thai ket thuc") while True: (TrangThaiMoi, dauvao) = xuly(dauvao) if TrangThaiMoi.upper() in self.trangthaiKetThuc: print ("Den dich! ", TrangThaiMoi) break else: xuly = self.tap_xuly[TrangThaiMoi.upper()] Và chương trình sử dụng lớp FSM.py: # Thuc thi chuong trinh su dung goi statemachine.py - Đưa thư viện statemachine vào sử dụng Thực hành Toán rời rạc Trang 11 Bộ môn Khoa học Dữ liệu - Khởi tạo danh sách “từ vựng” from statemachine import StateMachine # Khởi tạo danh sách từ vựng: tinhtu_tichcuc = ["vi_dai", "sieu", "vui", "de", "giai_tri"] # danh sách tính từ tích cực tinhtu_tieucuc = ["chan", "kho", "xau", "kem"] - # tính từ tiêu cực Khai báo trạng thái ban đầu: def trangthai_baudau(txt): splitted_txt = txt.split(None, 1) tu, txt = splitted_txt if len(splitted_txt) > else (txt, "") if tu == "Python": trangthaimoi = "Python_state" else: trangthaimoi = "error_state" return (trangthaimoi, txt) Thực hành Tốn rời rạc Trang 12 Bộ mơn Khoa học Dữ liệu Các đoạn code tương tự: - Khai báo trạng thái python Và trạng thái (is, is not, tính từ) def trangthai_python(txt): splitted_txt = txt.split(None, 1) tu, txt = splitted_txt if len(splitted_txt) > else (txt, "") if tu == "is": trangthaimoi = "is_state" # từ ‘is’ # trạng thái is_state else: trangthaimoi = "error_state" # ngược lại trạng thái lỗi (error_state) return (trangthaimoi, txt) Thực hành Toán rời rạc Trang 13 Bộ môn Khoa học Dữ liệu def trangthai_is_chuyentrangthai(txt): splitted_txt = txt.split(None, 1) tu, txt = splitted_txt if len(splitted_txt) > else (txt, "") if tu == "not": trangthaimoi = "not_state" elif tu in tinhtu_tichcuc: trangthaimoi = "pos_state" elif tu in tinhtu_tieucuc: trangthaimoi = "neg_state" else: trangthaimoi = "error_state" return (trangthaimoi, txt) def trangthai_isnot_chuyentrangthai(txt): splitted_txt = txt.split(None, 1) tu, txt = splitted_txt if len(splitted_txt) > else (txt, "") if tu in tinhtu_tichcuc: trangthaimoi = "pos_state" Thực hành Tốn rời rạc Trang 14 Bộ mơn Khoa học Dữ liệu elif tu in tinhtu_tieucuc: trangthaimoi = "neg_state" else: trangthaimoi = "error_state" return (trangthaimoi, txt) - Và khai báo trạng thái tiêu cực def neg_state(txt): print ("Chao!") return ("neg_state","") - Và hàm main để gọi: if name == " main ": m = StateMachine() Thực hành Toán rời rạc Trang 15 Bộ môn Khoa học Dữ liệu # add_state m.them_Trangthai("Start", trangthai_baudau) m.them_Trangthai("Python_state", trangthai_python) m.them_Trangthai("is_state", trangthai_is_chuyentrangthai) m.them_Trangthai("not_state", trangthai_isnot_chuyentrangthai) m.them_Trangthai("neg_state", None, trangthai_ketthuc = 1) m.them_Trangthai("pos_state", None, trangthai_ketthuc = 1) m.them_Trangthai("error_state", None, trangthai_ketthuc = 1) # set_start m.thietlap_TrangthaiBatdau("Start") # run m.thucthi("Python is vi_dai") m.thucthi("Python is kho") m.thucthi("Python is xau") m.thucthi("Python is xao") Kết thực thi (khi đến đích nghĩa câu nói ngữ pháp!) Thực hành Tốn rời rạc Trang 16 Bộ môn Khoa học Dữ liệu BÀI TẬP CHƯƠNG Câu 1: Thiết kế thang máy! Hệ máy trạng thái hữu hạn Python Trong điều khiển thang máy, vị trí tầng trạng thái thang máy Sau đó, thang máy nhận lệnh lên xuống tùy theo người sử dụng hệ thống điều khiển thang máy thực tác vụ theo trạng thái Cụ thể hơn, có tốn sau: Nhà ga metro gồm tầng (tầng Trệt tầng 1) Nhà ga có thang máy dành cho người hạn chế lên xuống cầu thang (người già, người khuyết tật, người bị thương chân) sử dụng với nút bấm điều khiển để hai tầng Đèn tín hiệu thang là: màu Tím thang tầng Trệt màu Hồng tầng Tại thời điểm, điều khiển kiểm tra trạng thái thang để lên xuống thay đổi tín hiệu đèn Bạn giao nhiệm vụ lập trình đoạn chương trình cho chip nhúng để điều khiển thang máy có nút nhấn tầng Hãy viết chương trình Python để điều khiển thang Thực hiện:  Vẽ lược đồ FSM cho hệ thống Lưu ý: Lược đồ hình ảnh tổng quan hệ thống Các trạng thái hệ thống thể đường tròn Các mũi tên hướng thay đổi trạng thái hệ thống Thực hành Toán rời rạc Trang 17 ... dựng chương trình kiểm tra ngữ pháp đơn giản BÀI TẬP CHƯƠNG 17 Thực hành Toán rời rạc Trang Bộ môn Khoa học Dữ liệu CHƯƠNG 6: CƠ BẢN VỀ ĐẠI SỐ BOOL, FINITE STATE MACHINE. .. học Dữ liệu MỤC LỤC CHƯƠNG 6: CƠ BẢN VỀ ĐẠI SỐ BOOL, FINITE STATE MACHINE Cơ đại số Bool với Python Khái niệm Máy trạng thái hữu hạn FSM (Finite State Machines) 2.1... từ (adjective) Chương trình Python Để cài đặt ví dụ trên, xây dựng chương trình Finite State Machine sau: Thực hành Toán rời rạc Trang Bộ môn Khoa học Dữ liệu Thể code: class StateMachine: def

Ngày đăng: 27/08/2022, 13:12

Tài liệu cùng người dùng

  • Đang cập nhật ...

Tài liệu liên quan