<?xml version="1.0" encoding="UTF-8" ?><rdf:RDF 
  xmlns="http://purl.org/rss/1.0/"
  xmlns:rdf="http://www.w3.org/1999/02/22-rdf-syntax-ns#"
  xmlns:atom="http://www.w3.org/2005/Atom"
  xmlns:dc="http://purl.org/dc/elements/1.1/"
  xml:lang="ja">
  <channel rdf:about="http://w.atwiki.jp/hebolisper/">
    <title>hebolisperのネタ帖</title>
    <link>http://w.atwiki.jp/hebolisper/</link>
    <atom:link href="https://w.atwiki.jp/hebolisper/rss10.xml" rel="self" type="application/rss+xml" />
    <atom:link rel="hub" href="https://pubsubhubbub.appspot.com" />
    <description>hebolisperのネタ帖</description>

    <dc:language>ja</dc:language>
    <dc:date>2008-04-22T22:15:44+09:00</dc:date>
    <utime>1208870144</utime>

    <items>
      <rdf:Seq>
                <rdf:li rdf:resource="https://w.atwiki.jp/hebolisper/pages/30.html" />
                <rdf:li rdf:resource="https://w.atwiki.jp/hebolisper/pages/29.html" />
                <rdf:li rdf:resource="https://w.atwiki.jp/hebolisper/pages/28.html" />
                <rdf:li rdf:resource="https://w.atwiki.jp/hebolisper/pages/27.html" />
                <rdf:li rdf:resource="https://w.atwiki.jp/hebolisper/pages/26.html" />
                <rdf:li rdf:resource="https://w.atwiki.jp/hebolisper/pages/25.html" />
                <rdf:li rdf:resource="https://w.atwiki.jp/hebolisper/pages/24.html" />
                <rdf:li rdf:resource="https://w.atwiki.jp/hebolisper/pages/23.html" />
                <rdf:li rdf:resource="https://w.atwiki.jp/hebolisper/pages/22.html" />
                <rdf:li rdf:resource="https://w.atwiki.jp/hebolisper/pages/21.html" />
              </rdf:Seq>
    </items>
	
		
    
  </channel>
    <item rdf:about="https://w.atwiki.jp/hebolisper/pages/30.html">
    <title>modern compiler implementation in ML</title>
    <link>https://w.atwiki.jp/hebolisper/pages/30.html</link>
    <description>
          </description>
    <dc:date>2008-04-22T22:15:44+09:00</dc:date>
    <utime>1208870144</utime>
  </item>
    <item rdf:about="https://w.atwiki.jp/hebolisper/pages/29.html">
    <title>The Clobbered Sibling Goal Problem</title>
    <link>https://w.atwiki.jp/hebolisper/pages/29.html</link>
    <description>
      子供を学校に屆けるだけではなく、お金をかせいだり、一日の残りをどのようにすごすかも考えてみてください。GPSは下のような構文でそういった問題を簡単に解決することができます。

 &gt; (gps &#039;(son-at-home have-money car-works)
   	&#039;(have-money son-at-school)
	*school-ops*)
 (EXECUTING DRIVE-SON-TO-SCHOOL)
 SOLVED

しかしながら、お金をバッテリーにつかうような次の例では正しくない成功が返ってきてしまいます。

 &gt; (gps &#039;(son-at-home car-needs-battery have-money have-phone-book)
   	&#039;(have-money son-at-school)
	*school-ops*)
 (EXECUTING LOOK-UP-NUMBER)
 (EXECUTING TELEPHONE-SHOP)
 (EXECUTING TELL-SHOP-PROBLEM)
 (EXECUTING GIVE-SHOP-MONEY)
 (EXECUTING SHOP-INSTALLS-BATTERY)
 (EXECUTING DRIVE-SON-TO-SCHOOL)
 SOLVED

この「バグ」はGPSはゴールのセットをするために(every #&#039;achieve goals)という表現を使うせいです。この表現がtrueを返すなら、ひとつずつ順にゴールたどりつくことを意味しますが、それは最終的にtrueだったことは意味しません。言いかえると、(have-money son-at-school)というゴールは、have-moneyとson-at-schoolが最終的に両方存在している状態であればtrueなのですが、GPSにとっては「最初にhave-moneyを、それからson-at-schoolを」という意味にとります。一つのゴールにたどりつくまでは、別のゴールを達成しないといったこともあります。こういったことを「prerequisite clobbers sibling goal(厳密でひどい兄弟ゴール)」問題と呼んでいます。have-moneyとson-at-school    </description>
    <dc:date>2008-01-25T05:29:49+09:00</dc:date>
    <utime>1201206589</utime>
  </item>
    <item rdf:about="https://w.atwiki.jp/hebolisper/pages/28.html">
    <title>The Running Around the Block Problem</title>
    <link>https://w.atwiki.jp/hebolisper/pages/28.html</link>
    <description>
      「家から学校までのドライブ」のoperatorは前提条件、家にいるなどのdelete-list、学校にいるなどのadd-listといった簡単な内容でした。では、&quot;runnning aroud the block&quot;というのはどうでしょうか?居場所もかわりませんし、addやdeleteといったものを意味するlistもありません。そうなるとoperatorを適用する理由はないでしょう。もしかしたらadd-listは「エクササイズしたい!」とか「つかれた」とか、もっと一般的な「ブロックを走った経験」などを含むべきでしょう。こういった問題にはのちほど応えます。    </description>
    <dc:date>2008-01-25T05:26:38+09:00</dc:date>
    <utime>1201206398</utime>
  </item>
    <item rdf:about="https://w.atwiki.jp/hebolisper/pages/27.html">
    <title>Stage 5: Analysis, or &quot;We Lied About the G&quot;</title>
    <link>https://w.atwiki.jp/hebolisper/pages/27.html</link>
    <description>
      以下のセクションでは、このGPSの一般的な問題点についてあつかいます。次の4つのセクションでは、このversionのGPSの限界を指摘し、次のプログラムでこれらの制限をどのように訂正していくかをみていきます。

制限をバグという人もいます。しかし私たちはプログラムの「拡張」によって、「訂正」していきます。この点に明確な答がないのは、不明瞭な問題の記述や仕様のせいではありません。AI Programmingは巨大な探検なのです。対象には明確な仕様を定義する以上の問題が隠されているのです。コードが書かれてはじめて問題点がみえてくるというのは、よくある一般的な概念なのです。    </description>
    <dc:date>2008-01-25T05:25:17+09:00</dc:date>
    <utime>1201206317</utime>
  </item>
    <item rdf:about="https://w.atwiki.jp/hebolisper/pages/26.html">
    <title>Stage 4: Test</title>
    <link>https://w.atwiki.jp/hebolisper/pages/26.html</link>
    <description>
      このセクションでは&quot;学校までドライブする&quot;というドメインにつイて、list operatorを定義し、そのドメインにいける問題をどのように作成し、解決するのかをみていきます。最初に必要なのはドメインについてのlist operatorの構築です。defsstructは下記のとおり、opの型のmake-opを自動的に定義します。

 (make-op :action &#039;drive-son-to-school
          :preconds &#039;(son-at-home car-works)
	  :add-list &#039;(son-at-school)
	  :del-list &#039;(son-at-home))

この表現はactionがdrive-son-to-schoolというactionと、その前提条件であるadd-list,del-listという分割されたlistを返します。このoperatorの意図するところは、いつでも息子は自宅にいて、車は動作し、driving-to-schoolを適用すると息子が自宅にいる状態が削除され彼が学校にいるという状態に変更されるということです。
son-at-homeのように長いフレーズにハイフンをつけて表現する方法はシンプルで有効な手段です。よりよい表現はもしかしたら(at son home)かもしれませんが、これはatomではなくなってしまいます。atom-basedなアプローチの問題点の一つは組み合わせです。もし、10個の述語と10人とオブジェクトがあった場合は、利用可能なatomが10 * 10 * 10 = 1000になってしまいますが、componentなら20ですみます。明かに、componentを記述する方が簡単でしょう。この章では、世界記述の全部に必要ではないのでと単純さのために、ハイフンつきのatomを利用します。別の章ではもっとより深い知識表現をとります。
このoperatorを使ったモデルでは、109ページで引用したNewellとSimonの引用に対応する別のoepratorを定義できます。バッテリーの設置、店で問題を修理、店への電話などです。電話番号を調べたりとか店にお金を支払うなどの&quot;and so on&quot;もoperatorを追加することで実現できます。

 (defparame    </description>
    <dc:date>2008-01-15T07:52:51+09:00</dc:date>
    <utime>1200351171</utime>
  </item>
    <item rdf:about="https://w.atwiki.jp/hebolisper/pages/25.html">
    <title>Stage 3: Implementation</title>
    <link>https://w.atwiki.jp/hebolisper/pages/25.html</link>
    <description>
      仕様が完全であるのならCommonLispに十分実装できます。図4.1にGPSをCommonLispを使って実装するための値、データ型、関数をまとめておきます。

|GPS|Top level関数。operatorのlistをつかって、状態をゴールまで解決する|
|*state*|特殊変数：現在の状態|
|*ops*|特殊変数：利用可能なoperatorのlist|
|op|データタイプ：add-listとdel-listの前提条件つきoperation|
|achieve|関数：単一のゴールを達成する|
|appropriate-p|operatorがgoalに対して適切かを決定する|
|apply-op|現在の状態にoperatorを適用する|
|member|CommonLisp関数：listにmemberが含まれているかをテストする|
|set-difference|setの中のそれ自身を含まないlistを返す|
|union|2つのlistを連結する|
|every|elementごとにlistからテストにパスしたを返す|
|some|listからテストにパスしてlistを返す|
|find-all|elementにマッチしたすべてのlistを返す(p101)|

そして、これが完全なコードです

 (defvar *state* nil &quot;現在の状態：条件のリスト&quot;)
 (defvar *ops* nil &quot;利用可能なoperatorのリスト&quot;)
 (defstruct op &quot;Operation&quot;
   (action nil) (preconds nil) (add-list nil) (del-list nil))
 (defun GPS (*state* goals *ops*)
   &quot;General Problem Solver: *ops*をつかって、すべてのgoalを達成する&quot;
   (if (every #&#039;achieve goals) &#039;solved))
 (defun achieve (goal)
   &quot;もしすでに到達してるならgoalを達成する。そうでないなら適切なopがあれば、それを適用する&quot;
  (or (member goal *state)
      (some     </description>
    <dc:date>2008-01-15T06:37:14+09:00</dc:date>
    <utime>1200346634</utime>
  </item>
    <item rdf:about="https://w.atwiki.jp/hebolisper/pages/24.html">
    <title>Stage 2: Specification</title>
    <link>https://w.atwiki.jp/hebolisper/pages/24.html</link>
    <description>
      この点におけるアイデアは、あいまいさが許されるなら、GPSで解決する問題がなにを意味するかということだろう。Lispにそって気付いたことを表現していくと次のようになる。

- &quot;なにを持っているか&quot;という現在の状態と、目的の状態&quot;何を欲っしているか&quot;の条件のセットを表現することができる。CommonLispは setsのデータタイプは持ってないが、listはあり、listでsetを実装することができる。それぞれの状態はsymbolで表現することができる。そうすれば、典型的なゴールはlistの2つの条件(rich famous)になるし、典型的な現在の状態も表現できる(unknown poor)。

- 許される演算子のlistが必要になる。このlistは前提条件や問題にかぎらず一定であるが、新しい問題のドメインに対しては変更可能である。

- operatorはactionの構造や前提条件のlistや効果のlistとして表現される。現在の状態から条件を追加削除することができる効果を可能な限り設置することができる。そして、効果のlistを追加のlistと削除のlistに分割する。これはGPS実装のSTRIPSという方法によるもので、この章でそれについては扱う。オリジナルのGPSは仕様の作用に対して柔軟ではあるが、それゆえ効率的ではない。

- GPSによって記述される完全な問題は、最初の状態、ゴールの状態と、知られているoperatorのsetである。なので、GPSは3つの引数をとる関数となる。たとえばこのように呼びだす。
 (GPS &#039;(unknown poor) &#039;(rich famous) list-of-ops)
別の言葉でいうと、poorでunknownな状態ではじまって、operatorを組み合わせて、richでfamousになる。GPSは問題が解決されたらtrueを返し、どのようなactionをしたかを表示する。もっとも単純な方法は、ゴールにたどりついたときに、それを実行することである。もし、すべて達成されれば、問題は解決されている。

- 単純なゴールの状態は2つの方法で達成される。現在の状態がそうであれば、ゴールですることはなにもない。そうでなければ適切operatorを探し、適用する。

- 作用のうちの一つのopera    </description>
    <dc:date>2008-01-10T07:44:50+09:00</dc:date>
    <utime>1199918690</utime>
  </item>
    <item rdf:about="https://w.atwiki.jp/hebolisper/pages/23.html">
    <title>Stage 1: Description</title>
    <link>https://w.atwiki.jp/hebolisper/pages/23.html</link>
    <description>
       MEMO:このページは少々ひどいので、あとで直す。

問題を記述するにあたって、はじめにNewellとSimonの1972年の論文「Human Problem Solving」をみてみましょう

&amp;italic(){GPSの主要な手法は人間の手段目的解析を具象化してむすびつけることです。手段目的解析の典型は下記のcommon-senseから引用でしょう。}

  子供を保育園につれていきたい。持ってるものと必要なものはなにか?。一つは距離だ。
  何が距離を変えるだろう。自動車。自動車は動かない。動かすには何が必要か?
  バッテリー。バッテリーは新しいか?車は店で修理する。車を店にもっていき、
  修理しなければならない。店は私が何を必要としているかを知らない。何が難しいか?
  コミュニケーション。どうすればいいのか?電話...などなど

&amp;italic(){その種の分類解析の機能化というのは終端までのゆらぎの間で、要求を機能化し、すべき手段をならべ、GPSの選択基本システムで選択するということがある。}


解析は新しいことではない。手段目的解析は2300年まえにアリストテレスが「ニコマコス倫理学」の&quot;自然の検討とその物質&quot;にエレガントな記述をしている(Book III. 3,1112b)

&amp;italic(){最後まで検討せずとも意味はある。医者は彼が治るかを検討しない、演説者は彼を説得できるかを検討しない、法律家は法や秩序の作成を検討しない、誰も死を検討しない。終わりを過程し、それがどのようになるのか、なんの意味があるのかを考える。生みだされたことに何かの意味があるかのように。......}

この問題解決のセオリーについての記述で、なにをプログラムすべきだろうか?最初に、引用されたプロシージャのアウトラインを理解しようとする。何かしたい状態が問題になったときに、手段目的解析とよばれるプロセスをつかって問題解決をはかるようにする。これが主な考え方である。NewellとSimonの例では、問題は子供を学校につれていくことであるが、一般的にはもっと広い問題の分類の解決についてプログラムしないといけない。&quot;持っているものと欲しいものの差&quot;をなくすことができれば、問題は解決できる。たとえば、子供が家にいて学校に行かせたいなら    </description>
    <dc:date>2008-01-10T06:37:48+09:00</dc:date>
    <utime>1199914668</utime>
  </item>
    <item rdf:about="https://w.atwiki.jp/hebolisper/pages/22.html">
    <title>GPS:The General Problem Solver</title>
    <link>https://w.atwiki.jp/hebolisper/pages/22.html</link>
    <description>
      General Problem Solverは1957年にAlan NewellとHerbert Simonによって開発され、確実に問題を記述するできれば、すべての問題を解決するたった一つのコンピュータプログラムという壮大なvisionを与えられました。GPSが紹介されたたときにひきおこした混乱によって、知性マシンの偉大な時代がやってきたとAIのことを考えた人々もいました。SimonはGPSについてこう述懐しています

&amp;italic(){ショックを与えたかったんじゃないんだ。...でも、一番簡単にまとめようとすると、マシンが考え、学び、創造するということだった。もっと言えばその能力はどんどんすごい勢いで増大していく...未来においては、それらの扱うことのできる問題が人類の知性の広がりと同じだけのもつようになる、ということだ。}

けれども重要なプログラムの歴史的な問題のせいで、GPSはその誇張された期待には応えられませんでした。最初のプログラムは解決の戦略的と問題の知識が分割されておらず、それが問題解決のための調査に拍車をかけました。これらすべての理由が学習にからみあったのです。

オリジナルのGPSプログラムほかにもいくつか小さな問題がありました。さらに、それあIPLという低レベルの言語で記述されていて、それが余計に複雑にしていました。事実、GPSにおける理由のおおきなものに、IPLによって起きる混乱がありました。プログラムが複雑であれば、それはより重要になります。オリジナルのプログラムを無視してCommonLispにおきかえれば、IPLを使うより明快になるでしょう。その結果、GPSはかなりシンプルになり、AIのいくつかの重要な点が明らかにされました。

一つの1レベルとして、この章ではGPSを扱います。しかし、もう一つのレベルとしてAIコンピュータプログラミング開発のプロセスをとりあげます。プログラム開発は5つのステージにわかれています。最初に問題の記述、英語の散文の記述についてのラフなアイデア、なにをしたいのか。次にプログラムの仕様、問題をどのようにコンピュータプロシージャに近い形に書きなおすべきか。3つめはCommonLispによる実装。4つめはテスト。5つめはデバッグと解析です。その境界は流動的で、各ステージは完全なものではありません。問    </description>
    <dc:date>2008-01-10T04:58:07+09:00</dc:date>
    <utime>1199908687</utime>
  </item>
    <item rdf:about="https://w.atwiki.jp/hebolisper/pages/21.html">
    <title>Early AI Programs</title>
    <link>https://w.atwiki.jp/hebolisper/pages/21.html</link>
    <description>
      * 4 [[GPS:The General Problem Solver]]
** 4.1 [[Stage 1: Description]]
** 4.2 [[Stage 2: Specification]]
** 4.3 [[Stage 3: Implementation]]
** 4.4 [[Stage 4: Test]]
** 4.5 [[Stage 5: Analysis, or &quot;We Lied About the G&quot;]]
** 4.6 [[The Running Around the Block Problem]]
** 4.7 [[The Clobbered Sibling Goal Problem]]
** 4.8 The Leaping before You Look Problem
** 4.9 The Recursive Subgoal Problem
** 4.10 The Lack of Intermediate Information Problem
** 4.11 GPS Version 2: A More General Problem Solver
** 4.12 The New Domain Problem: Monkey and Banana
** 4.13 The Maze Searching Domain
** 4.14 The Blocks World Domain
** 4.15 Stage 5 Repeated: Analysis of Version 2
** 4.16 The Not Looking after You Don&#039;t Leap Problem
** 4.17 The Lack of Descriptive Power Problem
** 4.18 The Perfect Information Problem
** 4.19 The Interacting Goals Problem
** 4.20 The End of GPS
** 4.21 History and References
** 4.22 Exercises
** 4.23 Answers    </description>
    <dc:date>2008-01-25T04:06:34+09:00</dc:date>
    <utime>1201201594</utime>
  </item>
  </rdf:RDF>
