web-dev-qa-db-ja.com

PrologがAIプログラミングに適しているのはなぜですか?

AIプログラミングに使われるプログラミング言語を研究しています。私の大学ではLISPがAIプログラミング言語として教えられていることを知っていますが、Prologはめったにそうではありません。私は一種のPrologが好きですが、私はAIプログラマではないので、PrologがLISP/Schemeより優れている理由を自分で判断する資格はないと思います。プログラマーがこのトピックについて何か意見を持っているかどうか疑問に思っていました。

PrologがAIプログラミングにもっと役立つとどうしてあなたは主張できますか?

私はそれを少し研究してきました、そして私が何度も見た基本的な議論は、思考はロジックで提示され、Prologは論理プログラミング言語であるため、Prologは意思決定マシンを簡単に構築できる、またはそのための何かであるということです。

AIのプロローグについて他に言えることはありますか?

26
2rs2ts

序文から 人工知能のためのプロローグプログラミング

Prologは、パターンマッチング、ツリーベースのデータ構造化、自動バックトラッキングなどの基本的なメカニズムの小さなセットを中心としたプログラミング言語です。この小さなセットは、驚くほど強力で柔軟なプログラミングフレームワークを構成します。 Prologは、オブジェクト(特に、構造化オブジェクト)とそれらの関係に関連する問題に特に適しています。たとえば、青い球体が緑の球体の背後にあるなど、オブジェクト間の空間関係を表現することは、Prologでの簡単な練習です。また、より一般的な規則を述べるのも簡単です。オブジェクトXがオブジェクトYよりもオブザーバーに近く、YがZよりも近い場合、XはZよりも近くなければなりません。これで、Prologは空間関係とその整合性について推論できます。一般的なルールを尊重します。このような機能により、Prologは人工知能(AI)および一般に非数値プログラミングのための強力な言語になります。他の標準言語での実装が難解なコードの数十ページをとったシンボリック計算の有名な例があります。同じアルゴリズムがPrologに実装されたとき、結果は1ページに簡単に収まる非常に明確なプログラムでした。

基本的には、さまざまな関係や目標を簡潔に、(ほとんど)読みやすく、(半)自然に表現するのに最適な言語です。たとえば、Lispの同等のコードは、根性に多くの時間を費やし、関係の管理と推論に時間を費やすため、Lispの意図はより冗長でわかりにくくなる傾向があります。

私の学部では、Prologを使用してエキスパートシステムを実装するAIコースを紹介しました。

エキスパートシステムは、非常に具体的な問題を解決するために使用されるソフトウェアであり、その解決策は多数のルールと変数に依存しています。

たとえば、外出時に傘を持って行くべきかどうかを伝えるエキスパートシステムを想像できます。一連のデータ(曇りかどうか、前日に雨が降ったかどうか、どの季節かなど)を与え、エキスパートシステムがルールを介して答えを出します(曇りで雨が降った場合)前日、あなたは傘を取るべきです)。

プロローグの性質により、ルールとファクト(プロローグではすべてがルールまたはファクトです)を実装し、これらのルールとファクトが何千もある場合でも、「データベースにクエリを送信」する(質問に対する回答を得る)ことが非常に簡単になります。 。

このトピックに興味がある場合は、Prologインタープリターをインストールし、非常に基本的なエキスパートシステムを実装してその感触をつかむことをお勧めします。これが、これらのタスクにとって非常に強力なツールである理由を理解するのに役立つ場合があります。

26
Bitgarden

違いは、たとえばCでプログラムを書くのではなく、データベースクエリにSQLを使用するようなものです。SQLでは、必要なことを言いますが、その導出に使用するアルゴリズムを(直接)指定する必要はありません。

Prologプログラムはデータベースと呼ばれることもありますが、実際には一連の述語論理ステートメントです。評価メカニズムはクエリを受け取り、述語論理ステートメントに基づいてクエリを置換し、検索を行って正しい解決策を見つけます。必要なすべての検索アルゴリズム(SQLクエリよりもはるかに複雑)は、Prologコンパイラーに組み込まれています。

SQLクエリは、同じロジックを単純にCで実装する場合、ループとif/else条件文だけで十分です。

Cで実装されたPrologクエリは、(少なくとも)union-findテクニックを使用したバックトラッキング検索を必要とします。そして、これも素朴な解決策です。

特定の種類のAIプログラミングには、Prologが行う多くの種類の検索が含まれます。当然のことながら、本当に-もともとAIプログラミングはLISPまたは他の言語で行われていましたが、Prologはその仕事をするために特別に書かれました。

述語ロジックは、そのAIスタイルのスタイルを定義するための自然なアプローチであり、Prologでは、その定義を取得すると、厄介な検索アルゴリズムをすべて実装する必要なく、それを直接実行できます。

17
Steve314

私は大学で2つのPrologモジュールを取り、言語での開発をとても楽しんだ。

これは特にエキスパートシステムに適しているため、医療症状診断診断を作成しました。

私に説明された方法は、LISPは特定の国でより多く使用され、他の国ではPrologが使用される傾向があるということでした。

どちらが最善であるかという点で、理論コンピューターサイエンスモジュールでラムダ計算を行ったときにLISPを簡単に説明しただけなので、Prologに偏っています。

答えを導き出すためのルールとファクトを処理するアプリケーションを開発している場合、Prologは非常に優れており、バックトラックを自然にサポートします。

4
DazManCat