bitterharvest’s diary

A Bitter Harvestは小説の題名。作者は豪州のPeter Yeldham。苦闘の末に勝ちえた偏見からの解放は命との引換になったという悲しい物語

Lego BotsをHaskellで動かす-システム思考

2.システム思考

レゴロボットの動作はそれほど複雑ではないが、すぐに、プログラミングができるほどには単純ではない。プログラムを開発するときは、仕様作成、設計、実装、検証、評価の手順を辿る必要がある。

これから開発するロボットは、とても簡単で、黒い線に沿って動き回るだけである。このように単純なロボットでも、設計は十分に科学的にまた工学的に行う必要がある。

ロボットのような一つのシステムを設計するときに役立つのは、ドネラ・メドウズ(Dana Meadows)さんのシステム思考(Thinking in System)である。彼女は、2001年に60歳で急逝されたが、先見性に優れた学者であった。1972年に「成長の限界」(The Limits to
Growth)という本を出し、いち早く、「人口増加や環境汚染をこのまま維持し続ければ、100年後には限界に達する」と警鐘を鳴らした。持続可能(サステイナブル)社会の必要性を説いた最初の人達の一人(しかも主導的な)である。彼女がSustainable Systemsについてミシガン大学で講演しているときの動画YouTubeにアップロードされている。動画を見ていると、彼女の人となりが良くわかり、素敵な人を早く失ってしまったことへの悲しみが湧いてくる。

その彼女が書いた本の中に、「世界はシステムで動く」(Thinking in Systems: A Primer)がある。彼女が残した原稿を基に没後7年の2008年に発行された本だが、名著の一つといってもよい。

メドウズさんは、「システムとは、何かを達成するように一貫性を持って組織されている、相互につながっている一連の構成要素である」とシステムを定義している。そして、システムは三種類のもの、即ち、①要素、②相互のつながり、③機能または目的、から成り立っている。システムでないものは、いずれかの種類を持ち合わせていない。また、システムは、自己組織化が可能で、多くの場合、外部からのかく乱に対して自己修復できるし、また、しなやかな弾力性を有し、システムの多くは進化的であるとも言っている。

彼女の定義によれば、路傍の石は相互のつながりもないし、機能も目的もないのでシステムとはならない。自転車は、車輪やブレーキやサドルなどの要素を持ち、要素同士は繋がりをもち、乗り物という機能を有しているので、システムとなる。それでは、龍安寺のような石庭はシステムと言えるだろうか。庭に配置されている石(複数の要素)は、美的な感覚でのつながりを有していて、一つの美を作り出しているので、高次のシステムと呼べないことはないが、石が物理的なつながりを有していないので、一般的には路傍の石と同じでシステムではないと考えたほうが良い。

これから開発しようと思っているロボットは三つの種類を持ち合わせているので、進化的であるかどうかは別として、システムと考えてよい。

システムの要素にはストックとフローと呼ばれる特別なものがある。浴槽を例にとってみると、注入口からの流量と(浴槽の上部を含む)排出口への流量はフローであり、浴槽にたまっているお湯がストックである。
f:id:bitterharvest:20150717141811p:plain

注入量が排出量を上回ればストックは増えていき、逆であればストックは減っていく。フローを制御することで、ストックの量を調整することができるが、一般に、ストックは、時間遅れ、バッファー、安定期、勢いなどを生じさせるものとして機能する。

それでは、ストックを浴槽からダムに変えて考える。ダムは、下流の川(あるいは、水道、農業用水)に流れる水の量を一定に保つ役割をになっている。上流の川からダムに流れ込む流量は一定でなく、雨が降ると流量が増え、そうでないときは減少する。上流の川の流量の変化に関係なく、下流の川に一定量の水が流れるようにするために、ダムは、沢山の水が流れ込んだとき水を溜め込み、水が少なくなったとき溜め込んだ水で補う、という機能を提供する。

流量の変化がそれほど大きくなければ、ダムの仕掛けはこれだけでよいのだが、日本には台風のように豪雨をもたらす気象現象がある。ダムは、定められた以上の水量を溜め込むと決壊する。このため、危険水域を超えたときは、ダムに溜め込まれた水を放出する必要がある。このような操作をフィードバックという。図示すると次のようになる。このフィードバックはストックにバランスをもたらす。
f:id:bitterharvest:20150718064823p:plain

上記の例は、排出口を操作してのフィードバックであったが、もちろん、注入口を操作してのフィードバックもある。

田植えを終えた後の田圃は常に水を張っておくことが重要である。田圃に溜め込まれた水は蒸発や漏出などにより失われるため、注入口を調整して水を補う必要がある。これが、注入口へのフィードバックである。
f:id:bitterharvest:20150718064843p:plain

しかし、田圃の水管理はもう少し複雑である。農林水産省九州農政局佐賀中部農地防災事務所が作成した米作りと水利用の一年には、水田の水管理の方法が示されている。
f:id:bitterharvest:20150718061940p:plain

米作りでは、田植えをしてからひと月もたつと水を抜いたり入れたりという作業を繰り返すことになる。
f:id:bitterharvest:20150718064854p:plain

田圃の水管理という観点からみると、注入口と排出口を、稲の生育に合わせて調整することが必要である。これは、注入口と排出口の両方への、バランスをとるためのフィードバックである。

一般にシステムを設計したり、分析したりするとき、ストック、フロー、フィードバックの要素に分けると考え易くなる。メドウズさんが学生だった時代は、制御理論が全盛の時代で、このような考え方をするのは、至極当たり前のことであった。長い歳月を経て、デジタル化が進み、手続き的な方法でプログラムを実現するようになってから(辛口でいえば、多くのものが結果オーライ型になってから)、制御理論はすっかり忘れられてしまったが、彼女のシステム思考で蘇ったのは、とてもよいことだと思う。

次の記事では、黒い線に沿って走行するレゴロボの設計をシステム思考で行う。記事を読む前に、レゴロボでのストック、フロー、フィードバックを考えて欲しい。