Loại bỏ đối xứng trƣớc khi tìm kiếm nghiệm

Một phần của tài liệu lập trình ràng buộc với bài toán n quân hậu (Trang 39)

Phƣơng pháp loại bỏ đối xứng trƣớc khi tìm kiếm nghiệm nhƣ đã nói ở trƣớc đƣợc gọi là phƣơng pháp tĩnh. Phƣơng pháp này là phƣơng pháp cơ bản nhất của bài toán, từ yêu cầu bài toán chúng ta cần đƣa ra những ràng buộc đầu tiên trƣớc khi tìm kiếm nghiệm. Ở đây, bài toán n-quân hậu với kích thƣớc n×n nên ta nhận biết đƣợc rằng mô hình bài toán là một hình vuông Latin trực giao, vì vậy để nắm chắc đƣợc bài toán chúng ta cần hiểu về hình vuông Latin này để biết đƣợc những tính chất cần thiết xây dựng những ràng buộc cho bài toán.

3.1.1. Giới thiệu hình vuông Latin trực giao

Trƣớc hết, ta muốn giới thiệu về hình vuông (Latin Square) và hình chữ nhật Latin (Latin Rectangle).

Định nghĩa 3.2

Một ma trận n×n là hình vuông Latin cấp n, nếu mỗi số 0, 1, …, n-1 xuất hiện đúng một lần trên mỗi hàng và mỗi cột.

Ví dụ về một hình vuông Latin nhƣ trong bảng 2 là hình vuông Latin cấp 4. Tổng quát hơn, chúng ta có thể thay các số bằng các đối tƣợng khác nhau.

Bảng 2: Một ví dụ về hình vuông Latin cấp 4

Định nghĩa 3.3

Một ma trận r×n được gọi là hình chữ nhật Latin, nếu mỗi số 0, 1,…, n-1 xuất hiện nhiều nhất một lần trên mỗi hàng và mỗi cột.

Ví dụ về một hình chữ nhật Latin nhƣ trong bảng 3.

Bảng 3: Một ví dụ về hình chữ nhật Latin 3×4

Nhƣ vậy với mỗi hình vuông Latin ta có thể đạt đƣợc hình chữ nhật Latin bằng cách loại bỏ một số hàng trong hình vuông Latin. Còn từ hình chữ nhật Latin, liệu chúng ta có đạt đƣợc hình vuông Latin không? Câu hỏi đã có trong định lý sau:

Định lý 3.4

Nếu r < n, thì với bất kỳ một hình chữ nhật Latin r×n có thể được mở rộng thành hình chữ nhật Latin (r+1)×n.

Bây giờ đã tới lúc chúng ta thảo luận tới các hình vuông Latin trực giao (Mutually orthogonal Latin squares - MOLS)

0 1 2 3 2 3 0 1 3 2 1 0 1 0 3 2 0 1 2 3 2 3 0 1 3 2 1 0

Định nghĩa 3.5

Một tập MOLS là một tập hình vuông Latin cỡ n sao cho bất kỳ một cặp hình vuông Lα và Lβ nào từ tập đó, thì cặp (Lα(i,j), Lβ(i,j)) phải khác nhau với mọi 1≤ i, j ≤ n.

Từ đây suy ra một tính chất sau

Tính chất 3.6

Nếu tập MOLS có k hình vuông Latin cỡ n {Li| 1≤ i ≤ k} thì khi đó bộ k - giá (

1( , ),..., ( , )

k

i i

L i j L i j ) phải khác nhau với mọi i và j, 1≤ i, j ≤ n.

Ví dụ trong bảng 4 là một tập MOLS gồm 3 hình vuông Latin

Bảng 4: Hai hình vuông Latin trực giao

Từ định nghĩa 3.5 chúng ta cũng suy ra đƣợc tập hình chữ nhật trực giao (Mutually orthogonal Latin rectangles - MOLR).

Định nghĩa 3.7

Một tập MOLR là một tập hình chữ nhật Latin sao cho bất kỳ một cặp hình chữ nhật Lα và Lβ nào từ tập đó, thì cặp (Lα(i,j), Lβ(i,j)) phải khác nhau với mọi i và j.

Và nhƣ vậy thì MOLR cỡ n×n chính là tập MOLS cỡ n. Chú ý rằng tính chất 7cũng đúng cho MOLR. (adsbygoogle = window.adsbygoogle || []).push({});

Chúng ta gọi N(n) là số hình vuông lớn nhất có thể từ tập MOLS cấp n, gọi

N(m×n) là số hình chữ nhật lớn nhất có thể từ tập MOLR cấp m×n. Khi đó ta có 2 0 1 2 3 3 2 1 0 1 0 3 2 2 3 0 1 0 1 2 3 2 3 0 1 3 2 1 0 1 0 3 2 0 1 2 3 1 0 3 2 2 3 0 1 3 2 1 0

N(n) ≤ N(m×n), cho mọi m≤ n

N(m×n) ≤ n-1, cho mọi 1< m ≤ n

3.1.2. Liên hệ bài toán N-quân hậu với hình vuông Latin trực giao

Trong những khái niệm, định lý và tính chất trên chúng ta đã nêu một cách khái quát về một hình vuông Latin. Để liên hệ vào bài toán n-quân hậu một cách cụ thể chúng ta sẽ dùng ký hiệu quân hậu đứng ở ô nằm trên hàng thứ i của lời giải là Qi. Các chỉ số dòng cột đánh từ trên xuống dƣới, trái sang phải theo cách đánh số trong ma trận. Trong một ma trận vuông ta có:

 Các phần tử nằm trên cùng hàng có chỉ số hàng bằng nhau;

 Các phần tử nằm trên cùng cột có chỉ số cột bằng nhau;

 Các phần tử nằm trên cùng một đƣờng chéo song song với đƣờng chéo chính có hiệu chỉ số hàng với chỉ số cột bằng nhau;

 Các phần tử nằm trên cùng một đƣờng chéo song song với đƣờng chéo phụ có tổng chỉ số hàng với chỉ số cột bằng nhau;

Vì thế ta gọi các đƣờng chéo song song với đƣờng chéo chính là đƣờng chéo trừ (hay hiệu), các đƣờng chéo song song với đƣờng chéo phụ là đƣờng chéo cộng (hay tổng). Nhƣ vậy ta đã có thể khẳng định rằng bài toán n-quân hậu nhƣ một hình vông Latin trực giao với kích thƣớc tùy thuộc vào giá trị của n.

3.1.3. Loại bỏ đối xứng bằng phƣơng pháp thêm ràng buộc trƣớc khi tìm kiếm

nghiệm

Nắm đƣợc yêu cầu và tính chất của bài toán, với cách ký hiệu và phân tích nhƣ trên ta nhận thấy rằng mỗi lời giải có thể đƣợc biểu diễn phải thỏa mãn các điều kiện:

- Các chỉ số cột các quân hậu đôi một khác nhau, hay chúng lập thành một hoán vị của các số 1, 2, …, n.

- Hiệu chỉ số dòng và cột của các quân hậu đôi một khác nhau. Tuy nhiên trên đây chỉ đƣa ra những cách ràng buộc về hàng, cột và đƣờng chéo. Nhƣng trong bài toán này chúng ta đã tìm đƣợc 7 đối xứng : phản xạ qua hàng ngang, cột, hai đƣờng chéo, quay 900

, 1800 và 2700. Để đáp ứng yêu cầu bài toán đầy đủ chúng tôi đƣa ra những ràng buộc sau:

- x(Q[i] = j); Q[n-i+1] ≠ j // ràng buộc hàng - y(Q[i] = j); Q[i] ≠ n-j+1 // ràng buộc cột

- d1(Q[i] = j); Q[j] ≠ i // ràng buộc hai đƣờng chéo - d2(Q[i] = j); Q[n-j+1] ≠ n-i+1

- r90(Q[i] = j); Q[j] ≠ n-i+1 // quay 900, 1800, 2700 - r180(Q[i] = j); Q[n-i+1] ≠ n-j+1

- r270(Q[i] = j); Q[n-j+1] ≠ i

3.2. Loại bỏ đối xứng trong thời gian tìm kiếm (Symmetry Breaking During

Search - SBDS)

3.2.1. Giới thiệu về phƣơng pháp SBDS

Trƣớc tiên, chúng ta sẽ cùng nhau tìm hiểu sơ qua về phƣơng pháp này. Chúng ta nhận thấy rằng một tính chất vô cùng quan trọng của đối xứng là nó bảo tồn nghiệm, có nghĩa là: với một phép gán đầy đủ cho A và bất kỳ một đối xứng g

nào, thì g(A) là nghiệm nếu và chỉ nếu A là nghiệm. Thông thƣờng ta mở rộng cho một phép gán thành phần từ A tới A+(var=val), khi đó:

g(A+(var=val)) = g(A)+g(var=val)

Nếu chúng ta cố gắng mở rộng cho từ A tới A+(var=val) và phép gán thành phần này lỗi, việc tìm kiếm sẽ phải chuyển sang nhánh khác, nơi mà var ≠ val. Chúng ta cũng thêm vào nhánh này ràng buộc g(A)→g(var ≠ val) cho mỗi đối xứng g. Điều này có thể đƣợc phát biểu lại nhƣ sau: nếu đối xứng tƣơng đƣơng của phép gán A là đúng, thì g(var ≠ val) cũng sẽ đúng trong tất cả nhánh này. Nếu chúng ta chú ý rằng việc mở rộng từ A tới A  A vars i  j,

mỗi đối xứng g xem g(A) có thỏa mãn hay không. Giá trị cho g(A+) là sự kết hợp của g(A) g(vars[i] = j ). Vì vậy chúng ta có thể tính g(A) từng bƣớc một.

A phép gán thành phần (adsbygoogle = window.adsbygoogle || []).push({});

var= val var val

+g(varval) nếu g(A) là đúng

Hình 3.7: Phương pháp SBDS trong khi tìm kiếm nghiệm

3.2.2. Phƣơng pháp SBDS cho bài toán N-quân hậu

Chúng ta hãy xem hoạt động phƣơng pháp thông qua bài toán 8-quân hậu. Giả sử phép gán đầu tiên của chúng ta là Q1=2, có nghĩa là quân hậu tại hàng đầu tiên ở cột số 2. Trong bài toán 8-quân hậu có 7 đối xứng: quay 900

, 1800, 2700, sự phản xạ theo chiều ngang, chiều dọc và qua hai đƣờng chéo chính. Ví dụ khi Q1=2, ta có nghiệm đối xứng tƣơng ứng với 7 đối xứng trên một cách tƣơng ứng là Q2=8, Q8=7, Q7=1, Q8=2, Q1=7, Q2=1 và Q7=8. Trong đó 4 giá trị cuối tƣơng thích với Q1=2, nên chúng không đƣợc xét trong nhánh này (cắt nhánh dƣ thừa). Nhƣ vậy chúng ta biết ngay là đối xứng bằng phép quay không bị loại bỏ bởi phép gán này. Hình 3.8 sau sẽ minh họa nghiệm đối xứng trong bài toán 8-quân hậu, với phép gán ban đầu là Q1= 1 bằng phép lấy đối xứng từ nghiệm ban đầu ta có:

Quay 900 Quay 1800 Quay 2700

Đối xứng cột Đối xứng đƣờng chéo

Q Q Q Q Q Q Q Q Q Q Q Q Q Q Q Q Q Q Q Q Q Q Q Q Q Q Q Q Q Q Q Q Q Q Q Q Q Q Q Q Q Q Q Q Q Q Q Q

Đối xứng hàng Đối xứng đƣờng chéo

Hình 3.8: Ứng với mỗi nghiệm của bài toán 8-quân hậu sẽ có 7 nghiệm đối xứng với phép gán ban đầu là Q1=1

Xét về phép gán ban đầu là Q1=2 thì sau phép gán này giả sử chúng ta có phép gán thứ hai Q2 = 4 và nhánh này (nhánh trái) lỗi, nhƣ vậy ràng buộc Q2

4 đƣợc tạo ra. Chúng ta thêm ràng buộc g(A)→g(var ≠ val) cho các đối xứng còn lại. Ví dụ, cho đối xứng quay 900, chúng ta có g(Q1= 2)→g(Q2 ≠ 4) điều này tƣơng đƣơng với Q2 = 8→ Q4 ≠ 7.

Q Q Q Q Q Q Q Q Q Q Q Q Q Q Q

Q1= 2

Q1≠2

Q2= 4 Q2≠4

Hình 3.9: SBDS cho bài toán 8-quân hậu

Trong bài toán n-quân hậu, loại bỏ đối xứng vẫn còn là một thách thức, trên bàn cờ vua ta xét vẫn còn đó 7 đối xứng. Để loại bỏ những nghiệm đối xứng, chúng ta cần xem xét lần lƣợt 7 đối xứng này trả lại một nghiệm đại diện duy nhất, tƣơng đƣơng với đối xứng này là var[i] = j. Hai trong số này đƣợc thể hiện trong hình 3.9, var[i] = j tƣơng ứng với Qi = j, và n quân hậu là một biến toàn cục, chúng ta chỉ cần khai báo chức năng đối xứng và kết quả sẽ đƣợc thể hiện cụ thể trong đoạn code bảng 1 dƣới đây. Khi thực hiện nó, số quay lui đƣợc giảm đáng kể, thời gian tìm kiếm giảm đến 75% trong đó các nghiệm tìm thấy là tất cả các nghiệm đối xứng riêng biệt.

Tuy nhiên, trong thực tế vẫn còn một số đối xứng vẫn còn tồn tại sau khi đã thực hiện một hoặc nhiều phép gán, khi đó vẫn còn vấn đề không thể

• Q1= 2→ (Q2 4) r90 ≡ Q4 ≠ 7 • Q1= 2→ (Q2 4) r180 ≡ Q7≠ 5 • Q1= 2→ (Q2 4) r270 ≡ Q5≠ 2 • (Q12) r90 ≡ Q2 ≠ 8 • (Q12) r180 ≡ Q8 ≠7 • Q12) r270 ≡ Q7≠ 1 • Q12) x ≡ Q1≠ 7 • Q12) y ≡ Q8 ≠ 2 • Q12) d1 ≡ Q2 ≠ 1 • Q12) d2 ≡ Q7 ≠ 7

thứ tự: Q1, Q2, Q3, …Chúng ta có thể thêm ràng buộc Q1 n+1-Qn để ngăn chặn trong nhiều trƣờng hợp tìm kiếm đƣợc 2 nghiệm tƣơng đƣơng. Nhƣng điều này vẫn có thể xảy ra nếu Q1 = 2 và Qn = n-1. Để loại bỏ điều này, chúng ta có thêm một ràng buộc mới với điệu kiện:

1 2 1 ifQ   n 1 Q then Qn   n 1 Qn Chúng ta có thể cần thêm ràng buộc: 3 2 1 2 1 1 ifQ   n 1 Q and Qnn 1 Qnthen Q   n Qn , …

Để chắc chắn loại bỏ hoàn toàn đối xứng này, chúng tôi xây dựng thêm n/2 ràng buộc với nhiều điều kiện hơn trƣớc.

Có hai thuận lợi trong việc dùng SBDS so với việc thêm ràng buộc vào mô hình:

 Nó có tính toàn diện: nếu chúng ta thêm một hàm mô tả đối xứng, chúng ta có thể loại bỏ đối xứng đó, trong khi chúng ta khó có thể đạt đƣợc hiệu quả tƣơng tự nhờ việc thêm ràng buộc vào mô hình  SBDS không tranh chấp, mâu thuẫn với các chiến lƣợc tìm kiếm

(trật tự các biến và các giá trị gán), nó chỉ làm nhiệm vụ ngăn những giá trị đối xứng đƣợc gán khi tiến hành quay lui. Ngƣợc lại, việc thêm ràng buộc vào mô hình có thể gây mâu thuẫn với chiến lƣợc tìm kiếm.

3.3. Loại bỏ đối xứng nhờ việc nhận ra sự ƣu thế (Symmetry Breaking by Dominance Detection – SBDD) Dominance Detection – SBDD) (adsbygoogle = window.adsbygoogle || []).push({});

3.3.1. Giới thiệu về phƣơng pháp SBDD

SBDD là phƣơng pháp có thể nhận ra đối xứng trong quá trình tìm kiếm. Tại mỗi thời điểm thuật toán tìm kiếm tạo ra một nút mới, nó sẽ kiểm tra xem nút đó có phải là một đối xứng với những nút đã đƣợc xét hay không. Nếu đúng, nhánh đó có thể bị cắt. Nếu không quá trình tìm kiếm diễn ra bình thƣờng. Mục đích của loại bỏ đối xứng là tránh khám phá phần không gian Δ mà có thể đƣợc ánh xạ từ phần đã đƣợc xét bằng một hàm đối xứng. Bởi vì nếu không chứa bất kỳ một

nghiệm nào, thì Δ cũng không chứa nghiệm. Ngƣợc lại, tất cả các nghiệm trong Δ có thể đƣợc suy ra từ phần đã xét. Trƣớc hết, chúng ta cần nêu ra một số định nghĩa.

Định nghĩa 3.8

Gọi X = {x1,…, xn} là tập biến của mô hình, D(x) là miền của biến xX. Bộ P c= (Dc(x1), …, Dc(xn)) là trạng thái đƣợc chọn hiện tại của điểm c.

Định nghĩa 3.9

Gọi P c = (Dc(x1),…, Dc(xn)), P c’= (Dc’(x1),…, Dc’(xn)) là hai trạng thái đƣợc xét.

o Nếu P c’bao gồm P c và ta ký hiệu P c  P c’ nếu và chỉ nếu: xX: Dc  Dc’

o Chúng ta đặt MDc = Dc(x1) ×…×Dc(xn)

o Một ánh xạ đối xứng φ: MDc →MDc, chúng ta nói rằng P c’ “Lấn át”

(dominate) P c (với ánh xạ đối xứng φ) nếu và chỉ nếu φ(P c )∠P c’. Khi đó chúng ta ký hiệu P c∠P c’

Hệ quả 3.10

Cho hai điểm chọn c c’, trong đó c’ là thế hệ sau của c trong cây tìm kiếm. Khi đó chúng ta có: P c’  P c

Giải pháp mà SBDD dùng để cắt bớt phần đối xứng trong không gian tìm kiếm đƣợc dựa trên sự tích hợp sau:

o Một cơ sở dữ liệu T dùng để chứa toàn bộ thông tin của không gian tìm kiếm đã đƣợc duyệt.

o Một hàm chỉ định: Φ: (PΔ, P�) → {false, true} trả giá trị true nếu và chỉ nếu PΔ bị “Lấn át” bởi P� với một số hàm đối xứng φ

o Các đối xứng sẽ sử dụng thuật toán lan truyền, với mọi biến x, việc loại bỏ mọi giá trị b từ miền x sao cho Φ(PΔ[x=b], P�) = true.

ngƣợc lại chúng ta có thể dùng hàm Φ áp dụng thuật toán lan truyền. Chúng ta hãy xem hình 3.10, minh họa cho SBDD.

(a) (b)

Hình 3.10: Minh họa cách thức hoạt động của SBDD: Nút trắng là nút đang đối được xét, nút đen là nút đã được xét hoàn toàn. Hình vuông là trạng thái trong T, hình tròn thể hiện nó không ở trong T hoặc đã ở trong T . Hình tam giác chỉ nút hiện tại đang xét. (a) Ban đầu, trạng thái Δ phải được kiểm tra thông qua toàn bộ các nút đã được xét. (b) Dùng DFS, nút hiện tại chỉ cần so sánh với các nút kề-trái (từ nút gốc tới Δ).

Chúng ta có hai cách tìm kiếm khi áp dụng phƣơng pháp này, đó là: tìm kiếm theo chiều sâu (DFS-Depth First Search) và tìm kiếm tùy ý (theo một cách thức khác). Tuy nhiên khi áp dụng tìm kiếm tùy ý, số trạng thái cần lƣu trữ trong T

sẽ tăng lên rất nhanh và rất lớn. Do vậy SBDD sẽ chỉ phù hợp nhất với DFS. Phần kế tiếp sẽ giới thiệu cách thức thực hiện SBDD.

3.3.2. Phƣơng pháp SBDD với DFS

Với DFS, chúng ta không cần lƣu trữ toàn bộ trạng thái phía trƣớc. Thay vào đó chúng ta chỉ cần lƣu trữ các nút các nút anh em bên trái trong T để có thể quay lui. Chúng ta xét bổ đề sau:

Bổ đề 3.11:

Cho c là điểm chọn với trạng thái P c = (Dc(x1),…, Dc(xi),…, Dc(xn)), trong đó i là chỉ số biến nhánh trong c, và Dc(xi)={v1, …, vn}D(xi). Hơn nữa, ta ký hiệu P ck = (Dc(x1),…, {vi},…, Dck(xn)), 1 ≤ k ≤ l là trạng thái của con c1, …, cn của c. Cuối cùng, coi P c’

là trạng thái trong điểm chọn c’ với P c’P ck ứng với một số 1 ≤ k ≤ n.

Khi đó: P c’∠P c

Dùng bổ đề 4.3 khi kết hợp với DFS, ta có thể thực hiện một cách hiệu quả (adsbygoogle = window.adsbygoogle || []).push({});

Một phần của tài liệu lập trình ràng buộc với bài toán n quân hậu (Trang 39)