第5章 減算モデル

例題1

前章では,加算のモデルを実装した。続いて,減算のモデルを構成しよう。減算は,加算よりも少し複雑な処理が必要とされる。
まずは,以下の問題を考えてみよう。この問題を解くモデルは,前章で構成した減算のモデルを少しだけ修正すれば,簡単に構成できるはずである。

 456
-123
----
 ???

加算のルールは以下である。
[ルール]
このテキストをimportすることにより,プロダクションシステムに読み込むことが可能である。


問題1

実際にルールを構築してみよう。

[課題]

例題2

では,以下の問題はどうだろう。

 456
-189
----
 ???

この問題を解くモデルを作る時のヒントを以下に示す。
重要なことは,この問題を解決する時に,自分自身は頭の中でどのような処理をしているのかをよく内省することである。自分が行っていることを形式化して,それをルールの形に書き下せば良い。

Working Memoryへの追加

現在のモデルでは,処理している行を記名するために,WMの中に,

(Processing ?CurrentColumn)
というリストを記銘している。
ここではさらに,処理している行に加えて,現在注意が向いている行として,
(Focus ?FocusColumn)
というリストを加えることとする。

ルールの追加

以下のような3つのルールを加える。

【ルール1】

まず,?CurrentColumnの行において,上から下の数字を引けない場合(上の数字が下の数字よりも小さい場合)には,?FocusColumnを左の行に一つ移動させる。

IF
?CurrentColumnを処理している
?CurrentColumnと?FocusColumnが一致している
?CurrentColumnの上の数字が下の数字よりも小さい(?CurrentColumnの行の引き算ができない)
Then
?FocusColumnを1つ左の行に移動させる

【ルール2】

もし,?FocusColumnが?CurrentColumnと一致していない場合には,?FocusColumnの上の数字から1を引いて,引いたことをWMに記銘する。

IF
?FocusColumnと?CurrentColumnが一致していない
THEN
?FocusColumnの上の数字から1を引く
引いたことを記銘する。(Decremented)と記録する。
?FocusColumnを?CurrentColumnの行に戻す

【ルール3】

もしワーキングメモリの中に(Decremented)と記銘されていれば,?CurrentColumnの上の数字に10を足す。

IF
ワーキングメモリの中に(Decremented)と記銘されている
THEN
?CorrentColumnの上の数字に10を足す。
(Decremented)を消す。

問題2

実際にルールを構築してみよう。

[課題]


例題3

では,以下の2つの問題はどうだろう。この問題を解けるように,モデルを拡張しよう。

 406
-189
----
 ???
 40006
-18329
----
 ???

まず,この問題を解く時に,自分の頭の中でどのような処理をしているのかをよく内省してよう。


問題3

まずは自然言語で表現してみよう。

[課題]

問題4

では,実際にモデルを実装してみよう。

[課題]