Algorithm = Logic + Control.
なわけですが、一方で、より有名なので、
Programs = Data structures + Algorithms.
があるわけです。
ちなみにAIMAがエージェントアプローチと呼ばれるのは、AIMAで取扱うものは、機械だろうが生物だろうが、ソフトウエアだろうがハードウエアだろうが、Common Lispが採用言語だろうがJavaがそうだろうが、エージェントという統一的な観点で整理しているからです。
そこで、Logicが知識表現である、というのが私にとっては大きな気づきでした。AIMAの中では他の知識表現として統計的なものを含めてLogic以外のものも取り上げられています。ベイズとか隠れマルコフとか。それらがどちらかというと現代的なAIのお話になっている。
さて、日頃プログラムを書くときにデータというのはよく使うわけですが、これもエージェント的な観点でみると何かしらの知識表現とも見做せてきます。そうすると、
Algorithm = Logic + Control.
ではなく、
Algorithm = Knowledge Base + Control.
の方がいいように思えてきます。Knowledge Baseの構築方法の一つとして知識表現にLogicを使うこともあるよ、ということで。Knowledge Baseを拡大解釈すれば、あながち間違いではないかと。
するとデータベースってなんじゃないな、ということが気になるわけです。
これはこれで、Prologと、SQL(というか関係代数)との関係含めて先々確認しなければいけないのですが、ある種のデータベースはKnowledge Baseとみなすのがよいと思うし、ある種のデータベースは、外界としてしまってデータベースとのやりとりは、エージェントのセンサを介して情報を得るという、外部入出力とみなすのがよいように思います。直感ですが。
まとめると、Environmentの中で、
Agent = Sensor + Actuator + Intelligence.
なんですが、Intelligence というのはいろいろありえてSoftwareの場合もあり、
Sensor,Actuator,Intelligenceの全部がSoftwareの場合がよくあるプログラミングでやっていることで、
だからそれをProgramと呼んで、
その場合は全部Softwareなので、どこでインターフェイスを切りますかということが整理の入口になりそれがアーキテクチャであり、
同じ対象領域でも何がSensorで何がActuatorでとかは違うわけで、
SensorとActuatorは外部インターフェイスというか入出力と考える部分にあたり、
するとIntelligenceの部分が入出力以外ということになり、いわゆるProgramの本体部分なので、
Intelligence = Data structures + Algorithm
なんですが、Data structuresを知識表現とみれば、
Algorithm = Knowledge Base + Control
のKBに吸収されてしまうので、
Intelligence = Knowledge Base + Control
となるなか、
データベースはEnvironmentに属すのかIntelligenceに属するのかという判断があるので、
その判断によって、EnvironmentにいったりKBにいったりするという。
さて、大本にもどると、
Agent in Environment.
なんですがこれは、
Domain in World.
と同型であり、ここでDomain指向との対応がとれる、と。
そちらの言葉で言えば、DomainとWorldの境界線がSystem Boundaryにてシステム思考が出てくる、と。
また、Common Lispのhomoiconicというのは、
Algorithm = Knowledge Base + Control.
ここのKBとControlの境目を柔軟にして探検的にプログラミングできますよ、ということで、それだけじゃなくて、リストまたはS式というのは知識表現言語として柔軟ですよ、というつながり。
つながった?
0 件のコメント:
コメントを投稿