Nhập môn Trí tuệ Nhân tạo·Optimization - Tối ưu

Chế độ xem

Constraint Satisfaction: bài toán thỏa ràng buộc

Có những bài toán mà câu hỏi đầu tiên không phải là “phương án nào tốt nhất?”, mà là:

Có cách sắp xếp nào thỏa tất cả điều kiện hay không?

Đó là nhóm Constraint Satisfaction Problem - CSP.

1. Ví dụ: xếp lịch thi

Giả sử khoa cần xếp lịch thi cho 5 môn trong 3 ngày. Để dễ đọc, ta ký hiệu:

MãMôn
AINhập môn AI
DBCơ sở dữ liệu
WEBLập trình web
MLHọc máy
SECông nghệ phần mềm

Các ngày có thể thi:

{D2,D3,D4}\{D2, D3, D4\}

Trong đó D2, D3, D4 lần lượt là Thứ 2, Thứ 3, Thứ 4.

Nếu hai môn có nhiều sinh viên học chung, chúng không được cùng ngày:

Cặp mônSố sinh viên học chungRàng buộc
AI - ML38AI≠ML\mathrm{AI} \ne \mathrm{ML}
AI - DB22AI≠DB\mathrm{AI} \ne \mathrm{DB}
DB - WEB31DB≠WEB\mathrm{DB} \ne \mathrm{WEB}
WEB - SE27WEB≠SE\mathrm{WEB} \ne \mathrm{SE}
ML - SE19ML≠SE\mathrm{ML} \ne \mathrm{SE}
DB - SE15DB≠SE\mathrm{DB} \ne \mathrm{SE}

Một lịch hợp lệ có thể là:

MônNgày
AID2
DBD3
WEBD2
MLD3
SED4

Kiểm tra nhanh:

  • AI khác ML và DB: AI ở D2, ML/DB ở D3.
  • DB khác WEB và SE: DB ở D3, WEB ở D2, SE ở D4.
  • WEB khác SE: WEB ở D2, SE ở D4.
  • ML khác SE: ML ở D3, SE ở D4.

Bài toán này chưa hỏi lịch nào “tốt nhất”; trước tiên chỉ hỏi: có lịch nào thỏa mọi ràng buộc hay không?

2. Ba thành phần của CSP

Một CSP gồm:

Variables - biến

X1,X2,…,XnX_1, X_2, \dots, X_n

Ví dụ:

AI,DB,WEB,ML,SE\mathrm{AI}, \mathrm{DB}, \mathrm{WEB}, \mathrm{ML}, \mathrm{SE}

Domains - miền giá trị

Mỗi biến XiX_i có một miền DiD_i gồm các giá trị có thể nhận.

Ví dụ:

DAI=DDB=DWEB=DML=DSE={D2,D3,D4}D_{\mathrm{AI}} = D_{\mathrm{DB}} = D_{\mathrm{WEB}} = D_{\mathrm{ML}} = D_{\mathrm{SE}} = \{D2, D3, D4\}

Constraints - ràng buộc

Quy định tổ hợp giá trị nào được phép.

Ví dụ:

AI≠ML\mathrm{AI} \ne \mathrm{ML} DB≠WEB\mathrm{DB} \ne \mathrm{WEB}

3. Constraint graph

Với các ràng buộc nhị phân, ta có thể biểu diễn CSP thành đồ thị:

  • Node: biến.
  • Edge: có ràng buộc trực tiếp giữa hai biến.

Nếu ràng buộc là “khác ngày”, bài toán trở thành một dạng graph coloring: mỗi màu tương ứng một ngày thi.

Nhìn graph giúp ta thấy môn nào “khó”:

  • DB nối với 3 môn khác, nên nếu chọn sai ngày cho DB, nhiều môn bị ảnh hưởng.
  • SE cũng nối với 3 môn khác.
  • AI, WEB, ML nối ít hơn một chút.

Đây là lý do các heuristic ở bài sau thường ưu tiên biến có nhiều ràng buộc hoặc ít lựa chọn còn lại.

4. Hard constraint và soft constraint

Hard constraint

Bắt buộc phải thỏa.

Ví dụ:

  • Hai môn có sinh viên học chung không được trùng ca.
  • Một phòng không thể tổ chức hai kỳ thi cùng lúc.

Soft constraint

Không bắt buộc, nhưng dùng để phân biệt lời giải tốt và kém.

Ví dụ:

  • Hạn chế sinh viên thi hai môn liên tiếp.
  • Ưu tiên môn đông sinh viên vào ca sáng.

Khi có soft constraints và objective, CSP có thể mở rộng thành một bài toán constraint optimization.

5. Unary, binary và global constraints

Unary constraint

Chỉ liên quan một biến.

Ví dụ:

A≠MonA \ne Mon

Binary constraint

Liên quan hai biến.

Ví dụ:

A≠BA \ne B

Global constraint

Liên quan nhiều biến cùng lúc.

Ví dụ AllDifferent:

AllDifferent(A,B,C,D)AllDifferent(A, B, C, D)

Global constraints thường cho phép solver khai thác cấu trúc tốt hơn so với việc tách thành rất nhiều ràng buộc nhỏ.

6. Node Consistency

Một biến có node consistency khi mọi giá trị còn trong domain đều thỏa các unary constraints của biến đó.

Ví dụ:

DA={Mon,Tue,Wed}D_A = \{Mon, Tue, Wed\}

và:

A≠MonA \ne Mon

Ta xóa Mon:

DA={Tue,Wed}D_A = \{Tue, Wed\}

Đây là một dạng constraint propagation: dùng ràng buộc để loại bỏ sớm các giá trị chắc chắn không thể dùng.

7. Arc Consistency

Xét ràng buộc nhị phân giữa XX và YY.

XX là arc-consistent đối với YY nếu:

Với mọi giá trị x∈DXx \in D_X, tồn tại ít nhất một giá trị y∈DYy \in D_Y sao cho cặp (x,y)(x,y) thỏa ràng buộc giữa XX và YY.

Viết gọn:

∀x∈DX,  ∃y∈DY:C(X=x,Y=y)=true\forall x \in D_X, \; \exists y \in D_Y: C(X=x, Y=y) = true

Ví dụ

Giả sử:

DA={Tue,Wed}D_A = \{Tue, Wed\} DB={Wed}D_B = \{Wed\}

và:

A≠BA \ne B
  • Nếu A=TueA=Tue, ta có thể chọn B=WedB=Wed - hợp lệ.
  • Nếu A=WedA=Wed, không còn giá trị nào cho BB - không hợp lệ.

Vì vậy Wed phải bị loại khỏi DAD_A.

Sau khi revise:

DA={Tue}D_A = \{Tue\}

8. Thuật toán REVISE

REVISE(X, Y):
    revised = false

    for mỗi x trong domain(X):
        nếu không tồn tại y trong domain(Y)
        sao cho constraint(X=x, Y=y) đúng:
            xóa x khỏi domain(X)
            revised = true

    return revised

Ý tưởng rất quan trọng:

Không cần đợi đến khi thử một phép gán hoàn chỉnh mới phát hiện sai. Ta có thể loại bỏ các lựa chọn vô vọng từ trước.

9. AC-3

AC-3 áp dụng REVISE lặp lại trên các cung của đồ thị ràng buộc.

AC-3 không nhất thiết giải xong bài toán. Nó chủ yếu thu hẹp domain để search sau đó dễ hơn.

10. Constraint propagation có tác dụng gì?

Nếu mỗi biến ban đầu có 10 giá trị và có 8 biến, số phép gán thô có thể lên tới:

10810^8

Nếu propagation làm mỗi domain giảm còn 3 giá trị, không gian thô giảm xuống:

38=65613^8 = 6561

Không phải mọi CSP đều giảm mạnh như vậy, nhưng đây là lý do inference trước khi search rất có giá trị.

11. CSP trong thực tế

Các bài toán phù hợp:

  • Xếp thời khóa biểu.
  • Xếp lịch thi.
  • Phân ca nhân viên.
  • Sudoku, N-Queens.
  • Lập lịch máy trong nhà máy.
  • Phân bổ phòng và tài nguyên.

Các solver hiện đại thường hỗ trợ nhiều dạng ràng buộc mạnh hơn rất nhiều so với ví dụ nhập môn.

OR-Tools, chẳng hạn, cung cấp CP-SAT cho các bài toán rời rạc với biến nguyên và Boolean.

12. Câu hỏi tự kiểm tra

  1. Variable, domain và constraint trong Sudoku là gì?
  2. Tại sao arc consistency là có hướng: X→YX \rightarrow Y không đồng nghĩa hoàn toàn với Y→XY \rightarrow X?
  3. AC-3 có đảm bảo tìm ra nghiệm hoàn chỉnh không?
  4. Hard constraint và soft constraint khác nhau thế nào?

Tài liệu tham khảo