Tại sao Prolog tốt cho lập trình AI? [đóng cửa]


25

Tôi đang nghiên cứu ngôn ngữ lập trình được sử dụng cho lập trình AI. Tôi biết rằng LISP được dạy như một ngôn ngữ lập trình AI trong trường đại học của tôi, nhưng Prolog hiếm khi như vậy. Tôi rất thích Prolog, nhưng tôi không phải là lập trình viên AI nên tôi không nghĩ mình đủ khả năng tự đánh giá tại sao Prolog tốt hơn LISP / Scheme. Tôi đã tự hỏi nếu lập trình viên có bất kỳ đầu vào về chủ đề này.

Làm thế nào bạn có thể lập luận rằng Prolog sẽ hữu ích hơn cho lập trình AI?

Tôi đã nghiên cứu nó một chút, và lập luận cơ bản mà tôi đã thấy lặp đi lặp lại là vì suy nghĩ được trình bày theo logic và Prolog là ngôn ngữ lập trình logic, Prolog có thể dễ dàng xây dựng các máy quyết định hoặc một cái gì đó có hiệu lực.

Có điều gì khác có thể nói cho Prolog trong AI không?


1
Không có nhiều công việc để viết trình biên dịch / trình thông dịch Prolog trong Lisp. Paul Graham có một ví dụ trong On Lisp .
Larry Coleman

Một người bạn cùng lớp của tôi cũng nói với tôi điều này. Tôi thấy thực sự thú vị khi thao tác tượng trưng của LISP sẽ cho phép tôi tạo lại Prolog. Cảm ơn đã tốt đẹp qua một bên!
2rs2ts

4
@Larry Coleman: Không có nhiều công việc để viết một trình biên dịch / phiên dịch Prolog ngây thơ trong Lisp. Làm cho một thứ hiệu quả và đầy đủ chức năng là không tầm thường trong bất kỳ ngôn ngữ nào.
CHỈ CẦN HOẠT ĐỘNG CỦA TÔI

Câu trả lời:


19

Từ lời nói đầu đến Lập trình Prolog cho Trí tuệ nhân tạo :

Prolog là một ngôn ngữ lập trình tập trung vào một nhóm nhỏ các cơ chế cơ bản, bao gồm khớp mẫu, cấu trúc dữ liệu dựa trên cây và quay lui tự động. Bộ nhỏ này tạo thành một khung lập trình linh hoạt và mạnh mẽ đáng ngạc nhiên. Prolog đặc biệt phù hợp với các vấn đề liên quan đến các đối tượng - đặc biệt là các đối tượng có cấu trúc - và các mối quan hệ giữa chúng. Ví dụ, đây là một bài tập dễ dàng trong Prolog để thể hiện mối quan hệ không gian giữa các đối tượng, chẳng hạn như hình cầu màu xanh nằm phía sau màu xanh lá cây. Cũng dễ dàng nêu ra một quy tắc chung hơn: nếu đối tượng X gần với người quan sát hơn đối tượng Y và Y gần hơn Z, thì X phải gần hơn Z. Prolog giờ đây có thể suy luận về các mối quan hệ không gian và tính nhất quán của chúng với tôn trọng quy tắc chung. Các tính năng như thế này làm cho Prolog trở thành ngôn ngữ mạnh mẽ cho trí tuệ nhân tạo (AI) và lập trình phi số nói chung. Có những ví dụ nổi tiếng về tính toán tượng trưng mà việc thực hiện bằng các ngôn ngữ tiêu chuẩn khác đã chiếm hàng chục trang mã khó hiểu. Khi các thuật toán tương tự được triển khai trong Prolog, kết quả là một chương trình rõ ràng dễ dàng phù hợp trên một trang.

Về cơ bản, đây là một ngôn ngữ tuyệt vời để thể hiện các mối quan hệ và mục tiêu khác nhau một cách cô đọng, (hầu hết-) có thể đọc được và (bán) một cách tự nhiên. Mã tương đương, giả sử, Lisps có xu hướng dài dòng hơn và khó hiểu hơn trong ý định của nó bởi vì bạn dành nhiều thời gian cho can đảm và hệ thống quản lý và lý luận về các mối quan hệ.


Bổ sung nhỏ của tôi ở đây sẽ là Prolog cho phép bạn khai báo các sự kiện , và sau đó các quy tắc dựa trên các sự kiện đó. Quy tắc của bạn sau đó có thể được sử dụng bởi Prolog để lý do và trả lời các truy vấn khác bằng một cách logic suy luận câu trả lời. Ví dụ: nếu một thực tế nói rằng A là tổ tiên của B và một thực tế khác nói rằng B là tổ tiên của C, thì Prolog có thể suy luận rằng A phải là tổ tiên của C mà bạn không phải viết thuật toán để kiểm tra.
code_dredd

25

Tôi đã giới thiệu về khóa học AI trong chương trình đại học đã sử dụng Prolog để chúng tôi triển khai một hệ thống chuyên gia.

Một hệ thống chuyên gia là một phần mềm được sử dụng để giải quyết một vấn đề rất cụ thể mà giải pháp của họ phụ thuộc vào số lượng lớn các quy tắc và biến.

Chẳng hạn, bạn có thể tưởng tượng một hệ thống chuyên gia cho bạn biết bạn có nên mang theo dù khi đi ra ngoài hay không; bạn sẽ cung cấp cho nó một tập hợp dữ liệu (cho dù trời nhiều mây, hôm trước trời mưa, mùa nào, v.v.) và hệ thống chuyên gia sẽ thông qua các quy tắc để đưa ra câu trả lời (nếu trời nhiều mây và trời mưa ngày trước, sau đó bạn nên lấy một chiếc ô).

Bản chất của Prolog khiến việc triển khai các quy tắc và sự kiện trở nên rất đơn giản (trong Prolog, mọi thứ đều là quy tắc hoặc sự thật), sau đó "truy vấn cơ sở dữ liệu" (nhận câu trả lời cho câu hỏi của bạn), ngay cả khi bạn có hàng ngàn quy tắc và sự kiện này .

Nếu bạn quan tâm đến chủ đề này, tôi khuyên bạn nên cài đặt trình thông dịch Prolog và thử triển khai hệ thống chuyên gia rất cơ bản để cảm nhận về nó - nó có thể giúp bạn hiểu tại sao nó lại là một công cụ mạnh mẽ cho các tác vụ này.


Tôi đọc trong nghiên cứu của mình rằng Prolog làm cho các hệ thống chuyên gia dễ thực hiện. Cảm ơn đã ủng hộ điều đó với một số lời giải thích :)
2rs2ts

16

Sự khác biệt giống như sử dụng SQL cho các truy vấn cơ sở dữ liệu thay vì viết chương trình, giả sử C. Trong SQL, bạn nói những gì bạn muốn - nhưng bạn không (trực tiếp) phải chỉ định thuật toán được sử dụng để lấy ra nó.

Một chương trình Prolog đôi khi được gọi là cơ sở dữ liệu, nhưng nó thực sự là một tập hợp các câu lệnh logic vị ngữ. Cơ chế đánh giá lấy truy vấn và thực hiện thay thế dựa trên các câu lệnh logic vị ngữ, thực hiện tìm kiếm để tìm giải pháp chính xác. Tất cả các thuật toán tìm kiếm cần thiết (liên quan nhiều hơn một truy vấn SQL) được tích hợp vào trình biên dịch Prolog.

Một truy vấn SQL, nếu bạn thực hiện cùng một logic một cách ngây thơ trong C, sẽ không cần nhiều hơn vòng lặp và nếu / điều kiện khác.

Một truy vấn Prolog, được triển khai trong C, sẽ cần (ít nhất) một tìm kiếm quay lại bằng cách sử dụng kỹ thuật tìm kiếm kết hợp. Và đó, một lần nữa, là một giải pháp ngây thơ.

Một loại lập trình AI nhất định liên quan đến rất nhiều kiểu tìm kiếm mà Prolog thực hiện. Không có gì đáng ngạc nhiên, thực sự - ban đầu rằng lập trình AI được thực hiện bằng Lisp hoặc một số ngôn ngữ khác, nhưng Prolog được viết riêng để thực hiện công việc.

Logic dự đoán là cách tiếp cận tự nhiên để xác định kiểu vấn đề AI đó và, trong Prolog, khi bạn có định nghĩa đó, bạn có thể chạy nó trực tiếp mà không phải thực hiện tất cả các thuật toán tìm kiếm khó xử đó.


3

Tôi đã lấy 2 học phần Prolog tại trường Đại học và rất thích phát triển ngôn ngữ.

Nó đặc biệt tốt cho các hệ thống chuyên gia, tôi đã viết một chẩn đoán triệu chứng y khoa.

Cách nó được giải thích với tôi là Lisp có xu hướng được sử dụng nhiều hơn ở một số quốc gia và Prolog ở các quốc gia khác.

Về mặt tốt nhất, tôi chỉ trình bày ngắn gọn về Lisp khi tôi thực hiện phép tính lambda trong mô-đun Khoa học máy tính lý thuyết nên tôi thiên về Prolog.

Nếu bạn đang phát triển một ứng dụng để đối phó với các quy tắc và sự kiện để rút ra câu trả lời thì Prolog rất tốt và tự nhiên hỗ trợ quay lui.

Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.