6.1. Cài đặt
6.1.1. Môi trường phần cứng
Để hệ thống hoạt động một cách tốt nhất, đáp ứng kết quả cho người dùng trong thời gian nhanh chóng, đồng thời có khả năng đáp ứng cùng lúc nhiều người dùng, ta cần sử dụng đến hệ thống máy tính có hiệu năng xử lý mạnh, mạng tốc độ cao, băng thông rộng.
Mỗi thành phần Solver, Server nên để thực thi ở mỗi máy riêng biệt do có sử dụng đa tiến trình trong quá trình giải quyết các bài toán nhận được từ phía User. Tốc độ xử lý và hệ số xử lý song song của bộ vi xử lý cũng tác động đến hiệu quả của hệ thống, do vậy tùy thuộc vào bộ vi xử lý và bộ nhớ của hệ thống máy tính thực thi Server và Solver mà ta có tùy chỉnh về số tiến trình phục vụ người dùng tối đa của hệ thống (maxthread).
6.1.2. Môi trường phần mềm
- Hệ điều hành: Java có hệ thống máy ảo riêng biệt, nên phần Server của hệ thống có thể hoạt động tốt trên hầu hết các hệ điều hành thông dụng như: Linux RedHat, Fedora, Windows, Mac..
- Các công cụ phần mềm: Để có thể thực thi được hệ thống, ta cần cài jdk1.6, jre1.6 và biên dịch mã nguồn ra file dạng *.jar để có thể thực thi. dịch mã nguồn ra file dạng *.jar để có thể thực thi.
6.1.3. Cách thức thực thi hệ thống
Điều đầu tiên, đó là phải chuẩn bị cho sự hoạt động của các thành phần trong hệ thống đảm bảo kết nối giữa các máy tính. Sau khi tùy chỉnh các thông số cổng lắng nghe, số người kết nối cùng lúc tối đa, số người phục vụ tối đa … của hệ thống, các Solver cũng phải chỉnh cho phù hợp với các thông số đó của Server để hệ thống có thể hoạt động trơn tru.
Ta khởi động Server (có thể thực thi bằng dòng lệnh). Trước khi vào phục vụ người dùng, Server sẽ tiếp nhận đầy đủ số lượng các Solver như đã được khai báo để sử dụng
Sau đó, ta khởi động các Solver. Solver sẽ phải kết nối đến cổng đã được định trước của Server và khai báo tên của Solver đó đến Server. Mỗi Solver kết nối đến Server, Server sẽ tăng biến đếm số lượng Solver của mình lên cho đến khi đủ.
Sau khi tất cả các Solver đều đã kết nối đến Server, Server sẽ đưa ra thông báo đã nhận đủ Solver và bắt đầu đi vào hoạt động.
Đây là 2 thành phần luôn luôn phải giữ kết nối và luôn ở trạng thái thực thi của hệ thống. Bất kì việc xảy ra lỗi của bộ phận nào cũng có thể gây ra những ảnh hưởng đến kết quả và hiệu năng của hệ thống.
Sau khi Server đã sẵn sàng phục vụ User, ta sẽ khởi động User và chờ tin phản hồi kết nối thành công vào cổng đã chỉ định của Server. Nếu như kết nối không thành công có thể là do đang có quá nhiều kết nối đến Server, hoặc do việc tùy chỉnh các thông số về địa chỉ máy chỉ, cổng lắng nghe chưa đúng. Khi đã có thông báo kết nối thành công của Server, việc gửi bài toán SMT đến cho hệ thống mới bắt đầu được thực hiện. Và một điều chú ý trước khi khởi động User đó là User phải khai báo thời gian tối đa của hệ thống để giải quyết bài toán trên.
6.2. Bài toán thực nghiệm
6.2.1. Giới thiệu bài toán thực nghiệm
Bài toán thực nghiệm được xây dựng để kiểm tra tính đúng đắn của hệ thống cũng như kiểm tra hiệu năng hoạt động của hệ thống.
- Kiểm tra tính đùng đắn của hệ thống: Đó là việc trả về kết quả một cách đúng đắn theo yêu cầu của User.
- Hiệu năng hoạt động của hệ thống: Thời gian trả về kết quả người dùng trung bình là nhanh nhất, đáp ứng được số lượng người dùng lớn.
Do điều kiện thiết bị phần cứng còn thiếu thốn, ta sử dụng 5 máy tính trong đó 1 máy để Server, 2 máy để Solver Z3 và Yieces, 2 máy còn lại khởi động User và kết nối đến Server.
6.2.2. Dữ liệu thử nghiệm
Để thử nghiệm, ta sử dụng các file với yêu cầu bài toán và kích thước bài toán khác nhau. Ta lựa chọn các file khác nhau từ SMT-LIB, các file đã được tạo ra sẵn được cung cấp từ những nguồn khác nhau, và qua việc thực hiện giải các bài toán này, ta sẽ có nhận thấy được ưu điểm của hệ thống. Bao gồm các file sau:
Bảng 6.1 Danh sách các file sử dụng để thực nghiệm
Tên file Kích thước Logic Trạng thái
Test1.SMT 1Kb QF_UF sat
Test2.SMT 1Kb 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
6.2.3. Kết quả thực nghiệm
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 như sau:
Bảng 6.2 So sánh thời gian trả về kết quả của Solver riêng lẻ và các hệ thống Solver Tên file Z3 Yieces Cả Z3 và Yieces 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 6.3 Kết quả trả về của hệ thống từ các tệp thử nghiệm Solver
Tên file
Z3 Yieces Cả Z3 và Yieces
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 Sat Sat Sat
6.2.4. Đánh giá bài toán thực nghiệm
Qua các kết quả thực nghiệm của hệ thống, ta thấy hệ thống giải quyết bài toán SMT hiệu năng cao cho ta kết quả tốt, kết quả bài toán đúng, thời gian đáp ứng bài toán trung bình tốt hơn so với việc sử dụng các Solver riêng lẻ để giải quyết bài toán. Ta nhận thấy rằng các bài toán có thể được giải quyết bởi Solver này nhưng không thể giải quyết được ở Solver khác. Chẳng hạn như: ở Test2 trong các tệp kiểm thử, Z3 có thể giải được nó những Yieces thì không giải được, hệ thống sử dụng kết quả của Z3 và biến đổi nó để chuyển cho người dùng.