Tài liệu Khóa luậ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: ĐẠI HỌC QUỐC GIA HÀ NỘI
TRƯỜNG ĐẠI HỌC CÔNG NGHỆ
Hoàng Thế Tùng
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
KHOÁ LUẬN TỐT NGHIỆP ĐẠI HỌC HỆ CHÍNH QUY
Ngành: Công nghệ phần mềm
Cán bộ hướng dẫn: TS. Trương Anh Hoàng
Cán bộ đồng hướng dẫn: TS. Phạm Ngọc Hùng
HÀ NỘI - 2010
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
Lời cảm ơn
Trước hết, tôi xin gửi lời cảm ơn chân thành và sâu sắc đến Tiến sỹ Trương
Anh Hoàng và Tiến sỹ Phạm Ngọc Hùng, những người đã trực tiếp hướng dẫn tôi
trong suốt quá trình nghiên cứu và phát triển đề tài nghiên cứu này. Để có được
những kết quả nghiên cứu như hiện nay, tôi vô cùng biết ơn sự quan tâm, hướng dẫn
nhiệt tình của hai thầy trong thời gian vừa qua.
Tôi xin chân thành cảm ơn các thầy cô trong trường Đại học công nghệ, Đại
học Quốc Gia Hà Nội...
47 trang |
Chia sẻ: haohao | Lượt xem: 1249 | Lượt tải: 0
Bạn đang xem trước 20 trang mẫu tài liệu Khóa luậ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, để tải tài liệu gốc về máy bạn click vào nút DOWNLOAD ở trên
ĐẠI HỌC QUỐC GIA HÀ NỘI
TRƯỜNG ĐẠI HỌC CÔNG NGHỆ
Hoàng Thế Tùng
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
KHOÁ LUẬN TỐT NGHIỆP ĐẠI HỌC HỆ CHÍNH QUY
Ngành: Công nghệ phần mềm
Cán bộ hướng dẫn: TS. Trương Anh Hoàng
Cán bộ đồng hướng dẫn: TS. Phạm Ngọc Hùng
HÀ NỘI - 2010
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
Lời cảm ơn
Trước hết, tôi xin gửi lời cảm ơn chân thành và sâu sắc đến Tiến sỹ Trương
Anh Hoàng và Tiến sỹ Phạm Ngọc Hùng, những người đã trực tiếp hướng dẫn tôi
trong suốt quá trình nghiên cứu và phát triển đề tài nghiên cứu này. Để có được
những kết quả nghiên cứu như hiện nay, tôi vô cùng biết ơn sự quan tâm, hướng dẫn
nhiệt tình của hai thầy trong thời gian vừa qua.
Tôi xin chân thành cảm ơn các thầy cô trong trường Đại học công nghệ, Đại
học Quốc Gia Hà Nội nói chung, và các thầy cô trong khoa công nghệ thông tin nói
riêng, những người đã nhiệt tình giảng dạy, giúp tôi có những kiến thức quý báu để tôi
có thể hoàn thành được đề tài luận văn này.
Tôi xin bày tỏ lòng cảm ơn đến các anh chị cao học, và các bạn trong nhóm
nghiên cứu đã cùng tôi tìm hiểu và xây dựng hoàn chỉnh hệ thống giải quyết bài toán
Satisfiability Modulo Theories (SMT) với hiệu năng cao, giúp tôi có thể hoàn thành tốt
phần nghiên cứu của mình.
Và cuối cùng, tôi xin gửi lời cảm ơn đến gia đình, bạn bè và những người thân đã
bên cạnh, động viên giúp tôi hoàn thành tốt luận văn của mình.
Hà Nội, tháng 05/2010
Hoàng Thế Tùng
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
Tóm tắt nội dung
Vấn đề giải quyết các bài toán Satisfiability Modulo Theories (SMT) hiện nay
đang được nghiên cứu và phát triển ở nhiều nơi trên thế giới. Cho đến ngày nay, nhiều
trường đại học, tổ chức đã nghiên cứu và đưa ra những bộ giải giải quyết bài toán
SMT (hay còn gọi là SMT solver). Ví dụ như Z3 của Mcrosoft, yices của SRI, CVC3
của một số trường đại học danh tiếng của Mỹ. hay boolector, openSMT của một số
trường đại học danh tiếng khác… Tuy nhiên, mỗi solver có một lợi thế ưu điểm riêng
đối với các dạng khác nhau của bài toán SMT. Vậy vấn đề đặt ra là làm sao để tận
dụng được hết các ưu điểm đó cho từng bài toán.
Để giải quyết vấn đề ấy, nhóm nghiên cứu đã nghiên cứu và xây dựng một hệ
thống giải quyết bài toán SMT trực tuyến, kết hợp nhiều bộ giải khác nhau để đưa ra
được lời giải tối ưu cho từng bài toán SMT.
Trong khuôn khổ khóa luận tốt nghiệp này của cá nhân tôi, tôi đã xây dựng hai
hệ thống con của hệ thống đã nêu trên là hệ thống trên máy khách (users) và trên máy
trạm (sử dụng để gọi các Solver). Hệ thống trên máy khách sẽ đảm nhiệm việc cung
cấp một giao diện lập trình ứng dụng (Application Programming Interface hay API) để
người dùng sử dụng có thể xây dựng bài toán SMT theo chuẩn thư viện SMT (SMT-
LIB) và sau đó là gửi bài toán đến máy chủ (server). Hệ thống trên máy trạm sẽ tiếp
nhận bài toán từ máy chủ và gọi các bộ giải để giải quyết bài toán đó và gửi về máy
chủ kết quả.
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
Mục lục
Chương 1. Mở đầu .................................................................................................................. 1
1.1. Giới thiệu ..................................................................................................................... 1
1.2. Bài toán đặt ra .............................................................................................................. 1
1.3. Cấu trúc nội dung tài liệu ............................................................................................. 2
Chương 2. Kiến thức nền tảng ................................................................................................ 3
2.1. Giới thiệu SMT ............................................................................................................ 3
2.2. Bộ giải SMT (SMT solver) .......................................................................................... 3
2.3. Thư viện SMT (SMT-LIB) .......................................................................................... 4
2.3.1. Cấu trúc cơ bản của SMT-LIB ............................................................................. 4
2.3.2. Khuôn dạng của SMT-LIB ................................................................................... 5
Chương 3. Phân tích hệ thống .............................................................................................. 12
3.1. Mô hình hệ thống ....................................................................................................... 12
3.2. Mô hình ca sử dụng của hệ thống .............................................................................. 13
3.3. Mô hình hoạt động ..................................................................................................... 15
Chương 4. Phương hướng giải quyết vấn đề ........................................................................ 17
4.1. Lựa chọn phương thức kết nối ................................................................................... 17
4.2. Lựa chọn ngôn ngữ lập trình ...................................................................................... 17
4.3. Xác định dữ liệu đầu vào, đầu ra của hệ thống .......................................................... 17
Chương 5. Mô tả hệ thống .................................................................................................... 19
5.1. Quy định cách thức giao tiếp với máy chủ ................................................................ 19
5.2. Phần máy khách ......................................................................................................... 20
5.2.1. Quy định giao tiếp với máy chủ ......................................................................... 20
5.2.2. Các lớp của hệ thống máy khách ........................................................................ 21
5.2.2.1. Lớp config ................................................................................................... 21
5.2.2.2. Lớp Client: .................................................................................................. 21
5.2.2.3. Lớp NetSolver ............................................................................................. 21
5.2.2.4. Lớp Bench_attribute .................................................................................... 22
5.2.2.5. Lớp Formula ................................................................................................ 22
5.2.2.6. Lớp func_decl .............................................................................................. 23
5.2.2.7. Lớp pred_decl .............................................................................................. 24
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.2.2.8. Lớp Term ..................................................................................................... 24
5.2.2.9. Lớp annotation ............................................................................................ 24
5.2.2.10. Lớp varDecl ................................................................................................ 24
5.2.2.11. Lớp fvarDecl ............................................................................................... 24
5.2.2.12. Lớp Arith_symb .......................................................................................... 25
5.2.2.13. Lớp Identifier .............................................................................................. 25
5.2.2.14. Lớp quant_var ............................................................................................. 25
5.3. Phần máy trạm ........................................................................................................... 26
5.3.1. Cơ chế làm việc của máy trạm ........................................................................... 26
5.3.2. Quy định giao tiếp với máy chủ ......................................................................... 27
5.3.3. Hoạt động của hệ thống máy trạm ...................................................................... 28
5.3.4. Các lớp của hệ thống máy trạm .......................................................................... 30
5.3.4.1. Biểu đồ lớp của hệ thống ............................................................................. 30
5.3.4.2. Lớp config ................................................................................................... 30
5.3.4.3. Lớp sessionID .............................................................................................. 30
5.3.4.4. Lớp Solver ................................................................................................... 31
5.3.4.5. Lớp ReadThread .......................................................................................... 31
5.3.4.6. Lớp WriteThread ......................................................................................... 34
5.4. Tổng kết ..................................................................................................................... 34
Chương 6. Cài đặt và thử nghiệm ......................................................................................... 36
6.1. Cài đặt ........................................................................................................................ 36
6.2. Bài toán thực nghiệm ................................................................................................. 36
6.2.1. Xây dựng bài toán SMT dựa trên các hàm API.................................................. 36
6.2.2. Thử nghiệm kết nối với máy chủ và toàn hệ thống ............................................ 37
Hướng phát triển tiếp theo của hệ thống .............................................................................. 40
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
Danh sách các bảng trong tài liệu
Bảng 1: Luật sinh một toán hạng ................................................................................................ 7
Bảng 2: Luật sinh một công thức ................................................................................................ 8
Bảng 3: Luật sinh một thuyết ..................................................................................................... 8
Bảng 4: Luật sinh một logic ....................................................................................................... 8
Bảng 5 Luật sinh một chuẩn ....................................................................................................... 9
Bảng 6: Các lý thuyết nền được quy chuẩn trong SMT-LIB 1.2 ............................................... 9
Bảng 7: Các Logic quy chuẩn được đưa ra trong SMT-LIB 1.2 .............................................. 10
Bảng 8 Bảng dữ liệu các tệp tin đầu vào thử nghiệm ............................................................... 37
Bảng 9: Kết quả thời gian của thực nghiệm ............................................................................. 37
Bảng 10: Kêt quả trả về của thực nghiệm ................................................................................ 38
Danh sách các hình trong tài liệu
Hình 3.1 Mô hình hệ thống giải bài toán SMT hiệu năng cao. ............................................... 12
Hình 3.2: Mô hình ca sử dụng của hệ thống ............................................................................ 14
Hình 3.3: Mô hình hoạt động của hệ thống ............................................................................. 15
Hình 5.1: Biểu đồ lớp của hệ thống máy trạm ......................................................................... 30
Danh sách từ viết tắt trong tài liệu
Từ viết tắt Từ chuẩn Diễn giải
SMT Satisfiability Modulo Theories Các lý thuyết module về
tính thỏa được
SMT-LIB Satisfiability Modulo Theories -
Liblary
Thư viện các lý thuyết
module về tính thỏa được
API Application Programming Interface
Giao diện lập trình ứng
dụng
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 1
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 1. Mở đầu
1.1. Giới thiệu
Hiện nay, cùng với sự phát triển bùng nổ của hầu hết các ngành khoa học,
ngành khoa học máy tính cũng có những tiến bộ to lớn. Song song với đó, nhu cần
nghiên cứu về việc giải hoặc đưa ra tính khả thi của một biểu thức logic ngày càng
được quan tâm và phát triển. Bởi lẽ, rất nhiều các ứng dụng hay những sự tính toán
trong ngành khoa học máy tính cần đến những công thức logic phức tạp. Trong
khoảng hai thập niên gần đây, ngành khoa học máy tính đã có những tiến bộ lớn đối
với việc tự động chứng minh hay bác bỏ tính đúng đắn của một biểu thức logic. Tuy
nhiên việc chứng minh các biểu thức logic sẽ khó khăn hơn nhiều nếu đặt chúng trong
một nền lý thuyết thay vì chứng minh một cách tổng quát [1,2]. Những vấn đề này
được gọi là các lý thuyết module về tính thỏa được (Satisfiability Modulo Theories
hay còn được viết tắt là SMT [1]).
Cho đến nay, nhiều trường đại học cùng những nhà nghiên cứu khoa học máy
tính đã có những nghiên cứu, sản phẩm để giải quyết vấn đề này. Tuy nhiên, việc xây
dựng một bộ giải các vấn đề SMT tối ưu cho mọi trường hợp và rất khó khăn. Vì vậy,
vấn đề được đặt ra là kết hợp các bộ giải SMT đó để có được một bộ giải tối ưu nhất
về mặt thời gian.
1.2. Bài toán đặt ra
Đối với việc giải quyết các vấn đề SMT, nhiều trường đại học cũng như các cơ
quan, tổ chức lớn trên thế giới đã có những nghiên cứu và đưa ra những sản phẩm của
mình. Tuy nhiên, với mỗi sản phẩm, họ đưa vào những thuật toán khác nhau để giải
quyết vấn đề này. Trong khuôn khổ đồ án, việc nghiên cứu cơ chế, và tính đúng đắn
của những bộ giải này không được đề cập đến (kết quả đưa ra của các bộ giải sẽ được
coi là luôn đúng đắn) mà sẽ tập trung vào việc sử dụng những bộ giải này như là
những công cụ giải quyết vấn đề SMT được đưa vào. Với những kết quả đưa ra bởi
các bộ giải này, cần có một kết trả được trả về tối ưu nhất về mặt thời gian.
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 2
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ải quyết vấn đề nói trên, cần có một hệ thống phân phối các vấn đề SMT
cho các bộ giải và nhận về kết quả trả về tối ưu nhất về mặt thời gian. Ngoài ra để tiện
cho việc sử dụng và phát triển hệ thống, cần có một thư viện các hàm nhúng hỗ trợ
người sử dụng xây dựng các vấn đề SMT.
1.3. Cấu trúc nội dung tài liệu
Tài liệu này nhằm giới thiệu về bài toán SMT và mô tả hệ thống giải quyết bài
toán đó trực tuyến. Chương mở đầu của tài liệu giới thiệu qua về bài toán SMT và bài
toán đặt ra cho việc xây dựng hệ thống giải quyết bài toán SMT đó.
Chương thứ hai của tài liệu đề cập tới một số kiến thức về SMT và cấu trúc,
khuôn dạng của bài toán SMT được xây dựng theo chuẩn SMT-LIB. Chương này được
coi là kiến thức nền tảng để xây dựng hệ thống giải quyết bài toán SMT hiệu năng cao.
Những kiến thức trong chương này sẽ được sử dụng để xây dựng các hàm API cho hệ
thống máy khách và một số thành phần của hệ thống máy trạm.
Chương ba và chương bốn là phần phân tích và hướng giải quyết vấn đề xây
dựng hệ thống giải bài toán SMT hiệu năng cao. Chương ba sẽ tập trung hơn vào vấn
đề phân tích, đưa ra một cái nhìn tổng quan về hệ thống và quy trình hệ thống sẽ hoạt
động. Chương bốn sẽ là một số lựa chọn giải pháp để giải quyết một số vấn đề khi xây
dựng hệ thống.
Hệ thống giải bài toán SMT hiệu năng cao phần máy trạm và máy khách sẽ được
mô tả chi tiết trong chương năm. Ở chương này, hệ thống các hàm API trên máy khách
sẽ được mô tả rất chi tiết và có thể coi là tài liệu hướng dẫn cho người dùng sử dụng
các hàm API này.
Chương sáu sẽ đưa ra phần thực nghiệm và đánh giá kết quả của hệ thống. Trong
chương này, kết quả của một số thực nghiệm hệ thống sẽ được đưa ra nhằm đưa ra một
số ưu điểm mà hệ thống có đượ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 3
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 2. Kiến thức nền tảng
2.1. Giới thiệu SMT
Tính thỏa mãn là một trong những vấn đề quan trọng nhất của ngành khoa học
máy tính. Các vấn đề cần tính thỏa mãn được ứng dụng trong cả phát triển phần cứng
cũng như phần mềm, đặc biệt là kiểm định phần cứng, kiểm thử, lập lịch, đồ thị [3].
Trong các lĩnh vực nói trên, nhiều các ứng dụng được xây dựng dựa trên việc
tạo ra các công thức tiền tố và việc chứng minh tính hợp lệ của chúng. Cho dù hai thập
niên gần đây, việc chứng minh tính hợp lệ của các định lý, biểu thức tiền tố có những
tiến bộ đáng kể, tuy nhiên, không phải công thức nào cũng có thể chứng minh một
cách tự động được. Lý do của vấn đề này là bởi lẽ nhiều công thức không quan tâm
đến tính khả thi trong trường hợp tổng quát mà chỉ được quan tâm trong một lý thuyết
nền tảng [2,1]. Việc nghiên cứu tính khả thi của các công thức trong một lý thuyết nền
tảng được gọi là các lý thuyết module về tính thỏa được (Satisfiability Modulo
Theories hay SMT) và các công cụ để chứng minh một cách tự động các tính khả thi
của những vẫn đề SMT được gọi là bộ giải SMT (SMT solver).
Lý thuyết về SMT sẽ được đề cập cụ thể hơn trong phần giới thiệu về thư viện
SMT.
2.2. Bộ giải SMT (SMT solver)
Trên thực tế, việc xây dựng và sử dụng các bộ giải SMT được phát triển khá
sớm, từ đầu những năm 1980. Tại thời điểm đó, một số bộ giải được xây dựng bởi
Greg Nelson và Derek Oppent tại trường đại học Stanford , Robert Shostak tại SRI, và
Robert Boyer và J Moore tại trường đại học ở Texas. Đến cuối những năm 1990, việc
nghiên cứu SMT hiện đại dựa trên lợi thế của công nghệ SAT đã xây dựng nhiều bộ
giải SMT tiến bộ hơn [4].
Như đã đề cập ở trên, trong khuôn khổ đồ án, việc đánh giá về tính đúng đắn,
các nghiên cứu về thuật giải của từng bộ giải sẽ không được đề cập đến. Vấn đề đượ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 4
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 ra ở đây là kết quả của bộ giải nào sẽ được đưa ra sớm nhất. Hiện nay, có rất nhiều
các bộ giải như Absolver, Boolector, CVC3, OpenSMT, Yices, Z3…
Do yêu cầu của hệ thống là phải đưa ra được giá trị thỏa mãn (nếu bài toán
SMT đó có thỏa mãn) nên bộ giải hệ thống sử dụng phải hỗ trợ chức năng này. Ngoài
ra hệ thống sử dụng đầu vào theo chuẩn của SMT-Lib và ngắt thời gian giải một bài
toán (trong trường hợp bài toán cần thời gian giải quá lớn), do đó, bộ giải cần phải có
hỗ trợ những chức năng này khi hoạt động. Từ những yêu cầu đó, nhóm nghiên cứu và
phát triển hệ thống đã quyết định sử dụng song song hai bộ giải là Yices của SRI
International và Z3 của Microsoft. Hai bộ giải này tuy có cấu trúc khác nhau nhưng
cùng được dựa trên thuật giải DPLL (Davis-Putnam-Logemann-Loveland) [5]. Việc
tìm hiểu, phân tích cấu trúc cũng như thuật toán của hai bộ giải này sẽ không được đề
cập cụ thể ở đây.
2.3. Thư viện SMT (SMT-LIB)
Đề giải quyết các vấn đề SMT, việc nghiên cứu và đưa ra một chuẩn đầu vào là
rất cần thiết. Thông thường, mỗi bộ giải SMT đều có một quy định riêng cho chuẩn
đầu vào của mình, tuy nhiên như vậy sẽ thực sự khó khăn đối với việc thực thi một đầu
vào bởi các bộ giải khác nhau. Vì vậy, việc nghiên cứu và đưa ra một chuẩn đầu vào
thống nhất là rất cần thiết.
Khoảng tháng tư năm 2004, Silvio Rainise và Cesare Tinelli đã đưa ra chuẩn về
SMT-LIB đầu tiên [6]. Thời gian sau đó, họ liên tục cải tiến chuẩn đầu vào, bổ sung
những quy định chuẩn, thuyết mới. Cho đến nay, hai tác giả này đã và đang xây dựng
chuẩn SMT-LIB đã có phiên bản 2.0, tuy nhiên việc xây dựng đầu vào dựa trên chuẩn
mới này chưa được phổ biến. Hầu hết các bộ giải cũng như đầu vào cho các vấn đề
SMT-LIB đều được sử dụng bởi chuẩn 1.2 mà họ đã xây dựng vào khoảng tháng 8
năm 2006.
2.3.1. Cấu trúc cơ bản của SMT-LIB
Như đã nói ở trên, vấn đề SMT là việc kiểm tra biểu thức logic φ có thỏa mãn
được hay không trong lý thuyết nền T hay có một khuôn mẫu của T là khả thi. Vì vậy,
kiến trúc cơ bản của một SMT-LIB thường bao gồm các vấn đề sau [7]:
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 5
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
- Một thủ tục logic cơ sở (underlying logic): Định dạng SMT-LIB hiện tại có hai
định nghĩa về ngữ nghĩa của logic cơ sở. Thứ nhất là dịch nghĩa sang những
biểu thức tiền tố cổ điển, có nghĩa là thủ tục của logic cơ sở giúp cho việc
chuyển đổi sang khung làm việc của công cụ có sẵn hoặc giúp kiểm tra kết quả
một cách dễ dàng hơn. Nghĩa thứ hai là chi phối ngữ nghĩa đại số dựa trên
nhiều khuôn mẫu rút gọn.
- Một lý thuyết nền (background theory): là những lý thuyết nền dùng để kiểm
chứng tính thỏa mãn. Những lý thuyết cơ bản bao gồm lý thuyết số thực, lý
thuyết mảng.. Phiên bản hiện tại của SMT-LIB chỉ hỗ trỡ những lý thuyết cơ
bản này.
- Một ngôn ngữ đầu vào (input language): Là lớp các biểu thức được chấp nhận
như là đầu vào của SMT-LIB.
2.3.2. Khuôn dạng của SMT-LIB
Một thư viện SMT được xây dựng theo chuẩn và dựa trên những định nghĩa sau
(theo [7]):
Định nghĩa 1 (Ký hiệu của SMT-LIB – SMT-LIB signature): Một ký hiệu SMT-
LIB Σ là một bộ dữ liệu bao gồm:
- Một tập không rỗng ∑ ⊆ các ký hiệu phân cấp (sort symbol), một tập
hợp ký hiệu hàm (function symbol) ∑ ⊆ và tập hợp các ký hiệu vị từ
(predicate symbol) ∑ ⊆ ;
- Một toàn ánh (total mapping) từ các biến (term variables) X tới ΣS;
- Một quan hệ toàn phương (total relation) từ ΣF đến (ΣS)+, một chuỗi các
thành phần của ΣS, không bao giờ có một cặp định dạng (f,s1…sns) và
(f,s1…sns’) với s và s’ khác nhau;
- Một quan hệ toàn phương từ ΣP tới (ΣS)*, thứ tự các thành phần ΣP.
Định nghĩa 2 (Công thức trong SMT-LIB – SMT-LIB formula): Các công thức
trong ngôn ngữ SMT-LIB là một tập hợp tất cả các công thức đúng cú pháp
đóng (closed well-formed formula).
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 6
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
Định nghĩa 3 (khai báo lý thuyết – theory decl): chỉ tồn tại một khai báo lý
thuyết trong một bài toán SMT-LIB và phải thỏa mãn những giới hạn sau:
- Chúng bao gồm các khai báo của thuộc tính “sort” và “definition”;
- Chúng chứa ít nhất một khai báo với một thuộc tính;
- Không tồn tại khai báo định dạng f,s1…sns và f,s1…sns’ cho cùng một ký
tự hàm f mà s và s’ khác nhau;
- Tất cả các rút gọn trong khai báo ký tự hàm, vị từ được liệt kê trong khai
báo thuộc tính “sort”;
- Định nghĩa của lý thuyết được quy định trong thuộc tính “definition” và
chỉ liên quan đến các khai báo ký tự phân cấp, ký tự hàm và ký tự vị từ;
- Công thức trong thuộc tính “axiom” được xây dựng trên các khái báo ký
tự trong các thuộc tính “sort”, “funs”, “pred”.
Định nghĩa 4 (Khai báo Logic): Chỉ có một luật Logic được khai báo trong một
bài toán SMT và phải được thỏa mãn các giới hạn sau:
- Chúng bao gồm các khai báo thuộc tính “theory” và “language”;
- Chúng chứa ít nhất một khai báo đối với một thuộc tính;
- Giá trị của thuộc tính “theory” phải trùng với tên của thuyết T cho vài khai
báo của DT trong SMT-LIB.
Định nghĩa 5 (Khai báo về chuẩn): luật khai báo chuẩn phải thỏa mãn những
giới hạn sau:
- Chúng chứa chính xác một khai báo của thuộc tính “logic”, “formula” và
“status”;
- Giá trị của thuộc tính “logic” phải trùng khớp với tên của logic L cho vài
khai báo DL trong SMT-LIB;
- Mỗi một ký hiệu được khai báo trong thuộc tính “extrasorts”, “extrafuns”
và “extrapred” cần phải là một phần của các ký hiệu được định nghĩa trong
thuộc tính “language” của logic L;
- Có thể có hơn một khai báo của thuộc tính “extrasort”;
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 7
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ó thể có hơn một khai báo của thuộc tính “extrafuns”, và mỗi thuộc tính
“funs” của khai báo thuyết liên kết tới DL phải thỏa mãn yêu cầu 3 của
định nghĩa 3;
- Ký hiệu rút gọn trong khai báo “extrafuns” hoặc “extrapred” hoặc được
khai báo trong “extrasort” hoặc thuộc về ký hiệu của logic L;
- Công thức trong khai báo thuộc tính “assumption” và “formula” là ngôn
ngữ của L và các ký hiệu của chúng được khai báo trong thuộc tính
“extrasorts” “extrafuns” và “extrapred”.
Từ những định nghĩa trên, việc xây dựng một bài toán SMT dựa trên chuẩn
SMT-LIB sẽ theo cấu trúc sau [7]:
Bảng 1: Luật sinh một toán hạng
(1) ::= Chuỗi các ký tự, số, dấu chấm(.), nháy đơn(‘)
và gạch dưới , bắt đầu bởi ký tự
(2) ::= Bất kỳ chuỗ ký tự có thể in ra được
(3) ::= {}
(4) ::= 0 | chuỗi không rỗng các chữ số bắt đầu khác 0
(5) ::= .0*
(6) ::= [(:)*]
(7) ::= |
(8) ::= ?
(9) ::= $
(10) ::= :
(11) ::= Chuỗi không rỗng các ký tự:
=, >, <, &, @, #, +, -, *, /, %, |, ~
(12) ::= |
(13) ::= | | distinct
(14) ::=
(15) ::= |
(16) ::= | | |
(17) ::= | ( +)
| ( + *)
| (ite
*)
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 8
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 2: Luật sinh một công thức
(1) ::= true | false | |
(2) ::= | ( +)
| ( + *)
(3) ::= not | implies | if_then_else | and | or | xor | iff
(4) ::= exists | forall
(5) ::= ( )
(6) ::=
| ( + * )
| ( +
* )
| (let ( ) *
)
| ( flet ( )
* )
Bảng 3: Luật sinh một thuyết
(1) ::= chuỗi liên tiếp các ký tự
(2) ::= “”
(3) ::= ( + *)
| ( *)
| ( *)
(4) ::= ( * *)
(5) ::=
(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:
- LUẬ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