2008年11月17日月曜日

【PAIP】4 GPS: The General Problem Solver

4章の趣旨は、

"Chapter 4 presents the reconstruction of GPS, the General Problem Solver. The Implementation follows the STRIPS approach."

とのこと。ざっとみてみると、AIプロジェクトの進め方の例となっているみたい。そういう意味で、後続の章の基礎となりそうだから、丁寧にやろう。


  • IPL (wikipedia)

  • AIプログラミングの5ステップ(境界は流動的)

    • Describe
    • Specify
    • Implement
    • Test
    • Debug and analyze

  • ふむ。今でいうと、プロセス構成としては平凡かな。いや、TestのいくつかはSpecifyの際に書いとくというのが、最近か。

  • 4.1 Stage 1: Description
  • means-ends analysis (wikipedia)。

  • 4.2 Stage 2: Specification
  • 特になし。

  • 4.3 Stage 3: Implementation
  • アルゴリズムが集合論とマッチしているときは、CLでもListをSetとして扱ってそのまま実装しちゃうのがいい感じ。
  • シンボルのハイフンネーミングはよくない。son-at-homeは(son at home)のほうがよい。なぜかというと、語彙が増えたとき、ハイフンネーミングだとシンボル数が無用に増えるから。なるほど。

  • 4.4 Stage 4: Test
  • 特になし。

  • 4.5 Stage 5: Analysis, or "We Lied about the G"
  • 昔ながらのプログラミングは、仕様を満たすというのが目的だが、AIプログラミングは、新しい問題領域を開拓することが目的なこともある。なので仕様は曖昧であり、バグの概念も曖昧である。
  • AIプログラミングはそもそもアジャイル、ということか。
  • ここからの節はStage 5。

  • 4.6 The Running Around the Block Problem
  • "driving from home to school"というオペレータは表現が簡単。ここで簡単、というのはprecondsやadd-listやdel-listを構成できるということ。
  • では、"running around the block"というようなのはどうだろう。これはdrivingと同じようには表現できない。drivingのときは、どこに居る、とかをprecondsとかにできたがrunningはできない。そうするとそれを表現するために"got some exercise"とかを考えなければいけない。
  • この問題は後程扱う。

  • 4.7 The Clobbered Sibling Goal Problem
  • 「身内のgoalを使っちゃう」問題。
  • 先程作ったGPSでは、goalが複数あるときにうまく機能しないことがある。goalsについて検査を進めていくときに、pass済みのgoal条件であるシンボルを、後続のgoalの実現のために消費してしまうケースがあるということ。
  • この問題の発見者?はGerald Sussman。SICPの人だな。いろいろ繋っているなぁ。
  • achieve-allで解決できる。

  • 4.8 The Leaping before You Look Problem
  • 「見るまえに飛べ」問題。
  • 複数goalがある場合。例えば一つ目のgoalは達成できるが、二つ目はnilの場合。今のGPSのつくりだと、一つ目を達成する行動をしてしまって、二つ目を調べたところでnilとなる。
  • 目的全体が達成できないならば、行動しない方がよい。計画してから行動する、というように変更しなければならない。

  • 4.9 The Recursive Subgoal Problem
  • 「どうどうめぐり」問題。
  • subgoalsの組み合わせによっては無限ループが発生しうる。
  • GPSにはループ検知機構が必要。

  • 4.10 The Lack of Intermediate Information Problem
  • nilになった場合の過程がわからない。デバッグ出力が無いのがよろしくない、という問題。
  • dbgという関数をつくり、出力先として*debug-io*を使う。

  • 4.11 GPS Version 2: A More General Problem Solver
  • (mapc #'convert-op *school-ops*) でデータを一発で書き換えるという進め方、すごい。こういうことができるように使い熟していかねば。
  • とりあえず、Version 2の写経まで。

シプサを途中までやってあるので、なんとか、GPSを計算理論上の文脈で捉えつつ読み進めることができている。
こつこつ。

0 件のコメント: