web-dev-qa-db-ja.com

認知モデリングプログラミングvs命令型プログラミングvs宣言型プログラミング

コンピュータゲームの認知モデリングに関するJohnFungeのこの記事を読んでいます: http://www.qrg.northwestern.edu/resources/aigames.org/1999/fungegame99.pdf
そして、このURLでそれについてさらに詳細に読んでください:
http://www.msci.memphis.edu/~classweb/public_html/comp7990/Spring2000/Wally/Presentation5/tsld014.htm

CMLを理解するのに苦労しています。命令型プログラミングと宣言型プログラミングが混ざり合っていることを理解しています。方法がわかりませんでした。

たとえば、命令型プログラミングの次の擬似コード:

ExpensiveItemsNamesという新しいリストを宣言します。
アイテム内のForeachアイテム:
ItemPrice> 100の場合、
ExpensiveItemsNamesにItemNameを追加します

vs宣言型:(SQLを使用)

アイテムからアイテム名を選択
WHERE ItemPrice> 100

それのCMLバージョンは何でしょうか?
そして、CMLはプログラマーをどのように助けますか?私もそれを理解していませんでした。

同様に、さらに詳細な(前述のように、私が置いた2番目のリンクを意味する)Webサイトでは、スペースの複雑さを軽減するための剪定についても説明しています。
何が剪定されているかはわかっていますが、CMLとの関係が理解できませんでした。現時点では、2つの無関係なもののように見えます。
また、剪定についても-元の記事では言及されていませんが、「さらに詳細な」Webサイトでは、後の前処理段階について言及されています-それがCMLに関連しているかどうかはわかりませんでした。


わかりました。CML「命令型プログラミングと宣言型プログラミングのある種の組み合わせ」という私の最初の言葉は真実ではないことを理解しています(記事に書かれていますが:「...しかし、 CMLの際立った特徴は、ドメイン知識を直感的に指定できる方法と、ゲーム開発者が推論エンジンの能力に焦点を合わせるための使い慣れた制御構造をどのように提供するかです。これは、通常のロジックプログラミング(Prologで表される)と従来のロジックプログラミングの重要な中間点を形成します。命令型プログラミング(Cに代表される) "

私が理解している限り、CMLはこれらの問題に答えるべきです。
1。 「キャラクターの知識をどのように表現するかについて特に注意を払わなければ、彼らの行動の影響について推論するので、「常識」を奪うことができます 。「細心の注意」の意味は何ですか?それはキャラクターの「常識」にどのように影響しますか?そしてCMLはどのように役立ちますか?

2。 「プログラマーが多くの高速な事前プログラムされた動作とより高価な実行時の意思決定の間でバランスを取ることを可能にする便利なメカニズムを提供する方法」
私はこれについて私の仮定を持っていますが、それらが真実であるとは確信していません:
pre-programmed文字のみを使用する場合、複雑さもプログラミングが非常に難しく、メモリと前処理の実行に関しても非常に複雑になる可能性があります。時間。
ただし、実行時の意思決定のみを使用する場合、キャラクターは非常に「愚か」になるか、各ステップで多くの計算を開始する必要があります。
CMLは、実行時に詳細を入力する「推論エンジン」の形式で、その間に何かを提供します。
CMLがこれをどのように行うのか理解できませんでした。
この記事では、時々計算を行うと述べています。 "このようにして、キャラクターは、特定の期間またはイベントの後、一部を知らないことを予測できます。その世界の側面、そしてそれは感知して再計画することを計画することができます。しかし、私は正しく理解したかどうかわかりません。
「さらに詳細な」リンクには剪定が記載されていますが、記事には記載されていません。おそらくthisはCMLの必要な部分ですか?
3。 "区間演算を使用してセンシングを基礎となる理論的フレームワークに統合することにより、非常に複雑で動的な仮想世界にいる場合でも、キャラクターが行動計画を生成できるようにします
ここでの「interval」の意味は、前述の時間間隔ではなく、キャラクターが知っていることの空間だと思います。これもCMLの必要な部分ですか?

ですから、これらは、誰かが知っていればもっとよく理解できれば幸いです。

3
achie

(免責事項:CML、人工知能、シミュレーションソフトウェア、自律型ソフトウェアエージェント、またはこの質問でここで説明するトピックについては何も知りません。私の答えは、私の限られた知識とあなたが提供したリンクに基づいています。 。)


簡単な答え:あなたが言及した用語は、さまざまなカテゴリまたは抽象化レベルに属しているため、比較、類推、または例を作成するのは困難です。


@Brendanが言うように、命令型と宣言型はプログラミング(コーディング)パラダイムです。

あなたが提供したリンクに基づくと、認知モデリングプログラミングは、自律エージェントのソフトウェアシミュレーションのコンテキスト内で使用される 論理プログラミング または イベント駆動型プログラミング のいずれかに最も類似しているように見えます。


自律エージェントのソフトウェアシミュレーションには、次のものがあります。

  • 世界とそのすべての物理的で決定論的な力学
  • 1つ以上のエージェント。それぞれが個別に:
    • 世界から刺激(感覚、入力)を受け取る
    • 独自のロジックを実行します
    • 独自のロジックの出力を使用して、独自のアクチュエータ(モーター)を制御します
  • 一部のタイプのシミュレーションでは、2つのエージェント間の直接通信が許可されます。これにより、各エージェントに入力(メッセージの受信)と出力(メッセージの送信)のモードが追加されます。
  • 単一のタイムステップを完了した後、すべての決定が行われ、すべての物理的効果が適用されると、シミュレーションソフトウェアはタイムステップを進め、意思決定と物理的効果を最初からやり直します。
    • エージェントは、将来のタイムステップでそれらを再利用するために、メモリを繰り越すことができます。
  • より現実的で高度なシミュレーションでは、
    • エージェントは推論行動をとることができます。これには、各エージェントが誘導エンジンを利用する必要があります。
    • エージェントは、統計、パターン認識、または機械学習システムを使用して、意思決定を行い、時間の経過とともにモデルを改善できます。

「エージェントのソフトウェアシミュレーション」が「ソフトウェアアプリケーションの一種」に属すると私が言う理由はパラダイムとは対照的にについて何も言われていないからですどのようにエージェントは独自のロジックを実行します。実際、これらのエージェントのロジックの実装には、さまざまなプログラミングパラダイムが使用されています。上記のいくつかの可能性についてはすでに説明しました。実際に使用されているパラダイムは他にもたくさんあります。


@Brendanが言うように、あなたが提供したリンクの認知モデリングプログラミングは、ドメイン固有言語の1つの実装のようです。

プログラミング言語としての資格はありますか?

取得した場合:

  1. このプログラミング言語の構文と文法、
  2. このプログラミング言語について読んだ内容を確認するためにコンピューターで実行できるソフトウェア実装、

そうです、それはあなたの目的のためのプログラミング言語です。それ以外の場合は、読んだことがあるが、まだ自分で確認していないプログラミング言語です。


私はこれを実用主義者として言います。実際には、それが出版された著者と編集者を信頼する学界であるか、またはあなたが学生である場合を除いて、それを本物の言語であるかのように扱うべきではありません。あなたは勉強の過程であなたのインストラクターとふり遊びのゲームに従事します。


2
rwong

命令型プログラミング、宣言型プログラミング、関数型プログラミング、オブジェクト指向プログラミングはすべて「プログラミングパラダイム」であり、問​​題の解決策を書くためのさまざまな方法です。

認知モデリングは問題の解決策(具体的には、「知性」のモデリングの問題に対する非常に古い解決策)であり、問​​題の解決策を書く方法ではなく、プログラミングパラダイムでもありません。

命令型プログラミングを使用して認知モデリングを実装する(たとえば、「plan(entity)」関数を使用する)か、OOPを使用するなど)、「merman :: plan()」メソッドを使用して認知モデリングを実装することができます) 、または関数型プログラミングで実装します(たとえば、「newstate = plan(oldState)」関数を使用します)。

認知モデリングのための特別な(ドメイン固有)言語を発明することもできます。その場合、あなたの特別な言語はあなたが好きなプログラミングパラダイムを使うことができます。

1
Brendan