ASP & Clingo

Thực hành ASP chọn đúng một ca cho mỗi lớp

Viết luật lựa chọn và dùng số nghiệm để kiểm chứng miền ứng viên.

Thực hànhThực hành4 phút đọcClingo

Thích và đánh giá Bình luận và hỏi đáp
Hai nghiệm khi chưa thêm ràng buộc cấm hai lớp học cùng ca.
Hai nghiệm khi chưa thêm ràng buộc cấm hai lớp học cùng ca. Mở hình lớn ↗

1. Đề bài

Lớp A được học ca 1 hoặc 2. Lớp B chỉ được học ca 2. Hãy viết chương trình cho mỗi lớp đúng một ca, chưa cần kiểm tra phòng hay giảng viên. Trước khi chạy, ghi ra tất cả lịch mà em dự đoán chương trình có thể sinh.

2. Hướng dẫn viết

Biểu diễn miền bằng ung_vien(L,C). Dùng 1 { xep(L,C) : ung_vien(L,C) } 1 với mỗi lớp L. Hai số 1 đặt cận dưới và cận trên cho số nguyên tử được chọn. Mỗi lớp cần có fact riêng để lớp thiếu ứng viên làm mô hình vô nghiệm.

3. Đối chiếu lời giải

Chạy với -n 0. Có hai lịch vì A có hai lựa chọn và B chỉ có một. Nếu thấy lịch không có A hoặc A được xếp hai ca, kiểm tra lại hai cận của luật lựa chọn.

Nếu chưa có Clingo, cài bằng python -m pip install clingo.

Chạy ví dụ bằng python -m clingo hoc_asp_chon_dung_mot.lp -n 0.

Môi trường thực hành. Clingo 5.8 trở lên. Có thể cài bằng python -m pip install clingo và gọi python -m clingo thay cho lệnh clingo.

Clingo · hoc_asp_chon_dung_mot.lpTải mã nguồn
lop(a;b).
ung_vien(a,1). ung_vien(a,2). ung_vien(b,2).
1 { xep(L,C) : ung_vien(L,C) } 1 :- lop(L).
#show xep/2.

4. Bài tập mở rộng

Thêm lớp C chỉ học ca 1 rồi tính lại số lịch. Sau đó cấm A và C cùng ca. Dự đoán trước ca còn lại của A. Bỏ mọi ứng viên của B và kiểm tra chương trình báo vô nghiệm.

Đọc thêm Tài liệu ngôn ngữ ASP của Potassco.