Luận văn -Xây dựng hệ thống giải bài toán Satisfiability Modulo Theories(SMT) hiệu năng cao – phần máy trạm

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.

pdf47 trang | Chia sẻ: lylyngoc | Lượt xem: 2728 | Lượt tải: 1download
Bạn đang xem trước 20 trang tài liệu Luận văn -Xây dựng hệ thống giải bài toán Satisfiability Modulo Theories(SMT) hiệu năng cao – phần máy trạm, để xem tài liệu hoàn chỉnh bạn click vào nút DOWNLOAD ở trên
(6) ::= :sort ( +) | :funs (+) | :preds () | :definition | :axioms | (7) ::= (theory +) Bảng 4: Luật sinh một logic (1) ::= (2) ::= : theory | :language | :extensions | :notes Xây dựng hệ thống giải bài toán SMT hiệu năng cao – Phần máy trạm 2010 Trang 9 Sinh viên: Hoàng Thế Tùng – K51CNPM – Khoa CNTT - ĐH Công nghệ - ĐH QGHN GVHD: TS. Trương Anh Hoàng GVĐHD: TS. Phạm Ngọc Hùng | (3) ::= (logic +) Bảng 5 Luật sinh một chuẩn (1) ::= sat | unsat | unknown (2) ::= (3) ::= :logic | :assumption | :formula | :status | :extrasorts ( + ) | :extrafuns ( + ) | :extrapreds ( + ) | :notes | (4) benchmark ::= ( benchmark + ) Các lý thuyết nền cơ bản đã được nghiên cứu và đưa ra: Bảng 6: Các lý thuyết nền được quy chuẩn trong SMT-LIB 1.2 Arrays Các hàm mảng ArraysEx Các hàm mảng mở rộng Fixed_Size_BitVectors[32] Bit vector 32 bit Fixed_Size_BitVectors Bit vector với kích cỡ tùy ý. BitVector_ArraysEx Bit vector với kích cỡ tùy ý và mảng chứa kiểu dữ liệu bit vector Empty Thuyết trống với ký hiệu rỗng Ints Số nguyên Int_Arrays Mảng số nguyên Int_ArraysEx Mảng giá trị được đánh thứ tự số nguyên với tiền đề mở rộng Int_Int_Real_Array_ArraysEx Mảng của mảng các số nguyên và số thực với tiền đề mở rộng Reals Số thực Reals_Ints Số nguyên và số thực Nội dung cụ thể của từng lý thuyết xin được không đề cập đến ở đây để tránh việc trình bày lan man không cần thiết. Xây dựng hệ thống giải bài toán SMT hiệu năng cao – Phần máy trạm 2010 Trang 10 Sinh viên: Hoàng Thế Tùng – K51CNPM – Khoa CNTT - ĐH Công nghệ - ĐH QGHN GVHD: TS. Trương Anh Hoàng GVĐHD: TS. Phạm Ngọc Hùng Các logic cơ bản được áp dụng trong định dạng của SMT-LIB: Bảng 7: Các Logic quy chuẩn được đưa ra trong SMT-LIB 1.2 AUFLIA Các công thức tuyến tính trên thuyết mảng số nguyên với những ký tự phân cấp, hàm và thuộc tính tự do. AUFLIRA Các công thức tuyến tính với ký hiệu hàm và ký hiệu vị từ trong thuyết 10 nêu trên AUFNIRA Công thức với các ký tự hàm và vị từ tự do dựa trên thuyết 10 LIA Công thức tuyến tính trên các phép toán số nguyên LRA Công thức tuyến tính trên các phép toán số thực QF_A Công thức lượng từ tự do trên thuyết mảng không mở rộng QF_AUFBV Công thức lượng tự trên thuyết bitvector và mảng bitvector với các ký hiệu hàm và ký hiệu vị từ tự do. QF_AUFLIA Công thức tuyến tính và lượng từ tự do trên thuyết mảng các số nguyên với ký tự phân cấp, ký tự hàm và ký tự lượng từ. QF_AX Công thức lượng từ tự do trên thuyết của mảng mở rộng QF_BV Công thức lượng từ tự do với thuyết bitvector cố định kích cỡ QF_IDL Logic khác trên số nguyên. Ví dụ bất đẳng thức x-y <b với x,y là các biến nguyên và b là một hằng số nguyên QF_LIA Tổ hợp giữa bất đẳng thức của đa thức tuyến tính trên biến số nguyên QF_LRA Tổ hợp bất đẳng thức giữa đa thức tuyến tính trên biến số thực QF_NIA Tổ hợp bất đẳng thức giữa đa thức tuyến tính trên biến số nguyên với ít nhất một đa thức không tuyến tính QF_RDL Logic khác của số thực, ví dụ bất đẳng thức x – y < b với x,y là số thực và b là một hằng số hữu tỷ QF_UF Công thức vô lượng hóa (Unquantified formulas) xây dựng trên ký hiệu của ký tự phân cấp, ký tự hàm, ký tự vị từ không QF_UFIDL Logic khác trên số nguyên nhưng với những ký tự phân cấp, ký tự hàm, ký tự vị từ không được giải thích QF_UFBV Công thức vô lượng hóa trên kiểu bitvectors với ký tự hàm và ký tự vị từ. QF_UFLIA Phép tính số nguyên vô lượng hóa tuyến tính với ký tự phân cấp, ký tự hàm và ký tự vị từ QF_UFLRA Phép tính số thực vô lượng hóa tuyến tính với ký tự phân cấp, ký tự hàm và ký tự vị từ QF_UFNRA Phép tính số thực vô lượng hóa không tuyến tính với ký tự phân cấp, ký tự hàm và ký tự vị từ Xây dựng hệ thống giải bài toán SMT hiệu năng cao – Phần máy trạm 2010 Trang 11 Sinh viên: Hoàng Thế Tùng – K51CNPM – Khoa CNTT - ĐH Công nghệ - ĐH QGHN GVHD: TS. Trương Anh Hoàng GVĐHD: TS. Phạm Ngọc Hùng UFNIA Phép tính số nguyên không tuyến tính với ký tự phân cấp, hàm và vị từ không xác định. Xây dựng hệ thống giải bài toán SMT hiệu năng cao – Phần máy trạm 2010 Sinh viên: Hoàng Thế Tùng – K51CNPM – Khoa CNTT - ĐH Công nghệ - ĐH QGHN GVHD: TS. Trương Anh Hoàng GVĐHD: TS. Phạm Ngọc Hùng Chương 3. Phân tích hệ thống 3.1. Mô hình hệ thống Để giải một bài toán SMT một cách song song giữa các bộ giải, đồng thời đảm bảo được hiệu năng cao cho hệ thống, nhóm nghiên cứu đã đưa ra hướng giải quyết là xây dựng hệ thống giải quyết vấn đề SMT trực tuyến qua mạng. Hệ thống sẽ được chia ra làm ba phần rõ rệt là phần máy khách gửi yêu cầu giải quyết vấn đề, phần máy chủ xử lý và phân phối các vấn đề nhận được, và phần máy trạm giải quyết vấn đề được yêu cầu. Mô hình hệ thống được xây dựng như sau: Hình 3.1 Mô hình hệ thống giải bài toán SMT hiệu năng cao. Việc xây dựng phát triển hệ thống giải quyết vấn đề SMT trực tuyến sẽ đáp ứng được yêu cầu về hiệu năng xử lý đầu vào. Hệ thống sẽ tiếp nhận một lúc nhiều vấn đề Xây dựng hệ thống giải bài toán SMT hiệu năng cao – Phần máy trạm 2010 Trang 13 Sinh viên: Hoàng Thế Tùng – K51CNPM – Khoa CNTT - ĐH Công nghệ - ĐH QGHN GVHD: TS. Trương Anh Hoàng GVĐHD: TS. Phạm Ngọc Hùng từ nhiều người sử dụng trực tuyến. Với mỗi vấn đề nhận được, hệ thống sẽ phân phối cho tất cả các bộ giải và chờ đợi kết quả trả về tối ưu nhất về mặt thời gian để trả về cho phía yêu cầu. Đối với những bộ giải đưa ra kết quả sau sẽ nhận được tín hiệu dừng xử lý vấn đề đó. Do hệ thống được xây dựng trực tuyến, nên việc nhận cùng một lúc nhiều yêu cầu cần xử lý là điều tất yếu, vì vậy, hệ thống máy chủ vừa đảm nhận việc chia một vấn đề cho nhiều máy trạm xử lý, vừa phải xử lý đồng thời cùng lúc nhiều yêu cầu như vậy. Về phía máy trạm, mỗi máy trạm sẽ luôn nhận và xử lý nhiều các vấn đề một lúc và phải trả về kết quả tương ứng cho mỗi vấn đề. Để tiện cho người sử dụng bên phía máy khách, hệ thống cần phải có một thư việc các hàm nhúng API để người sử dụng trực tiếp xây dựng vấn đề SMT và gửi lên phía máy chủ. 3.2. Mô hình ca sử dụng của hệ thống Đối với hai hệ thống con được cài đặt trên máy khách và máy trạm, thì máy chủ được coi như là một tác nhân trung gian giúp duy trì tương tác giữa chúng với nhau. Xây dựng hệ thống giải bài toán SMT hiệu năng cao – Phần máy trạm 2010 Sinh viên: Hoàng Thế Tùng – K51CNPM – Khoa CNTT - ĐH Công nghệ - ĐH QGHN GVHD: TS. Trương Anh Hoàng GVĐHD: TS. Phạm Ngọc Hùng Hình 3.2: Mô hình ca sử dụng của hệ thống Ở phía máy khách (user), người sử dụng sẽ tạo bài toán SMT, hoặc chỉ định cho hệ thống tệp tin SMT cần thiết phải kiểm tra tính thỏa mãn để hệ thống sẽ gửi lên phía máy chủ (server). Sau khi gửi bài toán lên phía máy chủ, hệ thống trên máy khách sẽ chờ cho máy chủ gửi kết quả về và nhận kết quả trả về. Viêc gửi bài toán SMT bên phía máy khách sẽ bao gồm cả việc gửi yêu cầu thời gian ngắt của các bộ giải SMT. Với máy trạm (solver) sau khi kết nối và nhận được tệp tin chứa vấn đề SMT cần giải quyết, hệ thống sẽ gọi lệnh chạy các công cụ giải SMT. Sau khi đưa ra được kết quả, hoặc sau khi nhận được tín hiệu ngắt từ phía máy chủ, máy trạm sẽ gửi lại kết quả đến máy chủ để máy chủ gửi lại phía máy khách. Xây dựng hệ thống giải bài toán SMT hiệu năng cao – Phần máy trạm 2010 Sinh viên: Hoàng Thế Tùng – K51CNPM – Khoa CNTT - ĐH Công nghệ - ĐH QGHN GVHD: TS. Trương Anh Hoàng GVĐHD: TS. Phạm Ngọc Hùng 3.3. Mô hình hoạt động Hình 3.3: Mô hình hoạt động của hệ thống Từ biểu đồ hoạt động của hệ thống, ta có thể xác định được các công việc tuần tự của hệ thống và cách làm việc của hệ thống như sau: Xây dựng hệ thống giải bài toán SMT hiệu năng cao – Phần máy trạm 2010 Trang 16 Sinh viên: Hoàng Thế Tùng – K51CNPM – Khoa CNTT - ĐH Công nghệ - ĐH QGHN GVHD: TS. Trương Anh Hoàng GVĐHD: TS. Phạm Ngọc Hùng Khi hệ thống hoạt động, các máy khách sẽ kết nối đến máy chủ và xây dựng bài toán SMT. Bài toán SMT có thể đã được mô tả bằng tệp tin hay được xây dựng bằng chương trình với việc sử dụng hệ thống được cài đặt trên. Sau khi xác định bài toán SMT, hệ thống máy khách sẽ gửi bài toán toán đó cho máy chủ đồng thời gửi thông tin về thời gian giới hạn thực hiện giải bài toán và chờ đợi kết quả trả về từ phía máy chủ. Máy chủ lắng nghe các kết nối của máy khách, khi nhận được bài toán SMT và tham số về thời gian thực hiện bài toán gửi từ máy khách, máy chủ sẽ phân phối các bài toán đó cho các máy trạm có bộ giải các bài toán SMT đang kết nối đến máy chủ và đón chờ kết quả phản hồi từ máy trạm. Máy trạm sẽ nhận bài toán từ máy chủ và bắt đầu việc thực hiện giải bài toán, khi đó giá trị về trễ thời gian cho mỗi bài toán sẽ được sử dụng. Sau khi hệ thống trên máy trạm gọi các bộ giải để giải quyết vấn đề được đưa tới, sẽ có hai trường hợp xảy ra tiếp sau đó. Trường hợp một là máy trạm đó sẽ giải ra kết quả nhanh nhất và gửi về phía máy chủ kết quả. Trường hợp thứ hai là nhận được tín hiệu ngắt tiến trình (do đã có máy trạm khác gửi được kết quả đến máy chủ), khi đó, một lệnh ngắt tiến trình đang được thực thi sẽ được gọi. Và ở trường hợp này, máy trạm không gửi gì về phía máy chủ nữa. Phía máy khách sau khi nhận được kết quả của hệ thống sẽ hiển thị cho người dùng thấy được kết quả của bài toán mà hệ thống gửi đến. Xây dựng hệ thống giải bài toán SMT hiệu năng cao – Phần máy trạm 2010 Trang 17 Sinh viên: Hoàng Thế Tùng – K51CNPM – Khoa CNTT - ĐH Công nghệ - ĐH QGHN GVHD: TS. Trương Anh Hoàng GVĐHD: TS. Phạm Ngọc Hùng Chương 4. Phương hướng giải quyết vấn đề 4.1. Lựa chọn phương thức kết nối Bài toán được đặt ra là xây dựng hệ thống trực tuyến, vì vậy cần có phương thức kết nối phù hợp với những yêu cầu đã được nêu ra trong phần trên. Có hai phương thức kết nối được đưa ra lựa chọn là xây dựng hệ thống dựa trên các kết nối của webservice hoặc sử dụng kết nối socket. Đối với phương thức kết nối dựa trên webservice, thời gian kết nối sẽ chậm hơn rất nhiều so với kết nối trực tiếp qua socket. Tuy nhiên, với phương thức kết nối socket, ta phải tự xây dựng cách thức giao tiếp giữa máy trạm với máy chủ và máy chủ với máy khách. Do yêu cầu tối ưu về mặt thời gian được quan tâm hàng đầu, vì vậy phương thức được tối ưu cho hệ thống là xây dựng giao tiếp qua kết nối socket. 4.2. Lựa chọn ngôn ngữ lập trình Do phương thức kết nối được lựa chọn là kết nối socket, vì vậy cần một ngôn ngữ lập trình bậc cao để tiện cho việc xây dựng cách thức giao tiếp giữa máy chủ - máy trạm và máy chủ - máy khách. Mặt khác, do các bộ giải có thể được cài đặt trên nhiều nền hệ điều hành khác nhau, nên cần có ngôn ngữ lập trình hỗ trợ việc chạy trên nhiều hệ điều hành khác nhau. Chính vì các lý do này, nhóm nghiên cứu đã quyết định sử dụng ngôn ngữ lập trình Java để xây dựng hệ thống. 4.3. Xác định dữ liệu đầu vào, đầu ra của hệ thống Để tăng hiệu năng của hệ thống giải bài toán SMT, hệ thống có sử dụng nhiều các bộ giải khác nhau. Tuy rằng mỗi bộ giải có một chuẩn đầu vào riêng, nhưng để tiện cho việc giải quyết vấn đề một cách nhanh chóng và hiệu quả, hệ thống chỉ sử dụng đầu vào bài toán SMT theo chuẩn của SMT-LIB. Hiện nay, hầu hết các công cụ giải các bài toán đều hỗ trợ chuẩn SMT-LIB, vì vậy, để tránh việc phải chuẩn hóa đầu vào cho mỗi bài toán nhằm đảm bảo hiệu năng cao về mặt thời gian, hệ thống yêu cầu Xây dựng hệ thống giải bài toán SMT hiệu năng cao – Phần máy trạm 2010 Trang 18 Sinh viên: Hoàng Thế Tùng – K51CNPM – Khoa CNTT - ĐH Công nghệ - ĐH QGHN GVHD: TS. Trương Anh Hoàng GVĐHD: TS. Phạm Ngọc Hùng đầu vào của người sử dụng phải đáp ứng nghiêm ngặt các điều kiện xây dựng một bài toán dưới quy chẩn của SMT-LIB. Hệ thống được chia ra thành ba thành phần với chức năng và vai trò khác nhau, do đó với mỗi hệ thống con sẽ có một đầu vào đầu ra riêng ứng với từng chức năng của hệ thống con đó. Với hệ thống được cài đặt trên máy khách, người dùng sẽ đưa vào tệp tin chứa bài toán SMT hoặc xây dựng bài toán SMT dựa trên các hàm nhúng API mà hệ thống xây dựng. Bài toán sẽ được gửi lên máy chủ và chờ máy chủ phản hồi về kết quả. Đối với hệ thống được cài đặt trên máy chủ, đầu vào nhận từ máy khách (bài toán SMT) sẽ là đầu ra chuyển tới máy trạm. Và đầu vào thứ hai là kết quả nhận được từ máy trạm cũng là đầu ra để chuyển tới máy khách. Trên máy trạm có duy nhất một bộ dữ liệu đầu vào là bài toán SMT nhận được từ máy chủ và một bộ dữ liệu đầu ra duy nhất là kết quả của việc giải bài toán SMT đó. Xây dựng hệ thống giải bài toán SMT hiệu năng cao – Phần máy trạm 2010 Trang 19 Sinh viên: Hoàng Thế Tùng – K51CNPM – Khoa CNTT - ĐH Công nghệ - ĐH QGHN GVHD: TS. Trương Anh Hoàng GVĐHD: TS. Phạm Ngọc Hùng Chương 5. Mô tả hệ thống Hệ thống giải bài toán SMT hiệu năng cao được chia làm ba hệ thống con với chức năng và tác dụng riêng. Trong giới hạn tài của tài liệu này, hệ thống con cài đặt trên máy chủ sẽ không được đề cập đến. Trong phần này, hệ thống cài đặt trên máy khách và máy trạm sẽ đươc giải thích và mô tả chi tiết. 5.1. Quy định cách thức giao tiếp với máy chủ Do hệ thống hoàn toàn được xây dựng bằng phương pháp kết nối socket, vì vậy cần phải có một cách thức giao tiếp phù hợp giữa các hệ thống con với nhau. Dựa trên ý tưởng của ngôn ngữ XML, nhóm nghiên cứu đã đưa ra và thống nhất việc sử dụng các thẻ đươc quy định sẵn để giao tiếp giữa các hệ thống con với nhau. Các thẻ sẽ được định nghĩa đúng như quy chuẩn của XML với quy định sau: - Thẻ mở sẽ có dạng - Thẻ đóng sẽ có dạng Đối với thẻ đơn thì không cần có thẻ đóng. Cụ thể, các thẻ được quy định trong hệ thống như sau: - Cặp thẻ : thể hiện sự bắt tay kết nối giữa các thành phần trong hệ thống với nhau. - Cặp thẻ : thể hiện việc bắt đầu chuyển dữ liệu từ tệp tin chứa bài toán SMT giữa các hệ thống con trong hệ thống - Cặp thẻ : thể hiện nội dung kết quả của bài toán SMT được trả về - Thẻ đơn : là tín hiệu ngắt kết nối được máy chủ gửi đến máy trạm - Thẻ đơn : thể thiện sự kết thúc kết nối giữa người dùng với máy chủ Xây dựng hệ thống giải bài toán SMT hiệu năng cao – Phần máy trạm 2010 Trang 20 Sinh viên: Hoàng Thế Tùng – K51CNPM – Khoa CNTT - ĐH Công nghệ - ĐH QGHN GVHD: TS. Trương Anh Hoàng GVĐHD: TS. Phạm Ngọc Hùng 5.2. Phần máy khách 5.2.1. Quy định giao tiếp với máy chủ Yêu cầu chính cho hệ thống cài đặt trên máy khách là gửi bài toán SMT và nhận về kết quả của bài toán ấy. Quy trình kết nối của máy khách với máy chủ sẽ như sau: - Sau khi kết nối được máy chủ, máy khách sẽ đưa ra một loạt thẻ chào hỏi [Name] - Sau chuỗi các thẻ được gửi lên máy chủ, máy khách sẽ chờ đến khi máy chủ đáp lại “OK”. Sau đó, hệ thống trên máy khách sẽ thực hiện tiến trình gửi trễ thời gian (time out) giải bài toán SMT cần giải. Trễ thời gian này được người sử dụng quy định và đưa vào.Trong trường hợp người dùng không thiết lập thông tin này, thì hệ thống sẽ gửi lên thời gian mặc định là 30 giây. Quá trình gửi trễ thời gian được quy định như sau: [trễ thời gian] - Sau khi gửi lên thời gian giới hạn thực thi của bài toán, hệ thống sẽ tiếp tục gửi lên tệp tin dữ liệu chứa nội dung bài toán. Quy trình gửi tệp tin dữ liệu cũng được theo quy định sau: [Nội dung dữ liệu chuyển lên] - Sau quá trình gửi tệp tin dữ liệu thành công, hệ thống trên máy khách chờ kết quả của máy chủ trả về. Khi nhận được tín hiệu trả về ( tín hiệu kết quả trả về được quy định là thẻ mở ) hệ thống sẽ nhận cho đến khi có tín hiệu kết thúc (thẻ đóng ): [nội dung kết quả trả về] Xây dựng hệ thống giải bài toán SMT hiệu năng cao – Phần máy trạm 2010 Trang 21 Sinh viên: Hoàng Thế Tùng – K51CNPM – Khoa CNTT - ĐH Công nghệ - ĐH QGHN GVHD: TS. Trương Anh Hoàng GVĐHD: TS. Phạm Ngọc Hùng - Sau khi đã nhận được kết quả, máy khách sẽ chủ động ngắt kết nối đến máy chủ. Như đã đề cập ở trên, để tránh việc lãng phí thời gian của hệ thống cho việc chuẩn hóa đầu vào, hệ thống yêu cầu người sử dụng đưa vào đầu vào theo đúng chuẩn của SMT-LIB. Vấn đề đặt ra ở đây là không phải lúc nào người sử dụng cũng có sẵn bài toán SMT được tổ chức theo quy chuẩn của STM-LIB. Chính vì vậy, hệ thống cần phải xây dựng các hàm API để người dùng có thể xây dựng bài toán theo đúng chuẩn định dạng của SMT-LIB. Dựa vào các định nghĩa và quy chuẩn về đầu vào của bài toán SMT theo chuẩn SMT-LIB (được nêu trong phần kiến thức nền tảng), hệ thống đã đưa ra các hàm API để thuận tiện cho người sử dụng đưa vào. 5.2.2. Các lớp của hệ thống máy khách 5.2.2.1. Lớp config: lớp này được xây dựng để chứa các quy ước việc giao tiếp cũng như các thành phần mặc định của hệ thống như các thẻ, tên tệp tin đầu vào mặc định, thời gian ngắt mặc định, tên tệp tin chứa dữ liệu được trả về 5.2.2.2. Lớp Client: Có chức năng mở kết nối, gửi bài toán từ tệp tin lên máy chủ và nhận về kết quả. 5.2.2.3. Lớp NetSolver: bao gồm các hàm thiết lập tùy chọn cho người sử dụng. Cụ thể: - void setPath (String Path): Thiết lập đường dẫn cho tệp tin đầu vào. Có thể là một đường dẫn đến một tệp tin sẽ được xây dựng sau đó bởi chính người sử dụng. Hoặc cũng có thể là một tệp tin đã chứa nội dung bài toán SMT cân gửi lên máy chủ. - void setOutput (String Path): Thiết lập đường dẫn cho tệp tin lưu giữ kết quả được trả về. Xin lưu ý rằng việc thiết lập đường dẫn bao gồm cả tên tệp tin. - void Solve (): thực thi việc gửi và nhận bài toán SMT. Thực chất hàm này chỉ gọi một đối tượng của lớp Client và thực thi đối tượng ấy. Xây dựng hệ thống giải bài toán SMT hiệu năng cao – Phần máy trạm 2010 Trang 22 Sinh viên: Hoàng Thế Tùng – K51CNPM – Khoa CNTT - ĐH Công nghệ - ĐH QGHN GVHD: TS. Trương Anh Hoàng GVĐHD: TS. Phạm Ngọc Hùng Việc xây dựng bài toán SMT sẽ dựa trên các hàm API được xây dựng bởi các lớp sau. Xin lưu ý rằng các hàm API được xây dựng hoàn toàn dựa trên bộ luật cú pháp của ngôn ngữ đầu vào SMT đã được đưa ra ở trên. 5.2.2.4. Lớp Bench_attribute: Được xây dựng dựa trên bảng 5. - Bench_attribute (String Bench_name) : Định nghĩa một thuộc tính Benchmark đầu vào với tên là Bench_name. - Void setLogic (String LogicName): thiết lập tên logic của Benchmark - void setStatus (String stt) : thiết lập thuộc tính Status cho Benchmark - void setFormulas (Formula F): thiết lập Formula cho Benchmark. - void setAssumtion (Formula f): thiết lập Assumtion cho Benchmark - void setAnnotation (annotation an): thiết lập Annotation cho Benchmark - void setNotes (String note): thiết lập Note cho Benchmark - void setExtrasorts (Identifier[] id): Thiết lập Extrasorts cho Benchmark - void setExtrafuns (func_decl[] funcs): Thiết lập Extrafuns cho Benchmark - void setExtrapreds (pred_decl[] preds): thiết lập Extrapreds cho Benchmark - void printBench (): ghi Benchmark vừa thiết lập ra tệp tin được chỉ định 5.2.2.5. Lớp Formula: Được xây dựng dựa trên bảng 2 để đưa ra các công thức trong bài toán SMT, Các hàm hỗ trợ xây dựng bao gồm: - Formula (boolean b): khai báo một Formula với giá trị là giá trị của một biến logic - Formula (fvarDecl fvar): Khai báo một Formula với giá trị là một khai báo hàm. - Formula (Identifier id): khai báo một Formula với giá trị là một định danh Identifier. Xây dựng hệ thống giải bài toán SMT hiệu năng cao – Phần máy trạm 2010 Trang 23 Sinh viên: Hoàng Thế Tùng – K51CNPM – Khoa CNTT - ĐH Công nghệ - ĐH QGHN GVHD: TS. Trương Anh Hoàng GVĐHD: TS. Phạm Ngọc Hùng - Formula (Identifier id, Term te[]): khai báo một Formula từ một định danh Identifier và một mảng không rỗng các phần tử Term - Formula (Arith_symb ar, Term te[]): khai báo một Formula từ một (hoặc một chuỗi) các phép toán và một mảng không rỗng các phần tử Term - Formula (Term te[]): khai báo một Formula với từ khóa “distinct” và một mảng không rỗng các phần từ Term - void Setvalue (String val): đặt giá trị của Formula theo tùy biến ( khi công thức của người sử dụng không thể xây dựng dựa trên các hàm API trong lớp formula) - Formula orOperator (Formula a1, Formula a2): phép “or” giữa hai công thức - Formula xorOperator (Formula a1, Formula a2): phép “xor” giữa hai công thức - Formula iffOperator (Formula a1, Formula a2): phép “iff” giữa hai công thức - Formula impliesOperator (Formula a1, Formula a2): phép “implies” giữa hai công thức - Formula existsFomular (quant_var[] qv, Formula f): công thức được xây dựng với từ khóa “exists” - Formula forallFomular (quant_var[] qv, Formula f): công thức được xây dựng với từ khóa “forall” - Formula letFormula (varDecl var,Term t, Formula f): công thức được xây dựng với từ khóa “let” - Formula fletFormula (fvarDecl fvar,Formula f1, Formula f2): công thức được xây dựng với từ khóa “flet” 5.2.2.6. Lớp func_decl: khai báo một hàm của bài toán SMT, được xây dựng dựa trên (3) bảng 3. - func_decl (double d, Identifier id): khai báo một hàm từ giá trị một số thực và định danh Identifier Xây dựng hệ thống giải bài toán SMT hiệu năng cao – Phần máy trạm 2010 Trang 24 Sinh viên: Hoàng Thế Tùng – K51CNPM – Khoa CNTT - ĐH Công nghệ - ĐH QGHN GVHD: TS. Trương Anh Hoàng GVĐHD: TS. Phạm Ngọc Hùng - func_decl (Identifier id1, Identifier[] id): khai báo một hàm từ giá trị một định danh Identifier và một mảng không rỗng định danh Identifier - func_decl (Arith_symb ar,Identifier[] id): khai báo một hàm từ một hoặc chuỗi các phép toán và mảng không rỗng các định danh id 5.2.2.7. Lớp pred_decl: khai báo một vị từ của bài toán SMT, được xây dựng dựa trên (4) bảng 3 - pred_decl (Identifier[] id): khai báo một vị từ với giá trị của một dịnh danh id - pred_decl (Arith_symb ar, Identifier[] id): khai báo một vị từ từ một (hoặc một chuỗi) các phép toán ar và một mảng các định danh id - pred_decl (Identifier id1, Identifier[] id): khai báo một vị từ từ một đinh danh id1 và mảng các định danh id 5.2.2.8. Lớp Term: được xây dựng dựa trên bảng 1. - Term (varDecl v): khái báo một term từ khai báo của một biến v - Term (double d): khai báo một term từ giá trị của một số thực d - Term (Identifier i): khai báo một term từ một đinh danh i - Term iteOperator (Formula f, Term t1, Term t2): toán tử “ite” của Term 5.2.2.9. Lớp annotation: được xây dựng dựa trên (15) bảng 1, dùng để khai báo một ghi chú trong bài toán SMT. Có hai cách khai báo như sau: - annotation (String attribute): khai báo ghi chú với chuỗi ký tự attribute - annotation (String attribute, String user_value): khai báo ghi chú với chuỗi ký tự thuộc tính attribute và user_value 5.2.2.10. Lớp varDecl: Dùng để khai báo một biến trong bài toán SMT. Được xây dựng dựa trên (8) bảng 1 - varDecl (String v): khai báo biến với chuỗi v 5.2.2.11. Lớp fvarDecl: được xây dựng dựa trên (9) bảng 1. - fvarDecl (String fv): dùng để khai báo fvar với chuỗi fv Xây dựng hệ thống giải bài toán SMT hiệu năng cao – Phần máy trạm 2010 Trang 25 Sinh viên: Hoàng Thế Tùng – K51CNPM – Khoa CNTT - ĐH Công nghệ - ĐH QGHN GVHD: TS. Trương Anh Hoàng GVĐHD: TS. Phạm Ngọc Hùng 5.2.2.12. Lớp Arith_symb: dùng để khai báo một hoặc một chuỗi các tự như đã được định nghĩa trong (10) bảng 1. - Arith_symb (String s): khai báo một hoặc 1 chuỗi các ký tự. 5.2.2.13. Lớp Identifier: được xây dựng dựa trên (7) bảng 1, để đưa ra các định danh cho bài toán SMT. - Identifier (String simpleIdentifier): khai báo định danh từ một định danh đơn giản (simple_identifier được định nghĩa trong (1) bảng 1) - Identifier (String simleID, long num): khai báo định danh từ một định danh đơn giản và một số nguyên) - Identifier (String simpleId,long num1, long[] num2): khai báo định danh từ một định danh đơn giản và một số nguyên cùng một mảng số nguyên. 5.2.2.14. Lớp quant_var: được xây dựng dựa trên (5) của bảng 2. - quant_var (varDecl var,Identifier id): khai báo quant_vả từ khai báo biến var và định danh id. Trên đây là các lớp và các hàm được xây dựng để hỗ trợ người dùng xây dựng bài toán SMT trước khi gửi lên máy chủ. Để xây dựng được một bài toán SMT đúng đắn bằng việc sử dụng các hàm trên, người dùng cần tuân thủ nghiêm ngặt các định nghĩa, cách khai báo các thành phần đã được đưa ra ở trên. Chương trình không hỗ trợ việc kiểm tra những gì người dùng nhập vào. Ví dụ với khai báo một đối tượng của lớp Arith_symb, người dùng buộc phải đưa vào một hoặc một chuỗi các ký tự thuộc tập các ký tự {=, >, <, &, @, #, +, -, *, /, %, |, ~ } Nếu người dùng đưa vào sai chuỗi được thiết lập từ các ký tự trên, tệp tin chứa bài toán SMT vẫn được sinh ra nhưng sẽ không đúng chuẩn và khi đó sẽ không có lời giải. Ngoài ra, do một số lớp có sử dụng đối tượng của lớp khác, nên người dùng cũng cần phải tuân thủ theo đúng việc khai báo các đối tượng của các lớp. Ví dụ, trước khi có được một đối tượng của lớp Bench_attribute, người dùng cần phải khai báo và xây dựng các đối tượng thuộc lớp Formula, annotation, funs_decl… Xây dựng hệ thống giải bài toán SMT hiệu năng cao – Phần máy trạm 2010 Trang 26 Sinh viên: Hoàng Thế Tùng – K51CNPM – Khoa CNTT - ĐH Công nghệ - ĐH QGHN GVHD: TS. Trương Anh Hoàng GVĐHD: TS. Phạm Ngọc Hùng 5.3. Phần máy trạm Chức năng của hệ thống được cài đặt trên máy trạm là nhận về bài toán SMT được máy chủ chuyển tới. Sau khi nhận được bài toán, hệ thống sẽ gọi chương trình để giải bài toán ấy. Sau khi có được lời giải của bài toán, hệ thống sẽ gửi lại phía máy chủ lởi giải đó. Trong trường hợp có máy trạm khác đã giải quyết xong bài toán ấy và gửi lên máy chủ trước khi chương trình giải được cài đặt trên hệ thống giải quyết xong bài toán, máy chủ sẽ gửi về một tín hiệu ngắt tiến trình đang chạy và không hệ thống sẽ dừng chương trình đang chạy và không gửi gì về phía máy chủ nữa. 5.3.1. Cơ chế làm việc của máy trạm Để đáp ứng nhu cầu nhận và giải liên tục các bài toán từ phía máy chủ, hệ thống máy trạm cần có cơ chế phù hợp để vừa có thể nhận liên tục dữ liệu từ máy chủ, vừa có thể thực thi việc giải bài toán (đã nhận xong từ phía máy chủ) và vừa có thể đảm bảo việc gửi lại chính xác kết quả của bài toán tương ứng sau khi đã giải xong. Để đáp ứng được yêu cầu này, hệ thống máy trạm cần được tổ chức các tác vụ thành các luồng tiến trình khác nhau. Trong ngôn ngữ lập trình Java, một luồng là một thuộc tính duy nhất [8] Nó là đơn vị nhỏ nhất của đoạn mã có thể thi hành được mà thực hiện một công việc riêng biệt. Một ứng dụng được viết bởi ngôn ngữ lập trình java có thể bao hàm nhiều luồng. Mỗi luồng được đăng ký một công việc riêng biệt, mà chúng được thực thi đồng thời với các luồng khác. Đa luồng giữ thời gian nhàn rỗi của hệ thống thành nhỏ nhất. Điều này cho phép các chương trình được viết bởi java có hiệu quả cao với sự tận dụng CPU là tối đa. Mỗi phần của chương trình được gọi một luồng, mỗi luồng định nghĩa một đường dẫn khác nhau của sự thực hiện. Việc phân luồng được ứng dụng trong hệ thống máy trạm sẽ được đề cập cụ thể hơn ở những phần sau của tài liệu. Xây dựng hệ thống giải bài toán SMT hiệu năng cao – Phần máy trạm 2010 Trang 27 Sinh viên: Hoàng Thế Tùng – K51CNPM – Khoa CNTT - ĐH Công nghệ - ĐH QGHN GVHD: TS. Trương Anh Hoàng GVĐHD: TS. Phạm Ngọc Hùng 5.3.2. Quy định giao tiếp với máy chủ Do toàn bộ hệ thống được cài đặt trực tuyến, nên trường hợp nhận được nhiều bài toán tại một thời điểm là hoàn toàn có thể xảy ra. Để xác định đúng kết quả của bài toán tương ứng với bài toán nhận được trước đó, cần có một sự đánh dấu thứ tự cho các bài toán ấy. Nhóm nghiên cứu đã đưa ra và thống nhất sử dụng mã sessionID được tạo ra bởi máy chủ và được gửi kèm với nội dung. Việc sử dụng mã sessionID còn giúp hệ thống tránh được sự nhầm lẫn giữa hai hay nhiều bài toán cùng được gửi lên một lúc. Quy trình kết nối giữu máy trạm và máy chủ sẽ như sau: - Sau khi kết nối đến máy chủ, hệ thống cài đặt trên máy trạm sẽ gửi lời chào hỏi đến máy chủ thông qua thẻ cặp thẻ chào hỏi như sau: [Tên chương trình giải bài toán SMT] - Máy chủ sau khi nhận được lời chào sẽ gửi đến nội dung của bài toán SMT mà máy khách đã gửi lên yêu cầu giải. Việc gửi dữ liệu cũng được bắt đầu bằng thẻ mở và kèm thêm mã sessionID trước đó. Mỗi dòng dữ liệu của bài toán ấy gửi lên cũng sẽ kèm theo sessionID của bài toán đó cho đến khi thẻ đóng được gửi lên: sessionID | sessionID | [nội dung dòng dữ liệu thứ 1] …. sessionID | [nội dung dòng dữ liệu thứ n] sessionID | - Sauk hi nhận được dữ liệu từ tệp tin chứa bài toán SMT, hệ thống sẽ nhận trễ thời gian giới hạn thực thi bài toán ấy. Việc nhận trễ thời gian giới hạn này được quy định như sau: sessionID | sessionID | [trễ thời gian] sessionID | Xây dựng hệ thống giải bài toán SMT hiệu năng cao – Phần máy trạm 2010 Trang 28 Sinh viên: Hoàng Thế Tùng – K51CNPM – Khoa CNTT - ĐH Công nghệ - ĐH QGHN GVHD: TS. Trương Anh Hoàng GVĐHD: TS. Phạm Ngọc Hùng - Sau khi đã có dữ liệu đầy đủ của một bài toán hệt thống sẽ gọi chương trình giải bài toán SMT để thực hiện việc giải bài toán đó. Sau khi có kết quả, hệ thống sẽ gửi lại máy chủ theo quy chuẩn sau: sessionID | sessionID | [nội dung dòng kết quả trả về thứ 1] ….. sessionID | [nội dung dòng kết quả trả về thứ 2] sessionID | - Sau khi gửi về kết quả, hệ thống sẽ vẫn tiếp tục nhận hoặc chờ bài toán tiếp theo mà máy chủ sẽ gửi đến. 5.3.3. Hoạt động của hệ thống máy trạm Với mỗi bài toán, hệ thống sẽ ghi vào một tệp tin có tên chính là sessionID của bài toán ấy với phần mở rộng là smt. Và lời giải của bài toán đó cũng sẽ được lưu trữ vào tệp tin có tên là sessionID. Hiện tại, trên thế giới có nhiều các bộ giải bài toán SMT, tuy nhiên, trong khuôn khổ luận văn này, hệ thống chỉ cài đặt và thử nghiệm trên hai bộ giải là yices của SRI international và Z3 của Microsoft. Mỗi bộ giải sẽ được cài đặt trên một máy trạm khác nhau cùng với hệ thống được xây dựng như đã trình bày ở trên. Do các bộ giải là các chương trình chạy độc lập, nên hệ thống cần có lời gọi thực thi tới chúng. Tuy ngôn ngữ lập trình Java có hỗ trợ việc gọi một lệnh của hệ điều hành, tuy nhiên để có thể kết xuất được kết quả ra một tệp tin, hệ thống sử dụng quá trình chuyển hướng kết xuất của chính hệ điều hành được sử dụng. Do điệu kiện không cho phép, hiện tại hệ thống cài đặt trên máy trạm mới chỉ được triển khai và kiểm thử trên các máy sử dụng hề điều hành windows và hệ hiều hành có nhân Linux. Và để sử dụng được chuyển hướng kết xuất trên mỗi hệ điều hành khác nhau, hệ thống đã xây dựng một tệp tin thực thi để hỗ trợ hệ thống gọi các bộ giải SMT. Nội dung tệp tin hỗ trợ đó như sau: - Đối với tệp tin .bat được cài đặt trên hệ điều hành windows @echo off [path]\yices.exe -e -tm %2 -smt [path]\%1.smt > [path]\%1.txt echo done! Xây dựng hệ thống giải bài toán SMT hiệu năng cao – Phần máy trạm 2010 Trang 29 Sinh viên: Hoàng Thế Tùng – K51CNPM – Khoa CNTT - ĐH Công nghệ - ĐH QGHN GVHD: TS. Trương Anh Hoàng GVĐHD: TS. Phạm Ngọc Hùng - Đối với tệp tin thực thi (tệp tin được thiết lập thuộc tính thực thi) được cài đặt trên hệ điều hành Linux: [path]/z3.exe /m /t:$2 /smt [path]/$1.smt > [path]/$1.txt echo done! - Ở đây, [path] là đường dẫn chỉ đến tệp tin (thư mục) của chương trình bộ giải SMT. %1 sẽ được nhận vào là sesstionID của bài toán. %2 sẽ là tham số thời gian ngắt của chương trình (được tính bằng giây). - Với bộ giải yices, ta sử dụng tham số -e để đưa ra kết quả thỏa mãn nếu bài toán đó khả thi. Tham số –tm để xác định trễ thời gian ngắt timeout, và tham số -smt để xác định đầu vào của bộ giải là một tệp tin theo chuẩn SMT-LIB. - Với bộ giải z3, tương tự ta cũng có các tham số /m tương đương với –e, /t: tương đương với –tm và /smt tương đương với –smt của bộ giải yices. - Cả hai bộ giải yices và z3 đều hỗ trợ cài đặt trên cả windows và Linux, vì vậy, tùy vào điệu kiện của máy trạm, tệp tin thực thi sẽ được sửa cho phù hợp với hệ điều hành cài đặt (không nhất thiết cài đặt yices trên hệ điều hành windows hoặc z3 trên linux). Xây dựng hệ thống giải bài toán SMT hiệu năng cao – Phần máy trạm 2010 Sinh viên: Hoàng Thế Tùng – K51CNPM – Khoa CNTT - ĐH Công nghệ - ĐH QGHN GVHD: TS. Trương Anh Hoàng GVĐHD: TS. Phạm Ngọc Hùng 5.3.4. Các lớp của hệ thống máy trạm 5.3.4.1. Biểu đồ lớp của hệ thống Hình 5.1: Biểu đồ lớp của hệ thống máy trạm 5.3.4.2. Lớp config Lớp config chứa những quy định về địa chỉ, cổng và các thẻ giao tiếp với máy chủ của máy trạm. Ngoài ra, lớp này còn quy định tên và đường dẫn của bộ giải được cài đặt trên máy trạm. Việc xây dựng lớp config sẽ khiến cho việc quản lý cấu hình cho hệ thống dễ dàng hơn. 5.3.4.3. Lớp sessionID Để xác định được đúng dữ liệu của mỗi bài toán, tránh nhầm lẫn khi nhận nhiều dòng dữ liệu từ nhiều bài toán cùng một lúc, và để gửi đúng lời giải cho bài toán đưa ra, ngoài việc quy định mã sessionID cho mỗi bài toán, cần phải tổ chức dữ liệu hợp lý. Đối với kết quả của một bài toán được gửi đến, ta chỉ cần đưa kết quả đó vào một Xây dựng hệ thống giải bài toán SMT hiệu năng cao – Phần máy trạm 2010 Trang 31 Sinh viên: Hoàng Thế Tùng – K51CNPM – Khoa CNTT - ĐH Công nghệ - ĐH QGHN GVHD: TS. Trương Anh Hoàng GVĐHD: TS. Phạm Ngọc Hùng tệp tin với trên tệp tin là sessionID của bài toán đó, rồi gửi lại máy chủ session ID kèm nội dung tệp tin đó. Còn đối với việc đọc dữ liệu đầu vào, hệ thống xây dựng một lớp sessionID và có một mảng đối tượng của lớp dữ liệu này. Lớp session ID sẽ bao gồm các thuộc tính sau: - sessionID: là thuộc tính lưu lại sessionID - content: Thuộc tính lưu lại nội dung của bài toán tương ứng với sessionID được gửi lên. - Timeout: thời gian ngắt của bài toán được gửi lên - runSolver: tiến trình gọi một bộ giải để giải bài toán được gửi lên. Mỗi đối tượng của lớp sessionID sẽ tương ứng với một bài toán được gửi lên. Nội dung của bài toán sẽ được lưu trong thuộc tính content của lớp. Mỗi tiến trình xử lý sẽ được khai báo bởi thuộc tính runSolver của lớp. Việc đưa tiến trình xử lý gọi bộ giải để giải bài toán vào thành thuộc tính của lớp sessionID nhằm giải quyết vấn đề ngắt tiến trình khi có yêu cầu từ phía máy chủ. Khi máy chủ nhận được kết quả của cùng bài toán từ máy trạm có cài đặt bộ giải khác và gửi lên tín hiệu ngắt cho máy trạm đang còn thực thi tiến trình giải bài toán ấy, thì việc ngắt tiến trình tương ứng với sessionID mà máy chủ gửi lên sẽ được gọi. 5.3.4.4. Lớp Solver Lớp này được xây dựng để thực hiện nhiệm vụ mở kết nối và có lời chào hỏi trước khi thực hiện các thao tác khác sau đó. 5.3.4.5. Lớp ReadThread Lớp này được xây dựng để đáp ứng việc đọc dữ liệu từ máy chủ gửi lên của máy trạm. Sau khi kết nối được giữa máy chủ và máy trạm, hệ thống trên máy trạm luôn đảm bảo việc lắng nghe các tín hiệu từ máy chủ. Để đảm bảo rằng, luôn có thể nhận được nhiều dòng dữ liệu từ nhiều các bài toán khác nhau cùng một lúc. Xây dựng hệ thống giải bài toán SMT hiệu năng cao – Phần máy trạm 2010 Trang 32 Sinh viên: Hoàng Thế Tùng – K51CNPM – Khoa CNTT - ĐH Công nghệ - ĐH QGHN GVHD: TS. Trương Anh Hoàng GVĐHD: TS. Phạm Ngọc Hùng Vấn đề kiểm soát bộ nhớ (mảng các đối tượng sessionID) sẽ được đánh dấu bằng việc bài toán đã được giải xong hay chưa. Khi một sessionID mới được nhận về, một phần tử của mảng các đối tượng sessionID mà có trạng thái rảnh sẽ được khởi tạo và lưu lại. khi đó, trạng thái tương ứng của sessionID được bật là bận. Do việc giải phóng bộ nhớ phụ thuộc vào việc bài toán được giải xong hay chưa, vì vậy trạng thái của sessionID được khai báo trong lớp các đối tượng tiến trình ghi dữ liệu. Tức là tương ứng với mảng các đối tượng của lớp sesstionID, sẽ có một mảng các đối tượng ghi dữ liệu kết quả trả về được khởi tạo. while (true){ _return = in.readLine(); //Đọc dữ liệu gửi lên từ phía máy chủ if (_return.indexOf(config._tag_file)>=0){ openFile(_return); // Tạo mới một tệp tin lưu trữ bài toán mới } else if(_return.indexOf(config._closetag_file)>=0){ } else if(_return.indexOf(config._tag_timeout)>=0){ sec[k].setTimeout(_return.substring(p+1));//đặt trễ thời gian cho bài toán closeFile(_return); // } else if(_return.indexOf(config._tag_destroy)>=0){ k = pos(_return); // xác định bài toán cần ngắt interruptSolver(k); // Ngắt tiến trình xử lý bài toán } else { k = pos(_return); String content = _return.substring(p+1); sec[k].content += content + "\n"; //lưu lại nội dung bài toán } } Xây dựng hệ thống giải bài toán SMT hiệu năng cao – Phần máy trạm 2010 Trang 33 Sinh viên: Hoàng Thế Tùng – K51CNPM – Khoa CNTT - ĐH Công nghệ - ĐH QGHN GVHD: TS. Trương Anh Hoàng GVĐHD: TS. Phạm Ngọc Hùng Ngay khi tiếp nhận một bài toán mới (nhận được thẻ mở tệp tin), đối tượng của lớp ghi dữ liệu tương ứng sẽ được đặt thuộc tính là bận. Việc quản lý thiết lập thuộc tính bận hay rảnh này sẽ giúp cho hệ thống giới hạn được số lượng phần tử mảng luồng đọc ghi dữ liệu. Trong trường hợp không quản lý trạng thái rảnh hay bận của các đối tượng này, mỗi khi nhận được bài toán mới, hệ thống sẽ sinh ra một phần tử của mảng các đối tượng ghi dữ liệu. Như vậy, các đối tượng ghi xong và được giải phóng sẽ không được sử dụng lại, gây ra lãng phí tài nguyên. Việc gọi tiến trình thực thi các bộ giải sẽ được thực hiện khi việc nhận dữ liệu về bài toán được hoàn tất. Sau khi nhận được tham số trễ thời gian, hệ thống sẽ tiến hành ghi dữ liệu ra tệp tin và gọi lệnh gọi bộ giải để giải quyết bài toán. Và khi đó, tiến trình này sẽ được truyền cho đối tượng của lớp ghi dữ liệu để nhận và trả về kết quả. String command = config._command + " " + sec[k].sectionID + " " + sec[k].getTimeout(); sec[k].runSolver = Runtime.getRuntime().exec(command); wt[k].setProc(sec[k].runSolver); public ReadThread(Socket sk){ try { for (int i = 0;i<config.Max_connection;i++) { sec[i] = new section(); //khởi tạo mảng các đối tượng sessionID wt[i] = new WriteThread(sk); //Khởi tạo mảng các đối tượng ghi dữ liệu } } catch (IOException e){ e.printStackTrace(); } } Xây dựng hệ thống giải bài toán SMT hiệu năng cao – Phần máy trạm 2010 Trang 34 Sinh viên: Hoàng Thế Tùng – K51CNPM – Khoa CNTT - ĐH Công nghệ - ĐH QGHN GVHD: TS. Trương Anh Hoàng GVĐHD: TS. Phạm Ngọc Hùng 5.3.4.6. Lớp WriteThread Việc chờ kết quả để gửi trả về phía máy chủ cần được xây dựng thành một luồng làm việc riêng biệt bởi đi kèm với việc gửi trả về kết quả, là việc trả về không gian bộ nhớ cho thành phần đối tượng thuộc lớp sessionID. Ngoài ra, luồng này còn luôn sẵn sàng để ngắt tiến trình đang thực hiện nếu có yêu cầu từ phía máy chủ gửi lên. Ngoài ra, tính cần thiết phải đưa thành một luồng làm việc riêng biệt còn thể hiện ở việc đáp ứng yêu cầu luôn lắng nghe dữ liệu gửi lên từ phía máy chủ. Đối với việc gọi và thực thi bộ giải, sau khi dữ liệu được ghi vào tệp tin hoàn tất, một tiến trình (thành phần của lớp sessionID) sẽ gọi công cụ giải được cài đặt trên máy trạm. Khi nhận được tín hiệu “done!” xuất hiện từ luồng dữ liệu ra của tiến trình, bài toán đã được giải xong và quá trình gửi dữ liệu về máy chủ được bắt đầu. Cùng với đó, bộ nhớ chứa dữ liệu của bài toán được thực thi xong sẽ được giải phóng. Việc ngắt một tiến trình khi nhận được yêu cầu ngắt từ phía máy chủ cũng được đẩy sang phương thức của lớp này. Bởi lẽ, việc ngắt tiến trình còn liên quan đến việc thiết lập trạng thái rảnh cho đối tượng. 5.4. Tổng kết Mỗi hệ thống con của hệ thống giải bài toán SMT hiệu năng cao mang vai trò riêng và đều rất quan trọng với hệ thống. Việc xây dựng tốt hệ thống máy khách sẽ public void interruptSolver(){ this.proc.destroy(); //ngắt tiến trình đang xử lý this.active = false; // trả về trạng thái rảnh } if (line.equals("done!")){ sendFile(); // gửi tệp tin kết quả this.active = false; // thiết lập trạng thái rảnh cho đối tượng this.stop(); } Xây dựng hệ thống giải bài toán SMT hiệu năng cao – Phần máy trạm 2010 Trang 35 Sinh viên: Hoàng Thế Tùng – K51CNPM – Khoa CNTT - ĐH Công nghệ - ĐH QGHN GVHD: TS. Trương Anh Hoàng GVĐHD: TS. Phạm Ngọc Hùng giúp người dùng thuận tiện hơn nhiều trong quá trình xây dựng bài toán SMT. Còn đối với hệ thống máy trạm, nếu được xây dựng tốt sẽ giúp cho hiệu năng xử lý bài toán SMT sẽ tăng cao, giúp cho hiệu năng toàn hệ thống được cải thiện. Xây dựng hệ thống giải bài toán SMT hiệu năng cao – Phần máy trạm 2010 Trang 36 Sinh viên: Hoàng Thế Tùng – K51CNPM – Khoa CNTT - ĐH Công nghệ - ĐH QGHN GVHD: TS. Trương Anh Hoàng GVĐHD: TS. Phạm Ngọc Hùng Chương 6. Cài đặt và thử nghiệm 6.1. Cài đặt Đối với hệ thống máy khách, việc cài đặt sẽ phụ thuộc vào người sử dụng. Do hệ thống được xây dựng như một thư viện người dùng, nên việc đưa vào những đoạn mã chương trình của người dùng là rất dễ dàng. Hệ thống cũng hỗ trợ người dùng thực thi trực tiếp nếu đã có tệp tin chứa nội dung bài toán SMT theo đúng chuẩn của SMT- LIB Đối với hệ thống máy khách. Java là một ngôn ngữ không phụ thuộc vào hệ điều hành khi biên dịch nên hệ thống có thể cài đặt trên mọi hệ điều hành khác nhau. Tuy nhiên, do hệ thống có sử dụng việc gọi tiến trình và kết xuất dữ liệu, nên việc cài đặt trên hệ điều hành khác nhau cần có sự tùy chỉnh về mã lệnh cũng như tệp tin hỗ trợ. Trong phần thử nghiệm của nhóm phát triển, hệ thống máy khách được cài đặt trên mộ máy tính có cấu hình phổ biến hiện nay và sử dụng nền hệ điều hành windows. Phần máy trạm sẽ được cài đặt song song hai bộ giải trên hai máy khác nhau: Một máy có nền windows 7 và một máy được cài sẵn hệ điều hành Linux CenOS. 6.2. Bài toán thực nghiệm Bài toán thực nghiệm được xây dựng nhằm kiểm tra tính đúng đắn cũng như hiệu năng sử dụng của hệ thống. 6.2.1. Xây dựng bài toán SMT dựa trên các hàm API Từ những hàm API của hệ thống được cài đặt trên máy khách, ta xây dựng một chương trình sử dụng các hàm API đó để xây dựng một bài toán SMT hoàn chỉnh. Việc sử dụng các hàm API được tuân thủ chặt chẽ theo luật và định nghĩa đã được nêu trong phần kiến thức nền tảng và phần hướng đẫn các hàm API. Xây dựng hệ thống giải bài toán SMT hiệu năng cao – Phần máy trạm 2010 Trang 37 Sinh viên: Hoàng Thế Tùng – K51CNPM – Khoa CNTT - ĐH Công nghệ - ĐH QGHN GVHD: TS. Trương Anh Hoàng GVĐHD: TS. Phạm Ngọc Hùng 6.2.2. Thử nghiệm kết nối với máy chủ và toàn hệ thống Để 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 Kết quả trả về đối với từng bộ giải: Xây dựng hệ thống giải bài toán SMT hiệu năng cao – Phần máy trạm 2010 Trang 38 Sinh viên: Hoàng Thế Tùng – K51CNPM – Khoa CNTT - ĐH Công nghệ - ĐH QGHN GVHD: TS. Trương Anh Hoàng GVĐHD: TS. Phạm Ngọc Hùng 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. Xây dựng hệ thống giải bài toán SMT hiệu năng cao – Phần máy trạm 2010 Trang 39 Sinh viên: Hoàng Thế Tùng – K51CNPM – Khoa CNTT - ĐH Công nghệ - ĐH QGHN GVHD: TS. Trương Anh Hoàng GVĐHD: TS. Phạm Ngọc Hùng 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. Xây dựng hệ thống giải bài toán SMT hiệu năng cao – Phần máy trạm 2010 Trang 40 Sinh viên: Hoàng Thế Tùng – K51CNPM – Khoa CNTT - ĐH Công nghệ - ĐH QGHN GVHD: TS. Trương Anh Hoàng GVĐHD: TS. Phạm Ngọc Hùng 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. Xây dựng hệ thống giải bài toán SMT hiệu năng cao – Phần máy trạm 2010 Trang 41 Sinh viên: Hoàng Thế Tùng – K51CNPM – Khoa CNTT - ĐH Công nghệ - ĐH QGHN GVHD: TS. Trương Anh Hoàng GVĐHD: TS. Phạm Ngọc Hùng 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.

Các file đính kèm theo tài liệu này:

  • pdfLUẬN VĂN-XÂY DỰNG HỆ THỐNG GIẢI BÀI TOÁN SMT HIỆU NĂNG CAO – PHẦN MÁY TRẠM.pdf