Skip to main content

Một số thuật toán áp dụng trong các trò chơi trí tuệ - Tìm hiểu về trí tuệ nhân tạo (Phần 1)

Như chúng ta đã biết việc nghiên cứu trí tuệ nhân tạo (Artificial Intelligence – AI)  có thể đi theo nhiều lĩnh vực khác nhau như:
Ø Lập luận, suy diễn tự động.
Ø Biểu diễn tri thức.
Ø Lập kế hoạch.
Ø Học máy: một lĩnh vực nghiên cứu của AI đang được phát triển mạnh mẽ và có nhiều ứng dụng trong các lĩnh vực khác nhau như khai phá dữ liệu, khám phá tri thức,…
Ø Xử lý ngôn ngữ tự nhiên: một nhánh của AI, tập trung vào các ứng dụng trên ngôn ngữ của con người. Các ứng dụng trong nhận dạng tiếng nói, nhận dạng chữ viết, dịch tự động, tìm kiếm thông tin,…
Ø Hệ chuyên gia: cung cấp các hệ thống có khả năng suy luận để đưa ra những kết luận. Các hệ chuyên gia có khả năng xử lý lượng thông tin lớn và cung cấp các kết luận dựa trên những thông tin đó. Có rất nhiều hệ chuyên gia nổi tiếng như các hệ chuyên gia y học MYCIN, đoán nhận cấu trúc phân tử từ công thức hóa học DENDRAL, …
Ø Robotics: nghiên cứu, chế tạo robot có trí thông minh, khả năng giao tiếp ứng xử như con người.
Ø Trò chơi trí tuệ: nghiên cứu, áp dụng các giải thuật thiết kế trò chơi có khả năng tinh toán, áp dụng nước đi như con người.

Trong loạt bài về trí tuệ nhân tạo này, mình và các bạn sẽ cùng đi tìm hiểu từng lĩnh vực ứng dụng của AI ở trên, và bài viết hôm nay chúng ta sẽ bắt đầu với một số thuật toán được ứng dụng trong các trò chơi trí tuệ.
1. Giải thuật Heuristic
1.1 Khái niệm Heuristic
“Heuristic là phương pháp tiếp cận bằng cảm tính, mang tính kinh nghiệm, dùng trong phương pháp "thử và sai" để giải quyết tương đối các bài toán khó.
+Heuristic là một khả năng ước lượng dẫn đến lời giải
+Heuristic là những tri thức được rút tỉa từ những kinh nghiệm, “trực giác” của con người
+Heuristic có thể là những tri thức “đúng” hoặc “sai”
+Heuristic là những “tri thức siêu cấp” được dùng để đánh giá tri thức khác, đánh giá kết quả của quá trình suy diễn hoặc kiểm chứng các tri thức mới và “thường đúng”
1.2  Đặc tính và nguyên lý
Thuật giải Heuristic là một sử mở rộng khái niệm của thuật toán. Nó thể hiện cách giải bài toán với những đặc tính sau:
+Tìm được lời giải tốt
+Thời gian giải bài toán chấp nhận được
+Khá tự nhiên, gần gũi với cách suy nghĩ và hành động của con người
Có nhiều phương pháp để xây dựng một thuật giải Heuristic, người ta thường dựa vào một số nguyên lý cơ bản sau:
+Nguyên lý vét cạn thông minh: là dựa vào cách tìm đặc biệt để tìm lời giải.
+Nguyên lý tham lam (greedy): lấy tiêu chuẩn tối ưu của bài toán (toàn cục) làm tiêu chuẩn của từng bước giải (cục bộ) để tìm lời giải.
+Nguyên lý thứ tự: thực hiện hành động dựa trên một thứ tự hợp lý để tìm lời giải
Dưới đây ta sẽ xem một ví dụ của thuật giải Heuristic theo nguyên lý tham lam để xem cách mà thuật giải hoạt động:
VD: Hãy tìm hành trình cho một người giao hàng đi qua n điểm khác nhau, mỗi điểm đi qua một lần và trở về điểm xuất phát sao cho tổng chiều dài đoạn đường đi là ngắn nhất. Giả sử rằng có con đường nối trực tiếp từa giữa hai điểm bất kỳ.
Đồ thị bài toán như sau:
                 









                          


Ta có thể sử dụng một thuật giải Heuristic với nguyên lý tham để tìm một lời giải tương đối tối. Ý tưởng như sau:
+Từ điểm khởi đầu, liệt kê tất cả quãng đường tới n điểm còn lại rồi chọn đi theo con đường ngắn nhất.
+Khi đã đến một điểm, chọn đến điểm kế tiếp theo nguyên tắc ở trên. Tức là liệt kê tất cả con đường và điểm ta đang đứng đến những điểm chưa đi đến. Chọn con đường ngắn nhất. Lặp lại quá trình cho đến lúc không còn điểm nào để đi.
Cách chọn đường đi thể hiện trong hình dưới đây:

 





Chúng ta thấy hành trình tìm được sẽ có tổng là 14
Tuy nhiên đó là một đường đi tương đối tốt mà thuật giải Heuristic đã tìm thấy cho chúng ta chứ chưa phải là đường đi tối ưu nhất. Quãng đường tối ưu có tổng chiều là bằng 10 (1>2>5>4>3>1).
1.3   Hàm đánh giá Heuristic
Hàm đánh giá Heuristic là các hàm đánh giá thô, giá trị của hàm phụ thuộc vào giá trị hiện tại của bài toán tại mỗi bước giải, giúp chọn được cách hành động tương đối hợp lý trong từng bước của giải thuật
Thông thường trong một bài toán tìm kiếm có thông tin, người ta gọi là tìm kiếm thông tin Heuristic hay là Hàm đánh giá Heuristic.
2.   Các phương pháp tìm kiếm Heuristic
Trước khi tìm hiểu tổng quan về các phương pháp tìm kiếm, ta sẽ xem xét cấu trúc chung của một trò chơi, hay một bài toán có dạng như thế nào. Thông thường thì chúng có dạng “tìm đường đi trong đồ thị” hay cách nói khác là “xuất phát từ một đỉnh của đồ thị, tìm đường đi hiệu quả nhất đén một đỉnh nảo đó”.
2.1    Tìm kiếm theo chiều sâu
Là kỹ thuật tìm lời giải theo các cung của không gian bài toán theo chiều dọc, xử lý theo trật tự xác định.
Bắt đầu từ môt nút rồi tiếp tục đến khi hoặc gặp ngõ cụt, hoặc đến đích. Nếu không đi tiếp được, tức là đến ngõ cụt, hệ thống quay lại một mức trên đồ thị và tìm theo hướng khác. Quay lại một mức ở đây là quay lại mức trước đó của trạng thái hiện hành (trạng thái biến đổi thành trạng thái hiện hành). Nếu cứ quay lui đến trạng thái khởi đầu mà vẫn thất bại thì ta kết luận là không có lời giải.


2.2    Tìm kiếm theo chiều rộng
Là kỹ thuật tìm kiếm lời giải trên tất cả các nút của một mức trong không gian bài toán trước khi chuyển sang các nút của mức tiếp theo.
Nếu như tìm kiếm theo chiều sâu chỉ tìm kiếm lưu ý đến mở rộng trạng thái được chọn mà không mở rộng các trạng thái khác thì ngược lại với nó, tìm kiếm theo chiều rộng mang hình ảnh của vết dầu loang. Bắt đầu tìm kiếm lời giải từ mức đầu tiên (mức đỉnh của đồ thị), nếu mức này không có lời giải, nó chuyển xuống mức sau để tiếp tục tìm kiếm cho đến khi định vị được lời giải (nếu có).

     
            Một số so sánh giữa hai phương pháp tìm kiếm:


Chiều sâu
Chiều rộng
Tính hiệu quả
Hiệu quả khi lời giải nằm sâu trong cây tìm kiếm và có một phương án chọn hướng đi chính xác. Hiệu quả của chiến lược phụ thuộc vào phương án chọn hướng đi. Phương án càng kém hiệu quả thì hiệu quả của chiến lược càng giảm. Thuận lợi khi muốn tìm chỉ một lời giải.
Hiệu quả khi lời giải nằm gần gốc của cây tìm kiếm. Hiệu quả của chiến lược phụ thuộc vào độ sâu của lời giải. Lời giải càng xa gốc thì hiệu quả của chiến lược càng giảm. Thuận lợi khi muốn tìm nhiều lời giải.
Lượng bộ nhớ sử dụng để lưu trữ các trạng thái
Chỉ lưu lại các trạng thái chưa xét đến.
Phải lưu toàn bộ các trạng thái.
Trường hợp xấu nhất
Vét cạn toàn bộ
Vét cạn toàn bộ.
Trường hợp tốt nhất
Phương án chọn hướng đi tuyệt đối chính xác. Lời giải được xác định một cách trực tiếp.
Vét cạn toàn bộ.

Tìm kiếm theo chiều sâu và tìm kiếm theo chiều rộng đều là các phương pháp tìm kiếm có hệ thống và chắc chắn tìm ra lời giải. Tuy nhiên hai phương pháp này đều là tìm kiếm vét cạn, với bài toán không gian lớn thì không thể dùng hai chiến lược tìm kiếm này. Hơn nữa, hai chiến lược này đều có tính chất “mù quáng” vì chúng không chú ý đến những thông tin (tri thức) ở trạng thái hiện thời và thông tin về đích cần đạt tới cùng mối quan hệ giữa chúng. Các tri thức này vô cùng quan trọng và rất có ý nghĩa để chúng ta thiết kế các thuật giải hiệu quả hơn, chẳng hạn như thuật giải tìm kiếm leo đồi (hill-climbing) và tìm kiếm tốt nhất đầu tiên (best-first-search).
2.3    Tìm kiếm leo đồi (Hill-Climbing)
Tìm kiếm leo đồi là phương pháp tìm kiếm theo kiểu tìm sâu và sử dụng những thông tin phản hồi về các trạng thái để xác định hướng đi tiếp nào là tốt. Hay nói cách khác, leo đồi là tìm sâu kết hợp với việc sử dụng hàm đánh giá Heuristic để biết trạng thái nào tốt hơn. Phương pháp leo đồi chú trọng vào việc tìm xem hướng đi nào dễ dẫn tới trạng thái đích nhất. Thông thường leo đồi hoạt động bằng việc chọn một trạng thái tốt hơn trạng thái đang khảo sát để phát triển việc tìm kiếm. Tuy nhiên, khác với tìm kiếm sâu, leo đồi không lưu tất cả các trạng thái con mà chỉ lưu đúng một trạng thái được chọn nếu có.
Nếu như chỉ chọn một trạng thái tốt hơn, ta sử dụng leo đồi đơn giản; còn chọn trạng thái tốt nhất, ta sử dụng leo đồi dốc đứng.
Tư tưởng thuật giải leo đồi đơn giản:
1. Xét trạng thái ban đầu:
   -Nếu là đích thì thoát và thông báo đã tìm được lời giải
   -Ngược lại, đặt trạng thái hiện hành là trạng thái ban đầu
2. Lặp đến khi: gặp được đích hoặc không còn trạng thái tiếp theo nào hợp lệ của trạng thái hiện hành:
   -Đặt một trạng thái mới là trạng thái tiếp theo hợp lệ của trạng thái hiện hành
   -Đánh giá trạng thái mới này:
               +Nếu là đích => dừng
               +Nếu không là đích, nhưng tốt hơn trạng tái hiện hành => cập nhật nó thành trạng thái hiện hành
               +Nếu không tốt hơn thì tiếp tục lặp
Tư tưởng thuật giải leo đồi dốc đứng
1. Xét trạng thái ban đầu:
   -Nếu là đích thì thoát và thông báo đã tìm được lời giải
   -Ngược lại, đặt trạng thái hiện hành là trạng thái ban đầu
2. Lặp đến khi: gặp được đích hoặc không còn tồn tại một trạng thái tiếp theo nào tốt hơn trạng thái hiện hành
   -Đặt ra một tập các trạng thái kế tiếp có thể có của trạng thái hiện hành và tốt hơn nó
   -Xác định một trạng thái là trạng thái tốt nhất trong tập các trạng thái kế tiếp
   -Đặt trạng thái hiện hành là trạng thái tốt nhất đó
Tuy tư tưởng là như thế, song cả hai phương pháp leo đồi đơn giản và leo đồi dốc đứng đều có khả năng thất bại trong việc tìm lời giải của bài toán mặc dù lời giải đó thực sự hiện hữu. Cả hai giải thuật đều có thể kết thúc khi đạt được một trạng thái mà không còn trạng thái nào tốt hơn nữa có thể phát sinh nhưng trạng thái này không phải là trạng thái đích. Điều này sẽ xảy ra nếu chương trình đạt đến một điểm cực đại địa phương hay một đoạn đơn điệu ngang.
Điểm cực đại địa phương (a local maximum) : là một trạng thái tốt hơn tất cả lân cận của nó nhưng không tốt hơn một số trạng thái khác ở xa hơn. Nghĩa là tại một điểm cực đại địa phương, mọi trạng thái trong một lân cận của trạng thái hiện tại đều xấu hơn trạng thái hiện tại.
Đoạn đơn điệu ngang (a plateau) : là một vùng bằng phẳng của không gian tìm kiếm, trong đó, toàn bộ các trạng thái lân cận đều có cùng giá trị.
Nói một cách ngắn gọn, leo đồi dốc đứng sẽ tốn nhiều thời gian hơn cho một bước nhưng lại đi ít bước hơn; còn leo đồi đơn giản tốn ít thời gian hơn cho một bước đi nhưng lại phải đi nhiều bước hơn. Đây chính là yếu tố được và mất giữa hai thuật giải nên ta phải cân nhắc kỹ lưỡng khi lựa chọn thuật giải.
2.4 Tìm kiếm tốt nhất đầu tiên (Best-first-search)
Kỹ thuật BFS kết hợp ưu điểm không phải quan tâm đến sự mở rộng tất cả các nhánh của tìm sâu và không bị sa vào các đường dẫn bế tắc (các nhánh cụt) của tìm rộng.
Kỹ thuật BFS sử dụng hàm đánh giá Heuristic. Dựa vào mức độ của bài toán tại các nút, hàm đánh giá sẽ gán con số, trọng số cho mỗi nút. Con số này được xem xét trong lúc tìm kiếm, nút mang trọng số lớn nhất sẽ được chọn trong quá trình tìm kiếm.
Tại mỗi bước của BFS, giải thuật sẽ chọn trạng thái mà nó cho rằng là có ưu thế nhất trong số các trạng thái đã sinh ra được đến thời điểm đó.
Khác với giải thuật leo đồi có cải tiến ở chỗ: có lưu tất cả những trạng thái đã phát sinh đến thời điểm chọn trạng thái để xét tiếp.
Ta xem một ví dụ: Khởi đầu, chỉ có một nút (trạng thái) A nên nó sẽ được mở rộng tạo ra 3 nút mới B,C và D. Các con số dưới nút là giá trị cho biết độ tốt của nút. Con số càng nhỏ, nút càng tốt. Do D là nút có khả năng nhất nên nó sẽ được mở rộng tiếp sau nút A và sinh ra 2 nút kế tiếp là E và F. Đến đây, ta lại thấy nút B có vẻ có khả năng nhất (trong các nút B,C,E,F) nên ta sẽ chọn mở rộng nút B và tạo ra 2 nút G và H. Nhưng lại một lần nữa, hai nút G, H này được đánh giá ít khả năng hơn E, vì thế sự chú ý lại trở về E. E được mở rộng và các nút được sinh ra từ E là I và J. Ở bước kế tiếp, J sẽ được mở rộng vì nó có khả năng nhất. Quá trình này tiếp tục cho đến khi tìm thấy một lời giải.


Từ ví dụ trên, ta đưa ra tư tưởng cho giải thuật BFS, BFS sử dụng hai danh sách:
· OPEN: tập chứa các trạng thái đã được sinh ra nhưng chưa được xét đến (vì ta đã chọn một trạng thái khác). Thực ra, OPEN là một loại hàng đợi ưu tiên (priority queue) mà trong đó, phần tử có độ ưu tiên cao nhất là phần tử tốt nhất.
· CLOSED: tập chứa các trạng thái đã được xét đến. Chúng ta cần lưu trữ những trạng thái này trong bộ nhớ để đề phòng trường hợp khi một trạng thái mới được tạo ra lại trùng với một trạng thái mà ta đã xét đến trước đó.
Thuật giải BFS
1.      Đặt OPEN chứa trạng thái khởi đầu
2.      Lặp cho đến khi tìm được trạng thái đích hoặc không còn nút nào trong OPEN, thực hiện:
-         Chọn trạng thái tốt nhất trong OPEN và xóa nó khỏi OPEN (Đưa vào CLOSED)
-         Nếu nó là trạng thái kết thức thì thoát, ngược lại:
-         Phát sinh các trạng thái con của nó, với mỗi trạng thái con:
+ Xét xem nó có tốt nhất trong số các trạng thái con
+ Thêm nó vào OPEN, thực hiện việc lặp lại như trên.
Có thể thấy BFS khá đơn giản. Tuy vậy, trên thực tế, cũng như tìm kiếm chiều sâu và chiều rộng, hiếm khi ta dùng BFS một cách trực tiếp.
3.   Các giải thuật tìm kiếm lời giải cho trò chơi
3.1 Cây trò chơi và tìm kiếm trên cây trò chơi
Thông thường các trò chơi trí tuệ thường là trò chơi đối kháng giữa hai đấu thủ, mỗi một đấu thủ sẽ sở hữu cho mình một loại quân, thường là quân đen và quân trắng. Hai người chơi thay phiên nhau đưa ra các nước đi tuân theo các luật đi nào đó, các luật này là như nhau cho cả hai người. Điển hình là cờ vua, trong cờ vua hai người chơi có thể áp dụng các luật đi con tốt, con xe,... đđưa ra nước đi. Luật đi con tốt Trắng xe Trắng,... cũng như luật đi con tốt Đen, xe Đen,... Một đặc điểm nữa là hai người chơi đều được biết thông tin đầy đủ về các tình thế trong trò chơi (không như trong chơi bài, người chơi không thể biết các người chơi khác còn những con bài gì). Vấn đề chơi cờ có thể xem như vấn đề tìm kiếm nước đi, tại mỗi lần đến lượt mình, người chơi phải tìm trong số rất nhiều nước đi hợp lệ (tuân theo đúng luật đi), một nước đi tốt nhất sao cho qua một dãy nước đi đã thực hiện, anh ta giành phần thắng. Tuy nhiên vấn đề tim kiếm ở đây sẽ phức tạp hơn vấn đề tìm kiếm mà chúng ta đã tìm hiểu trong các phần trên, bởi vì ở đây có đối thủ, người chơi không biết được đối thủ của mình sẽ đi nước nào trong tương lai.
Việc chơi cờ, hay còn nói là tìm kiếm đối kháng có thể xem như vấn đề tìm kiếm trong không gian trạng thái mà mà mỗi trạng thái là một tình thế (hay một nước đi). Để thuận tiện cho việc chọn nước đi, người ta biểu diễn không gian trạng thái như một cây trò chơi.
Cây trò chơi được hiểu là cây ngữ nghĩa, trong đó các nút thể hiện cấu hình trò chơi, các nhánh thể hiện các bước chuyển. Có thể xem hai nhánh xuất phát từ một tút là hai quyết định của hai đấu thủ.
Gọi p là mức của cây thì độ sâu của cây là d = p-1. Giả sử trong chơi cờ, nước đi được xem như gồm một lựa chọn của một bên và nước đi phản ứng của bên kia. Tuy vậy trên cây trò chơi, người ta cũng có thể coi mỗi lựa chọn hay bước chuyển như một nước đi.
3.2 Giải thuật Mini-max
Giả sử có bộ phân tích tình huống cho phép chuyển các nhận định về các tình huống về con số định lượng đơn giản. Giả sử mức dương chỉ sự thuận lợi cho một đối thủ(đấu thủ max), và âm chỉ sự thuận lợi cho đối thủ kia(đấu thủ min). Trị tuyệt đối chứng tỏ mức độ thuận lợi
Quá trình tính ra con số phản ánh chất lượng trò chơi gọi là đánh giá tĩnh, hàm tính toán gọi là bộ đánh giá tĩnh, con số là tỉ số đánh giá tĩnh(điểm đánh giá tĩnh).
Cây trò chơi được dùng cho việc thể hiện trò chơi giữa hai đấu thủ này.
Đấu thủ max tìm các bước chuyển đưa đến đánh giá là số dương lớn và giả sử rằng đấu thủ min sẽ cố giữa trò chơi hướng về tình huống có đánh giá tĩnh âm nhiều.
Trên cây trò chơi, trước tiên đấu thủ max đi, xuất phát từ mức thứ nhất, họ phải tính sao để đến mức sau của cây, ứng với lượt đi của đấu thủ min trò chơi tạo điều kiện tốt cho họ.
Tư tưởng Giải thuật Minimax
Nếu như đạt đến giới hạn tìm kiếm (đến tầng dưới cùng của cây tìm kiếm), tính giá trị tĩnh của thế cờ hiện tại ứng với người chơi ở đó. Ghi nhớ kết quả.
Nếu như mức đang xét là của người chơi cực tiểu, áp dụng thủ tục Minimax này cho các con của nó. Ghi nhớ kết quả nhỏ nhất.
Nếu như mức đang xét là của người chơi cực đại, áp dụng thủ tục Minimax này cho các con của nó. Ghi nhớ kết quả lớn nhất.
3.3 Giải thuật cắt tỉa Alpha-Beta
Được định nghĩa rằng một điều chắc là tồi thì đừng tốn thời gian để thấy nó tồi như thế nào.
Giải thuật cắt tỉa Alpha-Beta là một cải tiến của giải thuật Minimax nhằm tỉa bớt nhánh của cây trò chơi, làm giảm số lượng nút phát sinh và lượng giá, do đó có thể tăng độ sâu của cây tìm kiếm.
Giải thuật Alpha-beta dùng hai tham số là alpha và beta để theo dõi các khả năng.
-         Alpha liên quan với các nút MAX và có khuynh hướng không bao giờ giảm
-         Beta liên quan với các nút MIN và có khuyenh hướng không bao giờ tăng.
Tư tưởng giải thuật Alpha - Beta
·        Nếu mức đang xét là đỉnh (gốc cây), đặt giá trị của alpha là -∞ và beta là +∞
·        Nếu như đạt đến giới hạn tìm kiếm (đến tầng dưới cùng của cây tìm kiếm), tính giá trị tĩnh của thế cờ hiện tại ứng với người chơi ở đó. Ghi lại kết quả.
·        Nếu như mức đang xét là của người chơi cực tiểu
o   Thực hiện các công việc sau cho đến khi tất cả các con của nó đã được xét với thủ tục Alpha-Beta hoặc cho đến khi alpha là bằng hoặc lớn hơn beta.
§  Áp dụng thủ tục AlphaBeta với giá trị alpha và beta hiện tại cho một con. Ghi nhớ lại kết quả.
§  So sánh giá trị ghi nhớ với giá trị beta, nếu giá trị đó nhỏ hơn thì đặt beta bằng giá trị mới này.
o   Ghi nhớ lại beta
·        Nếu như mức đang xét là của người chơi cực đại
o   Thực hiện các công việc sau cho đến khi tất cả các con của nó đã được xét với thủ tục AlphaBeta hoặc cho đến khi alpha là bằng hoặc lớn hơn beta.
§  Áp dụng thủ tục AlphaBeta với  giá trị alpha và beta hiện tại cho một con. Ghi nhớ lại kết quả.
§  So sánh giá trị ghi nhớ với giá trị alpha, nếu giá trị đó lớn hơn thì đặt alpha bằng giá trị mới này.
o   Ghi nhớ lại alpha.   

4.   Kết luận
Các phương pháp tìm kiếm Heuristic và các phương pháp tìm kiếm lời giải cho trò chơi thường được thể hiện bằng đồ thị biểu diễn trạng thái (hay nói cách khác là biểu diễn trên cây ngữ nghĩa). Các phương pháp ở trên có thể được phân thành ba nhóm phương pháp tìm kiếm.
-  Tìm kiếm không có thông tin: bao gồm tìm kiếm theo chiều sâu và tìm kiếm theo chiều rộng.
-  Tìm kiếm có thông tin: bao gồm tìm kiếm leo đồi (Hill-Climbing) và tìm kiếm tốt nhất đầu tiên (BFS).
-  Tìm kiếm đối kháng: giải thuật tìm kiếm Minimax, giải thuật cắt tỉa Alpha-Beta.
Các kỹ thuật tìm kiếm không có thông tin trong một số trường hợp rất kém hiệu quả và thậm chí không áp dụng được. Vì thế mà người ta không thường xuyên áp dụng chúng mà hay phải cải tạo, cải tiến chúng để áp dụng. Việc tìm kiếm sẽ trở nên dễ dàng hơn đôi chút khi mà việc tìm kiếm là có thông tin. Các phương pháp tìm kiếm có thông tin hiệu quả hơn tìm kiếm không có thông tin. Tuy nhiên, trong một số trường hợp lại có thể không tìm được ra lời giải cho dù lời giải có hiện hữu. Trong nhiều trường hợp người ta sẽ phải cân nhắc lựa chọn các kỹ thuật tìm kiếm sao cho phù hợp với yêu cầu bài toán đề ra.
Còn đối với tìm kiếm đối kháng, điển hình là trò chơi đối kháng giữa hai đấu thủ, như các trò chơi cờ tướng, cờ vua, cờ vây..., có thể là người với người hoặc người với máy. Thông tin cho việc tìm kiếm là hiện hữu ngay trên bàn cờ. Mỗi thế cờ là một nước đi của một đấu thủ. Hai người chơi sẽ luân phiên nhau thực hiện nước đi với mục đích sao cho lợi thế nghiêng về mình là nhiều hơn. Đối với tìm kiếm đối kháng. Người ta hay sử dụng thuật giải Minimax, thông thường Minimax được xây dựng tìm kiếm ở một mức nhất định (hay độ sâu cho trước) và có thể sử dụng cải tiến của nó là giải thuật cắt tỉa Alpha-Beta. Tất nhiên được gọi là cải tiến thì Alpha-Beta phải có cái lợi thế so với Minimax, ở chỗ nó tìm kiếm nhanh hơn, với độ sâu nhiều hơn.

Tuy nhiên độ dài của bài viết có giới hạn, nên mình xin phép trình bày đến đây. Bài viết tiếp theo trong loạt bài viết Tìm hiểu về trí tuệ nhân tạo, mình sẽ đưa các bạn tìm hiểu chi tiết hơn về giải thuật MiniMax được ứng dụng trong trò chơi cờ tướng ra sao, và cùng xem mình có thể thắng được trí tuệ nhân tạo do chính mình viết ra không nhé!

Comments

Popular posts from this blog

Ứng dụng giải thuật MiniMax trong trò chơi cờ tướng - Tìm hiểu về trí tuệ nhân tạo (Phần 2)

Chắc hẳn mọi người đều biết về trò chơi thú vị như cờ tướng. Tiếp theo loạt bài về trí tuệ nhân tạo, bài viết này mình sẽ nói về cụ thể giải thuật Minimax ứng dụng trong trò chơi trí tuệ cờ tướng như thế nào. OK! Let's go. 1. Ý tưởng Cờ tướng là trò chơi đối kháng, trong đó hai người luôn phiên nhau đi nước đi của mình. Trạng thái bắt đầu là trạng thái khởi tạo bàn cờ, sau mỗi nước đi của một bên, trạng thái bàn cờ sẽ được thay đổi thành một trạng thái mới hiện hành. Cờ tướng có luật của nó, và trò chơi sẽ kết thúc khi một người có được trạng thái phản ánh sự thắng cuộc hoặc hai người rơi vào trạng thái hòa cờ. Ta tìm cách phân tích xem từ một trạng thái nào đó sẽ dẫn đến đấu thủ nào sẽ thắng với điều kiện cả hai có trình độ như nhau. Giải thuật Minimax sẽ được áp dụng vào trong trò chơi cờ tướng. Hai đấu thủ trong trò chơi sẽ được gọi là MIN và MAX và hai đấu

Sử dụng Jedis làm việc với Redis trong Java

Bài viết này mình sẽ   giới thiệu về Jedis , một thư viện client Java cho  Redis . 1. Tại sao lại là Jedis? Redis liệt kê các thư viện client nổi tiếng nhất trên  trang web chính thức  của họ  .  Có nhiều lựa chọn thay thế cho Jedis, nhưng chỉ có hai lựa chọn khác xứng đáng để đề xuất đó là  lettuce  và  Redisson . Hai clients này có một số tính năng độc đáo như an toàn luồng, xử lý kết nối lại trong suốt và API không đồng bộ, tất cả các tính năng mà Jedis thiếu. Tuy nhiên, Jedis nhỏ và nhanh hơn đáng kể so với hai loại kia.  Bên cạnh đó, nó là thư viện client được lựa chọn của các nhà phát triển Spring Framework, và nó có cộng đồng lớn nhất trong cả ba. 2. Maven Dependencies Hãy bắt đầu bằng cách khai báo dependency trong file  pom.xml  : 1 2 3 4 5 < dependency >      < groupId >redis.clients</ groupId >      < artifactId >jedis</ artifactId >      < version >2.8.1</ version > </ dependency >

Sử dụng Jenkins để Build Docker Images

Khởi chạy Jenkins Khởi chạy Jenkins như một Docker Container với lệnh sau: docker run -d -u root --name jenkins \ -p 8080:8080 -p 50000:50000 \ -v /root/jenkins_2112:/var/jenkins_home \ jenkins/jenkins:2.112-alpine Load Dashboard Tên người dùng  admin có mật khẩu mặc định là  344827fbdbfb40d5aac067c7a07b9230 Trên hệ thống của bạn, bạn có thể tìm mật khẩu bằng docker exec -it jenkins cat /var/jenkins_home/secrets/initialAdminPassword Có thể mất vài giây để Jenkins hoàn thành việc bắt đầu và có sẵn.  Trong các bước tiếp theo, bạn sẽ sử dụng trang Dashboard để định cấu hình các plugin và bắt đầu tạo Image Docker. Cấu hình Plugin Docker Bước đầu tiên là cấu hình  plugin Docker  .  Plugin này dựa trên plugin Jenkins Cloud.  Khi build Docker Image, nó sẽ tạo ra một "Cloud Agent" thông qua plugin.  Tác nhân sẽ là Docker Container được cấu hình để giao tiếp với Docker Daemon Job build của Jenkins sẽ sử dụng vùng chứa nà