ASP & Clingo

Chọn lịch theo tình huống bất lợi nhất

So quyết định chỉ tốt ở kịch bản thường với quyết định giữ mức phạt thấp ở nhiều kịch bản.

Vấn đề nghiên cứuNâng cao6 phút đọcClingo

Thích và đánh giá Bình luận và hỏi đáp
Bảng chi phí giả định; điều kiện cứng vẫn phải được bảo đảm.
Bảng chi phí giả định; điều kiện cứng vẫn phải được bảo đảm. Mở hình lớn ↗

1. Giữ cùng một quyết định trong mọi kịch bản

Khi phải công bố lịch trước lúc biết phòng nào cần bảo trì, mỗi phương án nên được đánh giá dưới nhiều tình huống. Chọn biến quyết định lịch ở ngoài chiều kịch bản. Các giá trị chi phí mang thêm mã kịch bản. Nếu vô tình chọn lịch riêng cho từng kịch bản, kết quả giả định người xếp đã biết trước tình huống sẽ xảy ra.

2. So cực đại với mức phạt thông thường

Trong ví dụ, lịch A có chi phí 1 ở ngày thường và 9 khi phát sinh nhu cầu điều chỉnh phòng. Lịch B có 4 và 5. Lịch A tốt hơn nếu chỉ nhìn ngày thường. Tối thiểu hóa chi phí xấu nhất sẽ chọn B vì 5 nhỏ hơn 9. Điều này bảo vệ trước tập kịch bản đã định và đánh đổi bằng mức phạt cao hơn ở tình huống thường.

Phạm vi mô hình. Bảng chi phí là dữ liệu giả định của hai phương án đã được coi là khả thi. Ví dụ chưa mô hình hóa việc đóng phòng hoặc bước sửa lịch. Nếu một phòng thực sự không sử dụng được, lịch phải thỏa điều kiện cứng ở kịch bản đó, hoặc phải có phương án sửa hợp lệ được mô tả rõ. Không dùng điểm phạt hữu hạn để hợp thức hóa việc xếp vào phòng bị đóng.

3. Chạy mô hình nhỏ

Chương trình biểu diễn cả hai chi phí dưới dạng fact. Sau khi chọn lịch, lấy cực đại bằng #max rồi đưa vào #minimize. Kết quả cần có chon(b) và xau_nhat(5). Thử giảm chi phí của A trong kịch bản điều chỉnh phòng từ 9 xuống 3. Khi đó cực đại của A là 3 và A trở thành phương án tối ưu.

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

Chạy ví dụ bằng python -m clingo asp_lich_chong_bat_dinh.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.

Đọc kết quả tối ưu. Các nghiệm trung gian có thể chưa tối ưu. Lệnh --opt-mode=optN -n 0 tìm tối ưu rồi liệt kê các nghiệm tối ưu; cần phân biệt hai giai đoạn khi đếm nghiệm. Chỉ kết luận tối ưu khi lượt giải đã chứng minh được kết quả. Giải thích của Potassco.

Clingo · asp_lich_chong_bat_dinh.lpTải mã nguồn
lich(a;b).
phat(a,thuong,1). phat(a,dieu_chinh_phong,9).
phat(b,thuong,4). phat(b,dieu_chinh_phong,5).
1 { chon(L) : lich(L) } 1.
xau_nhat(M) :- chon(L), M = #max { P,K : phat(L,K,P) }.
#minimize { M : xau_nhat(M) }.
#show chon/1.
#show xau_nhat/1.

4. Thiết kế thí nghiệm có kịch bản giữ riêng

Chọn một tập dùng để xây mô hình và một tập độc lập để kiểm tra. Báo chi phí tình huống thường, chi phí xấu nhất, và số kịch bản cần sửa lịch sau khi công bố. Nếu cho phép sửa, mô tả rõ biến nào được đổi và ngân sách đổi bao nhiêu lớp, để phân biệt chất lượng lịch gốc với khả năng khôi phục.

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