Skip to main content

AI Học Cách Suy Nghĩ Như Thế Nào? Khám Phá Search, CSP và Planning

Khi nhắc đến Trí tuệ nhân tạo (AI), chúng ta thường nghĩ ngay đến ChatGPT, Generative AI hay các AI Agent có khả năng thực hiện những nhiệm vụ phức tạp. Tuy nhiên, rất lâu trước khi những công nghệ này xuất hiện, các nhà nghiên cứu AI đã phải đối mặt với một câu hỏi khó hơn nhiều:

"Làm thế nào để một cỗ máy có thể suy nghĩ trước khi hành động?"

Muốn trả lời câu hỏi đó, AI phải học cách giải quyết rất nhiều bài toán khác nhau. Nó cần biết có bao nhiêu con đường dẫn đến mục tiêu, cần tận dụng các quy tắc của bài toán để loại bỏ những lựa chọn chắc chắn sai và cần biết cách xây dựng một kế hoạch hành động phù hợp với thế giới mà nó đang tồn tại.

Chính từ những câu hỏi tưởng chừng rất đơn giản đó, ba ý tưởng lớn của AI đã lần lượt ra đời: Search, Constraint Satisfaction Problems (CSP) và Planning.

Search cho AI khả năng khám phá những khả năng khác nhau trước khi hành động. CSP giúp AI suy luận từ các ràng buộc của bài toán để loại bỏ sớm những lựa chọn chắc chắn sai. Planning giúp AI hiểu được cấu trúc của thế giới và xây dựng những kế hoạch hành động để đạt được mục tiêu của mình.

Bài viết này sẽ không đi sâu vào các thuật toán cụ thể mà tập trung trả lời một câu hỏi lớn hơn: làm thế nào những ý tưởng được sinh ra từ hơn nửa thế kỷ trước đã giúp AI chuyển từ việc chỉ biết tìm kiếm lời giải sang khả năng suy nghĩ và lập kế hoạch như những AI Agent hiện đại ngày nay?

1. Search - Vì sao AI cần phải "suy nghĩ trước khi hành động"?

Khi nghe đến từ Search (Tìm kiếm), nhiều người thường nghĩ đến việc tìm kiếm thông tin như Google Search. Tuy nhiên, trong AI, Search lại mang một ý nghĩa hoàn toàn khác.

Search là quá trình một AI Agent "suy nghĩ trước khi hành động". Thay vì lập tức đưa ra quyết định, agent sẽ thử hình dung trong "đầu" mình nhiều chuỗi hành động khác nhau để dự đoán xem chúng sẽ dẫn đến kết quả gì. Sau đó, nó lựa chọn con đường có khả năng đưa mình đến mục tiêu một cách tốt nhất.

Nói một cách đơn giản, Search giống như việc bạn tự hỏi: "Nếu mình làm A thì chuyện gì sẽ xảy ra? Nếu làm B thì sao? Còn nếu làm C thì kết quả có tốt hơn không?"

Agent thực hiện công việc này được gọi là Problem-Solving Agent (Agent giải quyết vấn đề), còn quá trình suy nghĩ và cân nhắc các khả năng trước khi hành động được gọi là Search.

Vậy Search ra đời để giải quyết vấn đề gì?

Search xuất hiện khi agent đứng trước một tình huống mà hành động đúng đắn không hiển nhiên ngay lập tức. Nó biết mục tiêu mình cần đạt được nhưng lại chưa biết phải đi theo con đường nào để đến đó.

Ví dụ, hãy tưởng tượng bạn đang ở thành phố Arad (Romania) và ngày mai phải có mặt tại Bucharest để bắt chuyến bay. Từ Arad có nhiều con đường khác nhau, nhưng bạn không biết con đường nào sẽ đưa mình đến đích nhanh nhất hoặc thậm chí có dẫn đến Bucharest hay không.

Trong tình huống này, bạn sẽ không muốn nhắm mắt chọn ngẫu nhiên một con đường rồi hy vọng mình gặp may. Thay vào đó, bạn sẽ mở bản đồ ra và tự hỏi:

  • Nếu đi đường thứ nhất, mình sẽ đến đâu?
  • Nếu đi đường thứ hai thì mất bao lâu?
  • Có cần đi qua những thành phố trung gian nào không?
  • Con đường nào là hợp lý nhất để đến Bucharest?

Quá trình xem xét trước các khả năng đó chính là Search.

Nếu không có Search, agent chỉ có thể lựa chọn hành động một cách ngẫu nhiên vì nó không biết quyết định nào là tốt nhất. Ngược lại, Search cho phép agent tận dụng những thông tin mà nó đang có (chẳng hạn như bản đồ, các quy tắc hoặc mô hình của môi trường) để lập kế hoạch trước khi hành động, giúp giảm việc "đánh liều" và tăng khả năng đạt được mục tiêu một cách hiệu quả.

Hiểu bản chất của Search

Ý tưởng quan trọng nhất của Search trong AI là: trước khi hành động ngoài đời thực, agent sẽ tạo ra một "mô hình thu nhỏ" của bài toán trong đầu để thử nghiệm các khả năng khác nhau.

Hãy hình dung bạn đang đứng trước một mê cung và cần tìm đường ra. Bạn sẽ không nhắm mắt bước đại một hướng. Thay vào đó, bạn sẽ cố hình dung:

  • Mình đang đứng ở đâu?
  • Có thể đi sang những hướng nào?
  • Nếu đi sang trái thì sẽ đến đâu?
  • Nếu đi tiếp thì có đến được đích hay không?

AI Agent cũng làm điều tương tự.

Nó sẽ biến bài toán thành một "bản đồ các trạng thái". Bạn có thể hiểu đơn giản rằng:

  • Mỗi trạng thái (state) là một tình huống mà agent có thể gặp phải.
  • Mỗi hành động (action) là một lựa chọn giúp agent chuyển từ tình huống này sang tình huống khác.
  • Mục tiêu của agent là tìm ra một chuỗi các hành động phù hợp để đi từ trạng thái hiện tại đến trạng thái mong muốn.

Ví dụ, nếu bạn đang ở thành phố Arad và muốn đến Bucharest, thì:

  • Arad là một trạng thái.
  • Việc đi đến Sibiu hoặc Timisoara là các hành động.
  • Bucharest là trạng thái mục tiêu.
  • Chuỗi các thành phố mà bạn phải đi qua chính là lời giải của bài toán.
Có thể hình dung toàn bộ bài toán giống như một tấm bản đồ gồm rất nhiều điểm được nối với nhau. Nhiệm vụ của Search là tìm ra con đường phù hợp nhất trên tấm bản đồ đó.

Quá trình giải quyết một bài toán thường gồm 4 bước:

1.    Xác định mục tiêu (Goal)
Agent cần biết mình muốn đạt được điều gì. Ví dụ: đi từ Arad đến Bucharest.

2.    Mô hình hóa bài toán (Problem Formulation)
Agent xác định:

o    Mình đang ở trạng thái nào.

o    Có thể thực hiện những hành động nào.

o    Trạng thái mục tiêu là gì.

3.    Tìm kiếm lời giải (Search)
Agent sẽ "thử nghiệm trong đầu" nhiều chuỗi hành động khác nhau để tìm ra con đường dẫn đến mục tiêu.

4.    Thực thi lời giải (Execution)
Sau khi tìm được lời giải, agent sẽ bắt đầu thực hiện các hành động ngoài đời thực.

Search Problem Solving Agent

Điều đặc biệt của Search

Trong một số môi trường rất "lý tưởng", mọi thứ đều diễn ra đúng như những gì agent biết trước:

  • Agent có đầy đủ thông tin về môi trường.
  • Mỗi hành động luôn tạo ra kết quả như mong đợi.
  • Môi trường không tự thay đổi một cách bất ngờ.

Khi đó, nếu agent đã tìm được lời giải, nó có thể thực hiện tuần tự các bước đã tính toán mà không cần phải liên tục quan sát lại môi trường.

Bạn có thể hình dung giống như việc sử dụng Google Maps để tìm đường đi giữa 2 địa điểm. Nếu bạn biết chắc:

  • Không có đường bị chặn.
  • Không có tai nạn giao thông.
  • Không có sự cố bất ngờ xảy ra.
Thì sau khi đã xác định được lộ trình, bạn chỉ cần đi theo các chỉ dẫn đã có mà không cần tính toán lại đường đi sau mỗi ngã rẽ.

Trong AI, điều này được gọi là "open-loop execution" (thực thi theo kế hoạch đã lập sẵn). Agent gần như có thể "nhắm mắt" thực hiện các hành động của mình, bởi vì nó biết rằng nếu làm đúng kế hoạch thì chắc chắn sẽ đi đến mục tiêu.

Tóm lại, Problem Formulation cho agent biết phải mô hình hóa bài toán như thế nào, còn Search giúp agent tìm ra chuỗi hành động tốt nhất để đi từ trạng thái hiện tại đến trạng thái mục tiêu.

Search hoạt động như thế nào?

Để tìm ra lời giải cho một bài toán, trước hết AI Agent cần biết 5 thông tin cơ bản:

1.    Agent đang ở đâu? (Trạng thái ban đầu - Initial State)

2.    Agent muốn đi đến đâu? (Trạng thái mục tiêu - Goal State)

3.    Agent có thể làm những gì? (Các hành động - Actions)

4.    Sau mỗi hành động thì điều gì sẽ xảy ra? (Mô hình chuyển trạng thái - Transition Model)

5.    Mỗi hành động phải trả giá bao nhiêu? (Chi phí - Cost)

Bạn có thể hình dung việc này giống như sử dụng Google Maps để đi đến một địa điểm nào đó.

  • Bạn đang ở Paris (trạng thái ban đầu).
  • Bạn muốn đến Lyon (trạng thái mục tiêu).
  • Bạn có thể đi bằng ô tô, xe máy hoặc đi theo nhiều tuyến đường khác nhau (các hành động).
  • Nếu rẽ trái ở ngã tư A, bạn sẽ đến địa điểm B; nếu đi thẳng, bạn sẽ đến địa điểm C (mô hình chuyển trạng thái).
  • Mỗi tuyến đường sẽ có chi phí khác nhau, chẳng hạn như quãng đường phải đi, thời gian di chuyển hoặc phí cầu đường (chi phí).
AI Agent cũng làm việc theo cách tương tự.

Ví dụ nổi tiếng trong các giáo trình AI là bài toán tìm đường trên bản đồ Romania:

  • Mỗi thành phố được xem là một trạng thái (state).
  • Mỗi con đường nối hai thành phố được xem là một hành động (action).
  • Khoảng cách giữa hai thành phố được xem là chi phí (cost).

Nếu agent tìm được một chuỗi hành động giúp đi từ thành phố xuất phát đến thành phố đích thì đó được gọi là lời giải (solution).

Ví dụ: Arad → Sibiu → Fagaras → Bucharest. Đây là một lời giải hợp lệ vì agent đã đi được từ điểm xuất phát đến mục tiêu.

Tuy nhiên, trong nhiều trường hợp sẽ tồn tại nhiều lời giải khác nhau. Khi đó, agent cần tìm ra lời giải có chi phí thấp nhất (ví dụ như đi ít kilomet nhất hoặc mất ít thời gian nhất). Lời giải tốt nhất như vậy được gọi là lời giải tối ưu (optimal solution).

Agent tìm kiếm bằng cách nào?

Có hai cách tiếp cận phổ biến:

1. Tìm kiếm mù (Uninformed Search)

Agent chỉ biết:

  • Mình đang ở đâu.
  • Có thể đi sang đâu tiếp theo.

Nhưng nó hoàn toàn không biết hướng nào đang tiến gần đến mục tiêu hơn.

Bạn có thể hình dung giống như việc đi trong một mê cung mà không có bất kỳ gợi ý nào. Agent sẽ phải lần lượt thử các khả năng khác nhau cho đến khi tìm được đường ra.

Ưu điểm: Đơn giản và luôn có thể tìm được lời giải nếu bài toán thỏa mãn các điều kiện nhất định.

Nhược điểm: Có thể phải thử rất nhiều khả năng nên khá chậm khi bài toán trở nên lớn và phức tạp.

2. Tìm kiếm có thông tin (Informed Search)

Khác với tìm kiếm mù, agent có thêm một "manh mối" giúp nó đoán xem hướng đi nào có vẻ đang tiến gần đến mục tiêu hơn. Nói cách khác, agent không còn phải "đi mò" nữa mà đã có một sự ước lượng để đưa ra quyết định thông minh hơn. Nhờ đó:

  • Tốc độ tìm kiếm thường nhanh hơn rất nhiều.
  • Agent không cần phải thử tất cả các khả năng có thể xảy ra.

Ví dụ:

  • GPS ưu tiên đề xuất những tuyến đường ngắn hơn.
  • AI chơi cờ ưu tiên những nước đi có vẻ mang lại lợi thế hơn.
  • Robot tự hành ưu tiên những hướng di chuyển an toàn và hiệu quả hơn.

Sự "ước lượng thông minh" này được gọi là Heuristic. Sức mạnh của nhiều thuật toán Search hiện đại không nằm ở việc kiểm tra tất cả mọi khả năng, mà nằm ở khả năng không phải kiểm tra tất cả mọi khả năng.

Nói cách khác: AI càng thông minh thì càng biết bỏ qua những hướng đi không cần thiết.

Tìm kiếm mù chỉ là phương án cuối cùng khi agent không có thêm bất kỳ thông tin hữu ích nào để đưa ra quyết định.

Điều gì xảy ra khi bài toán trở nên phức tạp hơn?

Cho đến nay, chúng ta đang giả sử rằng:

  • Agent biết đầy đủ mọi thông tin về môi trường.
  • Mỗi hành động luôn tạo ra kết quả như mong đợi.

Nhưng thực tế không phải lúc nào cũng như vậy. Ví dụ:

  • Robot hút bụi có thể gặp phải một chướng ngại vật bất ngờ.
  • Xe tự lái không thể biết chính xác chiếc xe phía trước sẽ chuyển làn vào lúc nào.
  • GPS có thể đề xuất một tuyến đường nhưng sau đó lại xảy ra ùn tắc giao thông.

Trong những trường hợp như vậy, agent không thể lập kế hoạch một lần rồi "nhắm mắt" thực hiện đến hết được. Nó cần phải:

  • Liên tục quan sát môi trường.
  • Điều chỉnh kế hoạch khi có tình huống mới xuất hiện.
  • Thậm chí có thể thay đổi hoàn toàn quyết định ban đầu.

AI đã phát triển nhiều phương pháp tìm kiếm nâng cao để xử lý những bài toán này. Chẳng hạn:

  • Local Search (Tìm kiếm cục bộ): agent chỉ tập trung cải thiện trạng thái hiện tại từng chút một thay vì ghi nhớ toàn bộ đường đi.
  • Contingency Planning (Lập kế hoạch có nhánh rẽ): agent chuẩn bị sẵn nhiều phương án khác nhau để lựa chọn tùy thuộc vào những gì nó quan sát được trong quá trình thực hiện.

Tầm quan trọng của Search

Search là một trong những nền tảng quan trọng nhất của trí tuệ nhân tạo. Rất nhiều lĩnh vực khác của AI được xây dựng dựa trên những ý tưởng ban đầu của Search. Ví dụ:

  • Nếu bài toán được biểu diễn dưới dạng các biến và các ràng buộc cần phải thỏa mãn, chúng ta có Constraint Satisfaction Problems (Bài toán thỏa mãn ràng buộc).
  • Nếu trạng thái và hành động được mô tả bằng logic để có thể áp dụng cho nhiều loại bài toán khác nhau, chúng ta có Automated Planning (Lập kế hoạch tự động).
  • Nếu môi trường có sự tham gia của đối thủ, chẳng hạn như cờ vua hoặc cờ vây, chúng ta có Adversarial Search (Tìm kiếm đối kháng).

Có thể nói, Search chính là "bộ não lập kế hoạch" của rất nhiều hệ thống AI hiện đại. Chúng ta bắt gặp nó ở khắp mọi nơi:

  • Các ứng dụng chỉ đường như GPS.
  • Robot tự hành.
  • Xe tự lái.
  • AI chơi cờ vua, cờ vây và nhiều trò chơi khác.
  • Các bài toán tối ưu hóa và lập kế hoạch trong công nghiệp.
  • Một phần quan trọng trong việc xây dựng các AI Agent hiện đại.
Hãy nhớ rằng: Search không phải là việc đi tìm thông tin, mà là quá trình AI Agent suy nghĩ trước nhiều khả năng khác nhau để tìm ra chuỗi hành động tốt nhất giúp đạt được mục tiêu của mình.

2. Constraint Satisfaction - Sức mạnh của việc loại bỏ những khả năng chắc chắn sai

Constraint Satisfaction Problem (CSP) là bài toán mà ta cần tìm một cách sắp xếp hoặc lựa chọn các giá trị sao cho mọi quy tắc (ràng buộc) đều được thỏa mãn.

Nói đơn giản, CSP trả lời câu hỏi: "Làm thế nào để chọn đúng giá trị cho từng thành phần mà không vi phạm bất kỳ quy tắc nào?"

Một bài toán CSP luôn có 3 thành phần cơ bản:

  • Biến (Variables): những thứ ta cần quyết định giá trị.
  • Miền giá trị (Domains): những giá trị mà mỗi biến có thể nhận.
  • Ràng buộc (Constraints): các quy tắc mà các biến phải tuân theo.

Ví dụ kinh điển là bài toán tô màu bản đồ nước Úc:

  • Mỗi vùng lãnh thổ là một biến.
  • Các màu (đỏ, xanh dương, xanh lá) là miền giá trị của mỗi biến.
  • Quy tắc "hai vùng liền kề không được cùng màu" chính là ràng buộc.
Mục tiêu của bài toán là tìm được một cách tô màu mà tất cả các quy tắc trên đều được thỏa mãn.

Vậy CSP ra đời để giải quyết vấn đề gì?

Trong các bài toán Search thông thường, thuật toán thường chỉ nhìn thấy toàn bộ trạng thái như một "hộp đen". Nó biết một trạng thái là đúng hay sai nhưng không biết chính xác phần nào bên trong đang gây ra vấn đề.  Vì vậy, thuật toán thường phải thử rất nhiều khả năng khác nhau rồi mới phát hiện ra rằng lựa chọn của mình là sai.

CSP tiếp cận theo một cách khác: thay vì xem trạng thái là một khối duy nhất, nó chia bài toán thành nhiều biến nhỏ cùng với các quy tắc ràng buộc giữa chúng. Nhờ đó, chỉ cần phát hiện một lựa chọn vi phạm quy tắc, thuật toán có thể loại bỏ ngay rất nhiều khả năng không hợp lệ mà không cần phải thử hết.

Ví dụ, nếu ta quyết định "Nam Úc = màu xanh dương", thuật toán biết ngay lập tức rằng tất cả các vùng tiếp giáp với Nam Úc đều không được dùng màu xanh dương nữa. Điều này giúp giảm đáng kể số khả năng cần phải xem xét.

Chính khả năng "loại bỏ sớm các lựa chọn sai" này là ưu điểm lớn nhất của CSP. Nhiều bài toán tưởng như rất khó nếu giải bằng cách thử lần lượt từng khả năng sẽ trở nên dễ xử lý hơn khi được biểu diễn dưới dạng CSP.

Có thể hiểu một cách trực quan như sau:

  • Search thông thường: "Hãy thử mọi khả năng cho đến khi tìm được đáp án đúng."
  • CSP: "Hãy dùng các quy tắc của bài toán để loại bỏ càng nhiều đáp án sai càng sớm càng tốt."

Hiểu bản chất của CSP

Giải một bài toán CSP đơn giản là tìm được một cách lựa chọn giá trị cho tất cả các biến sao cho không vi phạm bất kỳ quy tắc nào. Nói cách khác, ta cần trả lời câu hỏi: "Chọn giá trị gì cho từng biến để mọi quy tắc đều được thỏa mãn?"

CSP không chỉ cho ta biết đáp án đúng hay sai, mà còn cho ta biết chính xác vì sao nó sai. Khi một lựa chọn vi phạm quy tắc, hệ thống biết ngay biến nào đang gây ra vấn đề và quy tắc nào đã bị vi phạm.

Đây chính là điểm khác biệt so với Search thông thường. Search thường chỉ biết rằng "trạng thái hiện tại không phải đáp án", còn CSP biết rằng "trạng thái này sai vì biến A không phù hợp với biến B theo ràng buộc C". Nhờ hiểu được nguyên nhân gây ra lỗi, CSP có thể loại bỏ ngay rất nhiều lựa chọn không hợp lệ mà không cần phải thử chúng.

Điều làm CSP trở nên đặc biệt là khả năng loại bỏ sớm những khả năng chắc chắn sai. Thay vì phải thử từng khả năng một cách tuần tự, CSP sử dụng các quy tắc của bài toán để suy luận xem những lựa chọn nào không thể xảy ra. Điều này giúp giảm đáng kể số lượng trường hợp cần phải kiểm tra và khiến nhiều bài toán phức tạp trở nên khả thi hơn để giải quyết.

CSP hoạt động như thế nào?

CSP thường kết hợp hai ý tưởng quan trọng:

  • Thử và quay lại (Backtracking): hệ thống sẽ thử gán một giá trị cho biến. Nếu phát hiện lựa chọn đó khiến bài toán không thể tiếp tục, nó sẽ quay lại và thử một giá trị khác.
  • Loại bỏ sớm các lựa chọn sai (Constraint Propagation): trước khi phải thử tất cả các khả năng, hệ thống sẽ sử dụng các ràng buộc của bài toán để loại bỏ những giá trị chắc chắn không thể sử dụng. Điều này giúp giảm rất nhiều công việc cần phải làm.

Ví dụ, nếu bài toán yêu cầu hai ô liền kề không được cùng màu và ta đã chọn ô thứ nhất có màu xanh dương, thì hệ thống sẽ biết ngay ô còn lại không được phép dùng màu xanh dương nữa. Nhờ vậy, nó không cần mất thời gian thử những trường hợp chắc chắn sẽ sai.

Constraint Propagation

Có thể hiểu đơn giản rằng CSP hoạt động theo hai bước:

1.    Dùng các quy tắc để loại bỏ càng nhiều lựa chọn sai càng tốt.

2.    Nếu vẫn còn nhiều khả năng, hệ thống sẽ thử từng lựa chọn còn lại và quay lui khi cần thiết.

Chính sự kết hợp giữa "suy luận để loại bỏ những khả năng không thể xảy ra" và "thử những khả năng còn lại một cách có hệ thống" đã giúp CSP giải được nhiều bài toán phức tạp trong thực tế.

Vai trò của CSP

CSP là một mô hình rất quan trọng trong Trí tuệ nhân tạo (AI) và Khoa học máy tính. Rất nhiều bài toán thực tế có thể được mô tả dưới dạng CSP, chẳng hạn như:

  • Xếp thời khóa biểu cho trường học.
  • Phân công ca làm việc cho nhân viên.
  • Phân bổ tài nguyên trong hệ thống máy tính.
  • Thiết kế và kiểm tra các mạch điện tử.
  • Lập kế hoạch và tối ưu hóa các hệ thống phức tạp.

CSP cũng là nền tảng của nhiều kỹ thuật suy luận hiện đại. Một "người anh em" rất nổi tiếng của CSP là bài toán thỏa mãn logic mệnh đề (SAT). Nếu CSP cho phép một biến có nhiều giá trị khác nhau (ví dụ: đỏ, xanh dương hoặc xanh lá), thì SAT chỉ cho phép mỗi biến nhận một trong hai giá trị: Đúng (True) hoặc Sai (False).

Ngày nay, các bộ giải SAT và các kỹ thuật suy luận liên quan đã trở thành những công cụ cực kỳ quan trọng trong công nghiệp phần mềm. Chúng được sử dụng để kiểm tra lỗi chương trình, phát hiện các lỗ hổng bảo mật, phân tích mã nguồn và xác minh tính đúng đắn của phần mềm.

Có thể hình dung mối quan hệ giữa chúng như sau:

  • Search: thử tìm lời giải bằng cách khám phá các khả năng.
  • CSP: bổ sung thêm khả năng biểu diễn các biến và các quy tắc để loại bỏ sớm những lựa chọn sai.
  • SAT/SMT: phát triển các ý tưởng của CSP theo hướng suy luận logic mạnh mẽ hơn để giải quyết những bài toán rất lớn trong thực tế.

Sức mạnh của CSP không nằm ở việc "thử thật nhanh", mà nằm ở việc "suy luận thật sớm". Càng loại bỏ được nhiều khả năng sai trước khi phải thử, bài toán càng trở nên dễ giải hơn.

Có một nhầm lẫn là cho rằng CSP luôn phải tìm ra lời giải "tốt nhất". Thực ra, mục tiêu của CSP cổ điển chỉ là tìm được một lời giải hợp lệ - tức là một cách lựa chọn giá trị cho các biến mà không vi phạm bất kỳ quy tắc nào. Ví dụ, nếu cần xếp lịch thi cho các môn học sao cho không có sinh viên nào phải thi hai môn cùng lúc thì chỉ cần tìm được một lịch thi thỏa mãn yêu cầu là đã giải được bài toán CSP. CSP không quan tâm lịch thi đó có "đẹp nhất" hay "tối ưu nhất" hay không.

Khi bài toán yêu cầu tìm lời giải tốt nhất (ví dụ: vừa xếp lịch hợp lệ vừa muốn sử dụng ít phòng học nhất), ta sẽ cần đến các biến thể của CSP dành cho bài toán tối ưu hóa.

Hãy nhớ rằng: CSP không cố gắng thử mọi khả năng một cách mù quáng, mà cố gắng dùng các quy tắc của bài toán để loại bỏ càng nhiều khả năng sai càng sớm càng tốt.

3. Planning - Khi AI không chỉ tìm đường đi mà còn biết cách xây dựng kế hoạch

Planning là khả năng giúp AI Agent tự tìm ra một chuỗi các bước cần thực hiện để đạt được mục tiêu một cách hiệu quả.

Nói một cách đơn giản, nếu Search trả lời câu hỏi "Có đường nào đi đến mục tiêu hay không?" thì Planning trả lời câu hỏi "Cần phải làm những gì, theo thứ tự nào để đạt được mục tiêu đó?". Search tìm đường đi đến mục tiêu, còn Planning tìm ra cả một kế hoạch để đạt được mục tiêu đó.

Planning là bước phát triển tiếp theo của Search. Điểm khác biệt quan trọng là Planning không chỉ biết "đang ở đâu và đi đâu", mà còn hiểu rõ bên trong mỗi trạng thái có những thông tin gì và một hành động sẽ làm thay đổi chính xác những thông tin nào.

Bản chất của Planning

Planning ra đời để giải quyết hai vấn đề lớn của các phương pháp trước đây:

  • Con người phải viết quá nhiều luật hoặc chương trình riêng cho mỗi bài toán mới.
  • Số lượng trạng thái có thể tăng lên rất nhanh khi bài toán trở nên phức tạp.

Ví dụ, trong một thế giới có robot, chúng ta có thể có các hành động như:

  • Đi từ vị trí A sang vị trí B.
  • Nhặt một chiếc hộp.
  • Đặt chiếc hộp xuống bàn.
  • Mở hoặc đóng cửa.
Nếu sử dụng cách biểu diễn đơn giản, luật "di chuyển một bước" phải được viết đi viết lại cho từng vị trí, từng hướng di chuyển và từng tình huống khác nhau. Khi chuyển sang một bài toán mới như giao hàng, xếp lịch sản xuất hay điều khiển robot, các kỹ sư lại phải xây dựng gần như toàn bộ hệ thống từ đầu.

Với Planning, thay vì mô tả từng trạng thái một cách riêng lẻ, nó mô tả:

  • Một trạng thái gồm những thông tin nào.
  • Mỗi hành động cần những điều kiện gì để được thực hiện.
  • Sau khi thực hiện, hành động đó sẽ làm thay đổi chính xác những thông tin nào.

Có thể hình dung Planning giống như việc tạo ra một "khuôn mẫu" cho các hành động. Ví dụ, thay vì phải viết riêng:

  • Bay từ Paris đến Lyon.
  • Bay từ Paris đến London.
  • Bay từ New York đến Chicago.
  • ...
Chúng ta chỉ cần viết một lần duy nhất: Bay(máy_bay, nơi_đi, nơi_đến)

Khuôn hành động này cho Agent biết:

  • Muốn bay thì máy bay phải đang ở nơi đi (điều kiện trước khi thực hiện).
  • Sau khi bay xong, máy bay sẽ không còn ở nơi đi nữa mà chuyển sang nơi đến (kết quả của hành động).

Khi cần giải quyết một bài toán cụ thể, Agent chỉ việc thay các biến bằng giá trị tương ứng. Ví dụ:

  • Bay(FR123, Paris, Lyon)
  • Bay(FR123, Paris, London)
  • Bay(US456, New York, Chicago)
Nhờ vậy, chỉ một khuôn hành động duy nhất có thể được sử dụng cho hàng nghìn, thậm chí hàng triệu trường hợp khác nhau. Đây chính là sức mạnh lớn nhất của Planning: mô tả một lần, áp dụng cho vô số tình huống. Chúng ta chỉ cần mô tả các đối tượng, hành động và mục tiêu của bài toán, còn Agent sẽ tự suy luận để xây dựng kế hoạch phù hợp.

Planning có thể xây dựng kế hoạch như thế nào?

Hãy hình dung chúng ta có một công ty vận chuyển hàng hóa bằng máy bay. Mục tiêu là chuyển kiện hàng C1 từ sân bay SFO đến sân bay JFK. Ban đầu, Agent chỉ cần biết một số thông tin về thế giới hiện tại, chẳng hạn như:

  • Máy bay P1 đang ở sân bay SFO.
  • Kiện hàng C1 đang ở sân bay SFO.
  • Mục tiêu cần đạt được là: kiện hàng C1 phải ở sân bay JFK.

Agent cũng được cung cấp các "khuôn hành động" như:

  • Bay(máy_bay, nơi_đi, nơi_đến)
  • Chất_hàng(kiện_hàng, máy_bay, sân_bay)
  • Dỡ_hàng(kiện_hàng, máy_bay, sân_bay)

Mỗi hành động đều cho Agent biết hai điều:

  • Điều kiện cần có để thực hiện hành động (Precondition).
  • Những gì sẽ thay đổi sau khi thực hiện hành động (Effect).

Ví dụ, đối với hành động: Bay(P1, SFO, JFK)

Điều kiện cần có: “Máy bay P1 phải đang ở sân bay SFO”

Sau khi thực hiện:

  • Máy bay P1 không còn ở SFO nữa.
  • Máy bay P1 đang ở sân bay JFK.

Tương tự, hành động: Chất_hàng(C1, P1, SFO)

Điều kiện cần có:

  • Kiện hàng C1 đang ở SFO.
  • Máy bay P1 đang ở SFO.

Sau khi thực hiện:

  • Kiện hàng C1 không còn ở SFO nữa.
  • Kiện hàng C1 đang ở bên trong máy bay P1.
Dựa vào những quy tắc này, Agent sẽ tự xây dựng một kế hoạch hợp lý, chẳng hạn như: Chất_hàng(C1, P1, SFO) → Bay(P1, SFO, JFK) → Dỡ_hàng(C1, P1, JFK).

Sau mỗi bước, Agent sẽ tự cập nhật trạng thái của thế giới. Nó biết rằng:

  • Sau khi chất hàng, kiện hàng đang ở trong máy bay.
  • Sau khi máy bay bay đến JFK, kiện hàng cũng đang ở JFK (vì vẫn ở trong máy bay).
  • Sau khi dỡ hàng, kiện hàng đã ở đúng nơi cần đến.

Nói cách khác, Agent không cần phải được con người lập trình rằng: "Nếu muốn chuyển hàng từ SFO sang JFK thì hãy làm bước 1, bước 2 và bước 3". Con người chỉ cần mô tả:

  • Trạng thái ban đầu là gì.
  • Có những hành động nào.
  • Điều kiện và kết quả của từng hành động.
  • Mỗi hành động sẽ làm thay đổi trạng thái như thế nào.
  • Mục tiêu cuối cùng là gì.
Việc tìm ra chuỗi hành động phù hợp sẽ do Agent tự thực hiện.

Planning Anatomy

Về cơ bản, Planning hoạt động bằng cách trả lời liên tục hai câu hỏi:

  • "Tôi đang ở trạng thái nào?"
  • "Tôi cần thực hiện những hành động nào để đạt được mục tiêu?"
Để trả lời hai câu hỏi này, một Planning System có thể lập kế hoạch theo nhiều cách khác nhau. Một số hệ thống sẽ bắt đầu từ trạng thái hiện tại và từng bước tiến đến mục tiêu (Forward Planning), một số khác lại suy nghĩ theo chiều ngược lại bằng cách bắt đầu từ mục tiêu rồi lần ngược trở về trạng thái hiện tại (Backward Planning). Trong khi đó, những hệ thống phức tạp hơn lại lựa chọn chia nhỏ một nhiệm vụ lớn thành nhiều nhiệm vụ nhỏ hơn trước khi xây dựng kế hoạch chi tiết cho từng bước (Hierarchical Planning).

Lập kế hoạch tiến (Forward Planning): Hệ thống bắt đầu từ trạng thái hiện tại rồi từng bước lựa chọn các hành động có thể thực hiện cho đến khi đạt được mục tiêu. Ví dụ, nếu mục tiêu là "mang một cốc nước đến phòng khách", hệ thống có thể suy nghĩ theo cách: Tôi đang ở phòng ngủ → đi đến nhà bếp → lấy cốc → rót nước → đi đến phòng khách → hoàn thành mục tiêu. Đây là cách suy nghĩ rất giống với việc con người tự hỏi: "Từ vị trí hiện tại, tôi cần làm gì tiếp theo?".

Lập kế hoạch lùi (Backward Planning): Thay vì bắt đầu từ hiện tại, hệ thống sẽ bắt đầu từ mục tiêu rồi suy ngược trở lại. Ví dụ: Muốn có cốc nước ở phòng khách → trước đó tôi phải mang cốc nước đến phòng khách → muốn làm được điều đó thì tôi phải lấy được cốc nước → muốn lấy được cốc nước thì tôi phải đi đến nhà bếp. Cách suy luận này rất giống với việc chúng ta thường tự hỏi: "Muốn đạt được mục tiêu này thì tôi cần những điều kiện gì?". Sau đó tiếp tục hỏi: "Muốn có những điều kiện đó thì tôi cần phải làm gì?" cho đến khi quay trở về trạng thái hiện tại. Nói cách khác, chúng ta bắt đầu từ mục tiêu cuối cùng rồi lần ngược trở về những việc cần phải làm ở hiện tại.

Lập kế hoạch phân cấp (Hierarchical Planning): Với những bài toán lớn, hệ thống sẽ chia mục tiêu thành nhiều mục tiêu nhỏ hơn để dễ xử lý. Ví dụ, mục tiêu: "Chuẩn bị cho chuyến du lịch" có thể được chia thành: Đặt vé máy bay, Đặt khách sạn, Chuẩn bị hành lý, Lập kế hoạch di chuyển. Sau đó, mỗi mục tiêu nhỏ lại tiếp tục được chia thành những công việc nhỏ hơn nữa. Đây cũng chính là cách con người thường lập kế hoạch trong cuộc sống hằng ngày.

Kết luận

Nếu Search trả lời câu hỏi "Tôi có thể đi bằng cách nào?", CSP trả lời câu hỏi "Những khả năng nào chắc chắn sai?" và Planning trả lời câu hỏi "Tôi cần phải làm những gì?", thì khi ghép chúng lại với nhau, chúng ta đã có được ba mảnh ghép quan trọng đầu tiên của một AI Agent có khả năng suy nghĩ trước khi hành động.

Điều thú vị là những ý tưởng này không hề trở nên lỗi thời trong kỷ nguyên của Generative AI. Trái lại, chúng vẫn đang âm thầm hiện diện trong rất nhiều hệ thống AI hiện đại dưới những hình thức ngày càng mạnh mẽ hơn.

Tuy nhiên, việc xây dựng được một kế hoạch hành động vẫn chưa phải là điểm kết thúc của câu chuyện. Một câu hỏi tham vọng hơn nhanh chóng xuất hiện: liệu chúng ta có thể xây dựng những hệ thống có khả năng tự động lập kế hoạch cho rất nhiều loại bài toán khác nhau hay không? Và khi thế giới trở nên không chắc chắn với vô số sự đánh đổi phải đưa ra, AI sẽ quyết định điều gì là tốt nhất?

Đó cũng chính là hành trình mà chúng ta sẽ tiếp tục khám phá trong bài viết tiếp theo về Automated Planning và Decision Making.

-------------------------------------

Comments

Popular posts from this blog

Ngôn Ngữ Của Suy Luận: Logic Đã Dạy Máy Tính Hiểu Thế Giới Như Thế Nào?

ChatGPT có thể trả lời những câu hỏi phức tạp, các AI Agent có thể tự động sử dụng công cụ để hoàn thành công việc và nhiều hệ thống AI ngày nay đã có khả năng lập kế hoạch hay đưa ra quyết định. Nhưng có lẽ một câu hỏi thú vị hơn lại ít khi được nhắc đến: Làm thế nào để một cỗ máy có thể suy luận? Và bằng cách nào máy tính có thể biết rằng kết luận mà nó vừa tạo ra thực sự là đúng? Hóa ra, câu trả lời cho những câu hỏi này không bắt đầu từ Machine Learning hay các Large Language Models. Nó bắt đầu từ một ý tưởng đã xuất hiện từ rất lâu: Logic. Trước khi có thể suy luận về thế giới, máy tính phải học được ngôn ngữ để mô tả thế giới đó. Nó cần biết đâu là đối tượng, đâu là thuộc tính, đâu là những quy luật tổng quát đang chi phối chúng và bằng cách nào những quy luật đó có thể được sử dụng để tạo ra những kết luận mới. Logic, First-order Logic và Predicate Logic chính là những viên gạch đầu tiên của hành trình ấy. Chúng ta sẽ cùng khám phá cách Logic đã dạy máy tính học cách hiểu thế gi...

Cạm bẫy Serverless: Liệu có thực sự giúp bạn tiết kiệm chi phí?

Trong nhiều năm, việc xây dựng và vận hành ứng dụng luôn gắn liền với quản lý máy chủ, cấu hình hệ điều hành, triển khai phần mềm và xử lý các vấn đề về mở rộng hệ thống. Tuy nhiên, sự phát triển của điện toán đám mây đã tạo ra một mô hình mới mang tên Serverless, cho phép lập trình viên tập trung vào việc viết mã thay vì quản trị hạ tầng. Các nền tảng như AWS Lambda, Azure Functions hay Google Cloud Functions giúp ứng dụng tự động mở rộng theo nhu cầu thực tế, đồng thời áp dụng mô hình tính phí dựa trên mức sử dụng. Điều này không chỉ giúp giảm chi phí vận hành mà còn tăng tốc độ phát triển sản phẩm. Chúng ta sẽ tìm hiểu Serverless là gì, cách nó hoạt động, những lợi ích nổi bật, các hạn chế cần lưu ý và những trường hợp phù hợp để áp dụng trong thực tế. Serverless là gì? Serverless là mô hình điện toán đám mây cho phép lập trình viên xây dựng và chạy ứng dụng mà không cần trực tiếp quản lý máy chủ. Serverless không phải là "không có máy chủ" Một trong những hiểu...

Hiểu bản chất Reinforcement Learning (Học tăng cường) qua giải thích về cách AI tự học

Nếu học có giám sát giúp AI học từ những đáp án đã biết trước, còn học không giám sát giúp AI tự khám phá cấu trúc của dữ liệu, thì học tăng cường (Reinforcement Learning - RL) lại đi theo một hướng hoàn toàn khác: AI học bằng chính trải nghiệm của mình. Thay vì được hướng dẫn từng bước, tác nhân (agent) liên tục tương tác với môi trường, thử nhiều hành động khác nhau và nhận phần thưởng hoặc hình phạt. Sau hàng nghìn, thậm chí hàng triệu lần thử nghiệm, AI dần học được chiến lược tối ưu để đạt mục tiêu. Chúng ta sẽ cùng tìm hiểu bản chất của học tăng cường, các thành phần quan trọng như Agent, Environment, Reward, Action và Observation, đồng thời minh họa bằng ví dụ trực quan để thấy AI thực sự "học" như thế nào. 1. Học có giám sát (Supervised learning) Học có giám sát (Supervised learning) là lĩnh vực được nghiên cứu kỹ lưỡng và nổi tiếng nhất trong học máy. Câu hỏi cốt lõi mà nó giải quyết là: Làm thế nào để xây dựng một hàm số có khả năng tự động ánh xạ (map) một đầ...