Để thử nghiệm hoạt động của toàn hệ thống, nhóm phát triển đã sử dụng một số các tệp tin được xây dựng và đưa ra của SMT-LIB. Cụ thể
Bảng 8 Bảng dữ liệu các tệp tin đầu vào thử nghiệm
Tên tệp tin Kích thước Logic Trạng thái
Test1.SMT 1kb QF_UF sat
Test2.SMT 3kb QF_AX sat
Test3.SMT 1kb QF_AUFLIA sat
Test4.SMT 312kb QF_LIA sat
Test5.SMT 587kb QF_LIA unsat
Test6.SMT 270kb QF_LRA sat
Với tất cả các file dữ liệu kiểm thử được sử dụng như trên, ta tùy chỉnh để hệ thống có thể chạy tối đa 6 kết nối cùng một lúc, số lượng kết nối chờ là 500. Hệ thống cho thấy được khả năng đáp ứng tốt tất cả các yêu cầu của người dùng, đáp ứng kết quả chính xác và thời gian đáp ứng nhanh chóng, hệ thống đưa về kết quả nhanh nhất trong các bộ giải. Dựa vào những file dữ liệu để kiểm thử hệ thống như trên, ta có kết quả của hệ thống về mặt thời gian như sau:
Bảng 9: Kết quả thời gian của thực nghiệm
Solver
Tên file Z3 Yieces All
Test1.smt 1 1 1 Test2.smt 1 1 1 Test3.smt 1 1 1 Test4.smt 7 8 7 Test5.smt 20 16 16 Test6.smt 35 35 35
Bảng 10: Kêt quả trả về của thực nghiệm
Solver
Tên file Z3 Yieces All
Test1.smt Sat Sat Sat
Test2.smt Sat Error Sat
Test3.smt Sat Sat Sat
Test4.smt Sat Sat Sat
Test5.smt Unsat Unsat Unsat
Test6.smt Time out TimeOut TimeOut
Từ kết hai bảng kết quả trên, ta có thể thấy rằng, hiệu quả đem lại của hệ thống giải bài toán SMT là khá rõ ràng. Với những bài toán lớn, rõ ràng thời gian trả về của các bộ giải là rất quan trọng. Tuy nhiên, với việc kết hợp nhiều bộ giải, vấn đề tối ưu hóa thời gian giải bài toán đã được giải quyết. Qua những ví dụ 4, 5 ta thấy rằng thời gian giải của các bộ giải đã có sự chênh lệch, và hệ thống đã đưa ra được thời gian trả về kết quả tối ưu nhất.
Từ bảng 10, ta có thể thấy rằng, hầu hết các ví dụ đều có kết quả giống nhau. Tuy nhiên, trong trường hợp kết quả trả về khác nhau, hệ thống vẫn đưa ra được kết quả đúng đắn nhất cho người sử dụng. Ta thấy rằng, ở ví dụ 2, bộ giải yices đã không thể đưa ra được kết quả (vì không hỗ trợ logic này), tuy nhiên bộ giải Z3 vẫn đưa ra được kết quả cho bài toán. Còn ở ví dụ 6, ta thấy rằng, hệ thống đã hoạt động tốt với chức năng thiết lập thời gian chờ tối đa của người dùng. Hệ thống đã ngắt và trả về cho người sử dụng trạng thái của bài toán mà người dùng gửi lên.
Kết Luận
Với hệ thống giải quyết bài toán SMT hiệu năng cao đã được xây dựng và trình bày ở trên, việc giải quyết các bài toán SMT sẽ dễ dàng và mang lại nhiều hiệu quả hơn rất nhiều cho người sử dụng. Tuy rằng, hệ thống mới chỉ được nghiên cứu và phát triển trong những bước đầu hết sức đơn giản, nhưng những hiệu quả mang lại đã được chứng minh rất rõ ràng trong phần thực nghiệm hệ thống. Do sử dụng nhiều bộ giải cùng một lúc với cùng một bài toán nên ngoài khả năng tối ưu hóa mặt thời gian, hệ thống còn có thể tối ưu hóa khả năng giải quyết bài toán SMT dưới nhiều chuẩn Logic, nền lý thuyết khác nhau.
Với việc xây dựng hệ thống máy khách và máy trạm, cá nhân tôi đã có được những hiểu biết nhất định về cấu trúc bài toán SMT cũng như việc phân luồng các tiến trình để tận dụng được tối đa hiệu năng của máy. Tuy những hiểu biết và thành quả còn nhiều hạn chế, nhưng đây là bước đầu để có thể phát triển hoàn thiện hệ thống giải bài toán SMT hiệu năng cao về sau.
Việc nghiên cứu và phát triển hệ thống giải quyết tối ưu bài toán SMT một cách đầy đủ, hoàn thiện hơn cần sự đầu tư về thời gian, trí óc và nhân sự. Rất mong sẽ có những người cùng phát triển hệ thống về sau để hình thành nên hệ thống giải quyết bài toán SMT tốt hơn.
Hướng phát triển tiếp theo của hệ thống
Tuy hệ thống giải quyết bài toán SMT hiệu năng cao có những thành quả rất khả quan, nhưng vẫn còn nhiều các hạn chế cần phải đầu tư và phát triển. Đối với toàn hệ thống, hiện tại hệ thống chỉ hỗ trợ các bài toán thuộc chuẩn của SMT-LIB trong khi đó, các bộ giải đều hỗ trợ những chuẩn đầu vào riêng. Vì vậy hệ thống cần phải phát triển để có thể đáp ứng được nhiều các chuẩn đầu vào khác nữa để giải quyết. Hướng giải quyết cho vấn đề này sẽ có hai cách thức: thứ nhất, hệ thống sẽ xây dựng một bộ chuyển tất cả các đầu vào thành dạng chung SMT-LIB rồi phần bổ cho các máy trạm xử lý, hoặc cách thứ hai có thể tìm và đưa cho đúng bộ giải hỗ trợ loại định dạng đầu vào đó để xử lý.
Về phía máy khách, hiện tại hệ thống cài đặt trên máy khách chỉ hỗ trợ việc xây dựng bài toán SMT hoàn toàn phải dựa trên định nghĩa và luật ngữ nghĩa được ghi trong các bảng (1), (2), (3), (4), (5). Điều này khiến cho người dụng gặp nhiều khó khăn khi buộc phải nhớ các luật ngữ nghĩa đó. Vì vậy, hệ thống cài đặt trên máy khách cần xây dựng những hàm nhúng API đơn giản, hiệu quả và dễ dàng sử dụng hơn đối với người dùng. Ngoài ra, hệ thống nên có một giao diện trực quan khi người dùng chỉ sử dụng chức năng chỉ ra tập tin chứa bài toán SMT cần giải quyết.
Về phía máy trạm, do khuôn khổ luận văn có hạn, nên hiện tại hệ thống mới chỉ sử dụng được hai bộ giải là yices và Z3, điều này khiến hệ thống sẽ có nhiều hạn chế về hiệu năng xử lý các bài toán SMT được đưa vào. Vì vậy, hệ thống cần được nghiên cứu, phát triển để có thể sử dụng nhiều hơn các bộ giải khác vào việc xử lý song song các bài toán SMT. Ngoài ra, hệ thống cần phải nghiên cứu và phát triển trên nhiều nền hệ điều hành khác nhau nữa. Hiện tại, việc gọi các bộ giải còn cần phải thông qua một tệp tin thực thi của hệ điều hành, nên việc cài đặt hệ thống còn đang bị giới hạn trên hai hệ điều hành là windows và linux.
Tài liệu tham khảo
[1] Roberto Sebastiani, Sanjit A. Seshia and Cesare Tinelli Clark Barrett, "Satisfiability
Modulo Theories," in Handbook of Satisfiability., 2008, ch. 12, p. 737.
[2] Leonardo de Moura and Nikolaj Bjorner, Satisfiability Modulo Theories: An Appetizer.
WA: Microsoft Research.
[3] N. Shankar, A Tutorial on Satisfiability Modulo Theories. CA: Computer Science
Laboratory.
[4] Silvio Ranise, Cesare Tinelli, The SMT-LIB Format: An Initial Proposal., 2006. [5] Bruno Dutertre and Leonardo de Moura, The YICES SMT Solver.: Computer Science
Laboratory, SRI International.
[6] Aaron Stump, and Cesare Tinelli Clark Barrett. (2006) www.SMT-LIB.org.
[7] Silvio Ranise, Cesare Tinelli, The SMT-LIB Standard: Version 1.2., 2006. [8] Cay S Horstmann and Gary Cornell, Core Java.: Pearson Education, 2008.