Tài liệu hạn chế xem trước, để xem đầy đủ mời bạn chọn Tải xuống
1
/ 14 trang
THÔNG TIN TÀI LIỆU
Thông tin cơ bản
Định dạng
Số trang
14
Dung lượng
87,92 KB
Nội dung
LÍ THUYẾT TRỊ CHƠI Chun đề DHBB 2017 – Tin học Impartial Combinatorial Games Impartial Combinatorial Games Các trò chơi đối kháng hai người hình thành từ lâu nh ững người chơi ln cố gắng tìm cách để giành phần thắng V ề lí thuyết khả thắng thua trị chơi hồn tồn ti ền định Chính xác hơn, trị chơi cho trước vị trí ban đầu kết tốt mà ng ười chơi đạt tính tốn (gi ả thiết hai người ch đ ều chơi tối ưu) Tuy nhiên khối lượng tính tốn q l ớn nên khả th ực hi ện nước tối ưu số trò chơi không t ưởng Do cho đ ến nay, ch ỉ số lượng nhỏ trò chơi đối kháng giải trọn vẹn Bài vi ết gi ới thiệu hai cách tiếp cận trò chơi đối kháng hai người: tìm ki ếm mini-max hàm grundy Mơ hình đồ thị trị chơi đối kháng Cho đồ thị định hướng (đồ thị có tập đỉnh , tập cạnh ), ta định nghĩa t ức t ập đ ỉnh đ ến từ Một trò chơi hai người tương ứng với đồ thị định hướng m ỗi tr ạng thái ch tương ứng với đỉnh đồ thị, hàm qui tắc chơi theo nghĩa ch ứa đ ỉnh hay tr ạng thái chơi mà từ đến Hai người luân phiên th ực hi ện l ượt đi, th ế ch ng ười chơi cho nước nhận thoả mãn Trị chơi k ết thúc khơng th ể ti ếp (Thơng thường người khơng thể tiếp người thua cuộc) Ta phân chia trò chơi thành hai loại: trò chơi l ựa ch ọn đ ối t ượng trò ch l ựa ch ọn nhiều đối tượng tùy theo khả phân rã đồ thị tương ứng trò ch thành đ th ị độc lập Trò chơi lựa chọn đối tượng Loại trị chơi lựa chọn đối tượng hiểu trực quan n ước th ực hi ện đối tượng (nên không phân rã thành đồ thị độc lập được) Ví dụ Trị chơi tổng phương Bắt đầu số nguyên dương , hai đấu thủ A, B tr b ớt s ố m ột s ố phương dương cho phần cịn lại không âm Đấu thủ thua không th ực hi ện đ ược nước lượt Nếu người chơi tối ưu li ệu người thứ có khả thắng? Phân tích 10 11 12 13 14 Lượt chơi có hiển nhiên thua Lượt chơi có chiến thắng sau lượt [2|14] Impartial Combinatorial Games Lượt chơi trao cho đối thủ nên chắn thua Lượt chơi trao cho đối thủ nên chắn thắng Lượt chơi trao cho đối thủ (chắc chắn thắng) nên chắn thua … Bằng cách phân tích tương tự ta tìm khẳng định ch ắc ch ắn cho b ất kì (mi ễn có đ ủ thời gian tính tốn) Để tổng quát hóa cách làm trên, ta đưa khái niệm thắng, thua • • • Khi đến lượt chơi mà khơng cịn nước ta th ế thua (gọi th ế thua sở) Nếu lượt chơi thực nước đưa đối phương vào thua ta thắng Nếu nước lượt chơi đưa đối phương vào thắng ta th ế thua Định nghĩa truy hồi cho phép ta áp dụng phép tìm n ước theo chi ến l ược vét c ạn v ới trị chơi có số trạng thái đủ nhỏ (dĩ nhiên) Ngoài ra, giả thiết hai đấu thủ chơi tối ưu nên tính thắng/thua c tr ạng thái tiền định, thực phương pháp loang thông thường để tô màu tr ạng thái (quyết định thắng/thua) Nếu trò chơi khơng định thắng/thua mà cịn tính ểm n ước m ỗi nước đi, đấu thủ ln mong muốn giành ểm số cao nh ất k ết thúc trị ch Tương tự thấy chiến lược thực nước là: chọn n ước cho sau với cách tốt đối phương, điểm giành đ ược l ớn có th ể Chính xác h ơn, đối phương cố gắng cực tiểu hóa điểm số ta, ta cần th ực hi ện n ước cho điểm số cực tiểu lớn Đây lí cách ti ếp c ận có tên tìm ki ếm mini-max Ta xét số tốn ví dụ Ví dụ GAME Một trị chơi đối kháng hai người A B di ễn nh sau: Hai ng ười luân phiên điều khiển tốt theo số đường cho tr ước M ột người có th ể di chuy ển tốt từ vị trí đến có đường nối trực tiếp định hướng t đến Trò ch k ết thúc tiếp tục di chuyển Đấu thủ thực n ước ng ười thua cu ộc H ỏi cho trước vị trí ban đầu danh sách đường nối ng ười tr ước th ắng, thua hay hồ? Giả hai người ln chơi tối ưu Input: GAME.IN - Dòng đầu ghi số N số vị trí tốt đứng, số M số đường (định hướng) mà tốt (1≤ N ≤ 200, ≤ M ≤ N*(N-1)) Dòng thứ hai ghi u trạng thái bắt đầu M dòng dòng ghi hai số u, v mô tả đường từ u đến v [3|14] Impartial Combinatorial Games Output: GAME.OUT - Ghi số 1, 2, tương ứng với người thắng, thua hay hồ Phân tích - Những vị trí khơng có đường chắn thua Những vị trí có đường nối với vị trí chắn thua chắn thắng Những vị trí tất đường nối v ới vị trí ch ắc ch ắn th ắng ch ắc chắn thua Những vị trí mà trạng thái thắng thua khơng thể xác định vị trí hồ Thuật tốn - - Ban đầu coi tất vị trí hồ gán giá trị đỉnh Tìm vị trí khơng có đường gán lại (vị trí thua) Khi thay trạng thái vị trí từ hồ sang thắng thua ki ểm tra v ị trí có đường đến nó: Những vị trí có đường nối v ới vị trí chắn thua () chắn thắng (thay ); Những vị trí u t ất đường nối v ới đ ều n ối v ới vị trí có (chắc chắn thắng) chắn thua (thay ) Quá trình ngừng khơng có chuyển trạng Trị chơi hịa xuất chu trình Ví dụ LGAME Cho bảng kích thước 4*4 vng, đặt hai th ước th ợ hình L kích th ước vng hai hình trịn hình vẽ, hình nằm b ảng khơng đ ược đè lên Hình kẻ ca rơ người chơi A, hình kẻ sọc người chơi B Hai người ch luân phiên, nước đi, người phải nhấc hình L lên, xoay, l ật tuỳ di chuyển đến vị trí (khác so với vị trí ban đầu), nh v ậy hình đ ầu tiên có hai cách di chuyển Và người chơi thực thêm bước khơng b bu ộc di chuyển trịn đến Trị chơi kết thúc khơng thể di chuyển nữa, người không th ể di chuy ển đ ược thua Tuy nhiên, trò chơi hồ trạng thái c ả hai ng ười đ ều khơng muốn thua (chính xác không dồn đối thủ vào thua) Yêu cầu: Cho trạng thái trò chơi, hỏi trị chơi k ết thúc nh th ế, (hoà, A th ắng hay B thắng, A người trước) Input • Gồm dịng dịng ghi kí tự, ‘.’ thể trống(có ơ), ‘x’ chứa miếng hình trịn (2 ơ), ‘#’ biều thị bị miếng hình L người chơi A đặt lên (có ơ), cịn lại bốn biểu thị bị miếng hình L người chơi B đặt lên [4|14] Impartial Combinatorial Games Output Có ba trường hợp: • A thắng: ghi trạng thái sau A nước dẫn đến trạng thái thắng • A thua: ghi xâu “No winning move Losing” • Hồ: ghi xâu “No winning move Draw” Ví dụ LGAME.IN *** #*.x ### x x ### #*** x * ### x#*x *** LGAME.OUT *** x*#x ### No winning move Draw No winning move Losing Phân tích • Do kích thước bảng nhỏ nên tính tốn số trạng thái vào khoảng 18,000 Từ xây dựng hàm băm hợp lí tiến hành loang để tô màu trạng thái Đôi lúc lưu tất trạng thái số tốn số trạng thái lớn Khi đó, thay xét thắng/thua cho tr ạng thái hi ện th ời ta tính th ế thắng/thua cho trạng thái tương đương Ví dụ Stones Một trò chơi bốc sỏi diễn bảng ngang kích thước 1*N vng Trên m ột s ố có đặt số viên sỏi Tại bước người chơi cầm viên sỏi ô di chuy ển viên sỏi sang bên trái hai ô với điều kiện ô di chuy ển t ới ph ải s ỏi đ ường di chuyển khơng qua có sỏi Người khơng di chuy ển đ ược ng ười thua cu ộc Cho trước trạng thái ban đầu hỏi người trước có n ước đ ầu tiên mà ng ười th ứ hai thua, giả thiết hai người chơi tối ưu Input • Dịng đầu ghi số N(1 ≤ N ≤ 50) • Dịng thứ hai ghi xâu gồm N kí tự thể trạng thái lúc bắt đầu trị chơi, ‘.’ thể trống, ‘X’ thể có sỏi (số viên sỏi khơng vượt 10) Output • Ghi số số nước mà thắng [5|14] Impartial Combinatorial Games Ví dụ STONES.IN X.X XX STONES.OUT Phân tích Nếu coi trạng thái đỉnh đồ thị rõ ràng tốn theo lý thuy ết có th ể tính đ ược kết Nhưng thực tế số trạng thái lớn (có thể lên đến ) Vì trước hết cần làm giảm số lượng trạng thái cần xét Đ ầu tiên ta th tr ạng thái c người chơi đặc trưng dãy số nguyên không âm s ố t ự phía tr ước m ỗi viên sỏi, ví dụ: xâu “ XX.X” thay dãy {3, 0, 1} Tuy nhiên m ới ch ỉ cách mã hóa tr ạng thái, ta xét thắng thua dãy lấy đồng d modul c t ất c ả ph ần t dãy, chẳng hạn thay dãy {3,0,1} ta xét dãy {0,0,1} Chứng minh hai dãy tương đương thắng/thua, thật vậy: Gọi dãy ban đầu , dãy sau ước lược ( hàm rút gọn) Vì dãy ước lược nên với cách nước t đ ến có th ể m ột nước đến (cùng vị trí số ô) cho (I) Chẳng hạn với dãy sau nước vị trí với số b ằng đ ến v ới t ại với số ô đến Lúc ta có: Vì bước chơi đối thủ nhằm có lợi cho nên n ếu ng ười ch th ứ nh ất th ực nước từ đến hòng thay đổi thua thành thắng (vốn theo lý thuy ết xác đ ịnh), tức thua, thua mà , suy khơng đến (vì suy thua, thua) suy ng ười ch thực có số tự đằng tr ước l ớn h ơn 3, suy ti ếp ng ười th ứ hai tiếp nước với số ô (3 - số ô người th ứ nh ất đi) Suy người thứ vị trí thua (II) (I)(II) hai dãy tương đương theo kết thắng thua Ví dụ Trị chơi chuyển đá Vào ngày đẹp trời, A nghĩ trị chơi rủ B tham gia Có ô, m ỗi ô ch ứa m ột s ố viên đá Các ô đánh số từ đến Để thực nước đi, A/B ch ọn ô v ới ch ỉ s ố thoả mãn chứa viên đá, sau bỏ viên đá ô đ ồng th ời thêm hai viên đá vào ô ô (mỗi ô viên) Chú ý có th ể b ằng , sau m ỗi b ước t s ố viên đá tăng lên Ai thực nước coi bị thua A trước Nhiệm vụ bạn xác định xem A chiến thắng hay khơng? (gi ả s B ch t ối ưu) Nếu in số mô tả nước c A Nếu có nhi ều k ết qu ả in k ết có nhỏ nhất, có kết chọn kết có nhỏ nh ất, n ếu v ẫn có h ơn kết chọn kết có nhỏ Input • Dịng đầu gồm số ngun số [6|14] Impartial Combinatorial Games • Dịng thứ hai gồm số, số thứ thể số viên đá ô Output • Nếu A thắng in số dịng • Nếu A thua in số –1 Giới hạn • • Số viên đá ô không vượt 1000 Ví dụ INCSTONE.IN 21115 INCSTONE.OUT 011 Phân tích Trạng thái tương đương trạng thái lấy số sỏi mod 2, có nhi ều nh ất tr ạng thái Vậy áp dụng kĩ thuật tìm mini-max Trị chơi lựa chọn nhiều đối tượng Qua cách tiếp cận ta nhận thấy trạng thái ch gồm nhi ều đ ỉnh đồ thị khơng thể thực tìm kiếm mini-max đ ơn thu ần đ ược s ố tr ạng thái lớn, phương pháp giải vấn đề dùng hàm grundy Ví dụ Trị chơi bốc sỏi Hai người chơi bốc sỏi đống sỏi có viên, người đến l ượt ch ỉ đ ược b ốc không viên Xác định khả thắng người trước hai chơi t ối ưu Phân tích Ta khảo sát với Ta đặc trưng cho số sỏi đại lượng để thua sở Với số có nhiều nước thực hi ện đưa đến giá tr ị , đ ặc tr ưng cho b ởi giá trị nguyên không âm nhỏ chưa xuất giá tr ị đ ặc tr ưng c V ới cách làm ta thu bảng: 0 1 2 3 10 11 12 13 14 Dễ nhận thấy có trị đặc trưng khác ta ln có n ước đ ể trao cho đ ối th ủ s ố sỏi có đặc trưng Ngược lại, đặc trưng cho ta khơng có n ước () nước ta dẫn đến số sỏi có đặc trưng khơng Từ rút thua trạng thái có số đặc trưng số đ ặc tr ưng cho th ế thua c sở (*) [7|14] Impartial Combinatorial Games Với trò chơi tương tự tìm số đặc trưng cho tr ạng thái theo cách thu kết luận (*) Đây sở hàm grundy 3.1 Khái niệm Cho đồ thị định hướng khơng có chu trình tập đỉnh, tập cạnh - - - Với đỉnh , ta định nghĩa Một trò chơi hai người định nghĩa đồ thị định hướng m ỗi th ế chơi tương ứng với đỉnh đồ thị tổng (có thể gồm m ột hay nhi ều đ th ị thành phần), hàm qui tắc chơi, đỉnh gán v ới m ột số th ực giá tr ị mà m ỗi đấu thủ nhận nước Hai người luân phiên đi, chơi người chơi có th ể cho n ước nh ận thoả mãn , người nhận đựơc giá trị t ương ứng Trò ch k ết thúc đến lượt chơi mà thực nước Nếu trò chơi kết thúc, tuỳ theo tổng giá trị mà đấu thủ nhận ta có kết có người thắng hay ván đấu hoà Trước hết, ta định nghĩa hàm grundy sau: Cho đồ thị , hàm grundy cách gán cho đỉnh số tự nhiên , cho số tự nhiên nh ỏ nh ất t ập giá tr ị hàm grundy đỉnh kề với 3.2 Các định lý Ta xét lớp tốn trị chơi thoả mãn tính ch ất: Đ th ị t ương ứng đ th ị đ ịnh hướng chu trình người thắng người th ực hi ện n ước cu ối trước kết thúc trị chơi Từ đây, nói đến đồ thị , ta ch ỉ nói đ ến đ th ị th ỏa mãn tính ch ất Định lý Đồ thị DAG có có hàm grundy Chứng minh: Ta xác định hàm grundy sau: • • Ban đầu tất đỉnh chưa tính hàm grundy Lần lượt thực chừng cịn đỉnh chưa tính hàm: Xét đồ thị c sinh tập hợp đỉnh chưa tính hàm, lấy tất đ ỉnh mà t ương ứng b ằng , ta xác định hàm grundy cho đỉnh theo định nghĩa hàm grundy: Chú ý định hướng khơng có chu trình nên m ọi đ th ị c tho ả mãn khơng có chu trình Mặt khác đồ thị định hướng khơng có chu trình ln ln tìm đỉnh khơng có cung tức , t ại b ước xác đ ịnh hàm grundy cho đỉnh Ta thuật toán xác định hàm grundy nh ất, b ằng ph ương pháp qui nạp • Tại bước 0, hiển nhiên đỉnh chọn có giá tr ị hàm grundy , đ ỉnh đ ều có nên theo định nghĩa hàm grundy, cách cho với đỉnh [8|14] Impartial Combinatorial Games • • • Giả sử bước , tất đỉnh tính hàm thỏa hàm t ương ứng xác đ ịnh Khi đó, đỉnh xác định hàm bước khơng có cung nối đến đ ỉnh chưa có hàm, với đỉnh xác định hàm bước này, t ập ch ỉ g ồm đỉnh có hàm xác định nhất, theo đ ịnh nghĩa hàm grundy, hàm xác định Như vậy, đến bước , tất đỉnh đă xác định hàm grundy đ ược xác định cách Định lý chứng minh Định lý Đồ thị nhận hàm grundy tương ứng, đấu thủ đến lượt ch trạng thái có hàm grundy khác đấu thủ ln ln có cách chơi để khơng thua Chứng minh Tại chơi khác 0, ta ln có cách đưa chơi 0, n ếu khơng th ế ch ph ải theo định nghĩa hàm grundy Đối phương ch ỉ có th ể khơng ti ếp đ ược nữa, đến chơi khác cho ta Như vậy, đến lượt ta th ế ch khác 0, t ức ta không thua, trường hợp đồ thị hữu hạn khơng có chu trình ta thắng Hệ quả: Với đồ thị hữu hạn ta ln xác định người chiến thắng Như vấn đề phải xác định hàm grundy Cần phải ý r ằng n ếu đ th ị khơng DAG có nhiều hàm grundy, nên kết không Xét định nghĩa phép cộng đồ thị: Cho hai đồ thị đó, đồ thị có: Tổng quát ta định nghĩa qui nạp Định lý Cho nhận hàm grundy tương ứng Khi đó: nhận hàm grundy thoả mãn: Chứng minh: Vì G thoả mãn tính chất nên có hàm grundy nh ất Đ ể ch ứng minh công thức hàm grundy , ta chứng minh v ới t ừng đ ỉnh theo th ứ t ự nh đ ịnh lý 1: Khi xét đỉnh đỉnh tập thoả mãn Ta có hai tính chất sau: Cách cho hàm thoả mãn khác với n ếu ng ược l ại : ch ỉ khác thành phần biểu diễn , giả sử thành phần thứ , mâu thuẫn Hàm nhỏ tập giá trị thoả mãn tính chất 1: Giả sử thỏa mãn, biểu diễn nhị phân, gọi vị trí sai khác gi ữa dễ th c cịn Vì vị trí nên tồn thành phần, giả sử có biểu di ễn nhị phân v ị trí th ứ b ằngnên tồn cho Khi đó: có khơng thoả mãn hàm grundy [9|14] Impartial Combinatorial Games Cách khác: Giả sử thoả mãn suy tồn số vị trí xảy s ự sai khác v ề cách bi ểu di ễn nhị phân vị trí: Trong cịn c L cho bit th ứ Bi ến đ ổi thành cho vị trí đảo ngược (Ln biến đổi ) Lúc Đi ều vơ lý ch ứng t ỏ khơng tồn Từ hai tính chất khẳng định hàm grundy Một ứng dụng quan trọng hàm grundy gi ải đ thị h ợp b ằng công th ức c ộng đ thị Ta xét số tốn cụ thể Ví dụ Trị chơi NIM Hai người chơi trò chơi bốc sỏi với đống sỏi với số sỏi t ương ứng M ỗi l ượt ng ười ch chọn đống sỏi bốc số lượng tùy ý sỏi đống (có th ể b ốc h ết) Trị ch kết thúc khơng cịn sỏi để bốc người chơi không thực hi ện n ước thua cu ộc Hãy xác định khả thắng người trước nước người Phân tích Rõ ràng trò chơi lựa chọn nhiều đối t ượng M ỗi đối t ượng m ột đ ống s ỏi có th ể tách thành đồ thị Kết đồ thị hay áp dụng trò chơi với đống sỏi hi ển nhiên người trước việc bốc tất số sỏi đống Để có kết đồ thị hợp ta cần hàm grundy cho đồ thị Dễ thấy chúng Vậy hàm grundy đồ thị hợp Người trước thắng , nước chiến thắng xác định sau: • Nếu bốc đống , số sỏi lại đống phải thỏa: • Do , số sỏi cịn lại đống phải • Vậy có cách bốc chiến thắng từ đống Ví dụ Staircase-Nim Trò chơi diễn cầu thang bậc đánh số chân cầu thang coi bậc Tại bậc có viên sỏi Hai người chơi luân phiên thực lượt ch ơi, m ỗi l ượt người ch chuy ển m ột số lượng nguyên dương sỏi bậc xuống bậc liền Người không th ực hi ện lượt chơi người thua Phân tích • Khả chiến thắng phụ thuộc vào số sỏi bậc lẻ, người chơi trước thực chuyển sỏi từ bậc xuống bậc , người chơi sau cần chuyển sỏi xuống bậc dãy số lượng sỏi bậc lẻ giữ nguyên • Như bỏ qua số lượng sỏi bậc chẵn, coi lượt chơi chuyển sỏi từ bậc lẻ Khi lượt chơi tương đương với việc bốc bỏ sỏi bậc lẻ [10|14] Impartial Combinatorial Games • Trị chơi tương đương với trò chơi Nim với đống sỏi bậc lẻ Ví dụ Bốc sỏi khơng giảm Trị chơi diễn với đống sỏi đánh số , số sỏi đống , dãy phải đ ược đảm bảo dãy không giảm thời điểm Hai người chơi luân phiên thực hi ện l ượt ch ơi, m ỗi l ượt, người chơi phải bốc bỏ khỏi đống l ượng sỏi nguyên dương (và v ẫn đ ảm bảo dãy số lượng sau dãy khơng giảm) Người khơng th ực hi ện đ ược l ượt ch c người thua Phân tích Xét dãy số chênh lệch sỏi đống liên tiếp: Dãy gồm tồn số ngun khơng âm suốt tiến trình chơi Việc bốc số lượng sỏi khỏi đống làm gi ảm tăng m ột l ượng Nghĩa trò ch t ương đương với Staircase-Nim có dãy sỏi bậc tương ứng Ví dụ 10 Misère Nim Trị chơi Nim với quy định phải bốc viên sỏi cuối người thua Phân tích • Nếu tất đống sỏi có viên sỏi người trước (An) thắng số đống sỏi số chẵn • Nếu có đống sỏi có số sỏi lớn An tất thắng điều khiển số lượng đống sỏi có sỏi cách bốc tồn hay chừa lại sỏi đống • Trong trị chơi Nim, nước chiến thắng khơng đưa đến trạng thái cịn đống sỏi • Vậy An chơi theo quy luật trò chơi Nim nhận trạng thái đống sỏi có số lượng sỏi lớn 1, An bốc tất chừa lại sỏi đống phân tích Ví dụ 11 Pawns (ROI) Một trò đối kháng diễn hai người mô tả cách đơn gi ản nh sau: Có N bàn cờ đặc biệt, với có tập khác mà có th ể đ ến sau m ột n ước đi, cho thoả mãn không tồn dãy n ước xu ất phát t m ột ểm sau h ữu h ạn bước quay trở lại ban đầu Hiện có T qn c T có th ể trùng Hai ng ười luân phiên đi, bước người chơi c ầm quân c di chuy ển đ ến m ột mà đến sau bước Trò chơi k ết thúc không th ể ti ếp Ng ười người thua Cho biết trước trạng thái ban đ ầu, t ập có th ể đ ến đỉnh Yêu cầu xác định người trước thắng hay thua? Input • Dòng đầu ghi số N (1