FLAGS

筆者おかあつ 大きな区分 記事の区分 記事の一覧 検索 ツイート

2009年3月12日木曜日

(プログラムメモ)地図と標識 (mixi05-u459989-200903120430)

ミクシ内で書かれた旧おかあつ日記を紹介します。
(プログラムメモ)地図と標識
2009年03月12日04:30
駅の看板と地図

駅を歩いているとき、「東口こちら」「西口こちら」というような看板の表示をみて歩くのと、地図を見てどれが一番近道なのか調べてから行くのと、どちらが効率がいいだろうか。 これは明らかに地図を作った方が効率がいいに決まっているわけで、問題は地図をどうやって作るか、地図をどうやって配布するか、にかかってくるのではないかと思う。

オウムとおばさん

ナウシカに出てくるオウムは、生物全体でひとつの意思を持っているんだそうだ。 だから、あるひとつの個体と出会って対話をした内容は、全体で共有されており、例えかつて話した固体とは違う個体と話したときであっても、話した内容を覚えていてくれるんだそうだ。

何という不思議な話だろう、と思うかもしれないけど、身近にそれと同じことをする生物がいる。 近所のおばさんだ。 近所のおばさんのコミュニケーション力はすさまじい。 近所に住みついているおばさん共において、ある個体に「○○さんのダンナが浮気をした」というような情報を伝えれば、翌朝にはすべての個体で情報が共有され終わる。 これは、視点を変えると、おばさんの全個体でひとつの意思を持っているといって差支えが無い。 おばさんはひとつの生物なのである。 恐ろしい。

ナウシカのオウムが決断するとする。 ナウシカのオウムだとすべての個体が同じ情報を持ち、その決断の内容がすべての個体で共有されるため、どの個体が決断してもかまわないことになる。

これも不思議な話に感じるが、身近にそういう生物がいる。 おじさんだ。 小さな会社などで、社員のうちの誰かが「これ...本当は規則でダメだってことんなってるけど... まぁ、一応俺の一存で、やっちゃって構わないよ、オッケーオッケー」って決断してしまって、それを同僚に伝えておけば、まず問題にはならない。 または、「あぁ...これ俺は構わないけど、中田さんが文句言いそうだな。 中田さんがいいって言ったらやっていいよ」というような返答もありえる。

この思考実験からわかることは、固体ごとに個体差があってもうまく行くアルゴリズムがありえるということじゃないかと思う。

この個体差を意図的に作ればこれは処理の分散ということになる。

これは、よくよく考えてみると、人間の世界でも起こっていることに相当する。 専門技術と一般技術だ。


階層

ナウシカオウムとはまた別な意思の共有の仕方がある。 会社だ。 会社の意思はたいてい階層で管理される。 社長がおり、重役がおり、部長・課長・平社員という風に命令の系統が構築される。 この場合、社長のひとりの意思を全体の意思としてみなしても差し支えないのではないだろうか。 この場合、会社は社長の分身といえる。

コメント一覧
ナム   2009年03月12日 08:20
とてもおもしろい考察ですね。

こうした考察が何かプログラムの役に立つらしいということも
興味深いです。
おかあつ   2009年03月12日 11:26
そうなんです。

最近人と「P2Pのアルゴリズム」「マルチスレッドプログラミングのアルゴリズム」は、すごく似ていると、よく思います。

たとえば、マルチスレッドの世界に「カウントダウンラッチ」っていうすごく大切なアルゴリズムがあって、これはある地点を通過する各スレッドが一定の個数を超えるまで待たせるという処理をするんです。 何でこういうことをするかといえば、これは要するに朝の朝礼とか点呼のような役割をするんです。

スレッドも人と同じで、寝起きがいいヤツもいれば、寝起きが悪いやつもいて、出席することが決まっても、決まっただけでなかなか仕事にこないやつが出てくるのです。 出席が決まった段階でバスを発車させてしまうと実は9人しか出席していなくて1人が乗り遅れ、誰も気がつかない、ということになってしまいます。 気がつかないまま仕事をはじめ、仕事が終わるときに1人だけ仕事が終わらなくて行方不明になって、何故帰ってこないのかわからなくて、リーダーは考えあぐねることになるんです。

プログラムの場合、こういう問題を見つけるのはすごく難しいのです。 3~4日、悩んだ末に「あ!よく考えてみたら! こいつ、最初から来てないぞ!」って気がつくことはよくあります。 要するに朝点呼すればいいだけの話なのですが、実際現場に下りて時間のプレッシャーの中で仕事をしていると、なかなか気がつかないものです。

対向二車線の道で追い越しをかけるときも、P2Pのアルゴリズムと似ています。 失敗すると正面衝突してしまうところも似ています。


これは僕が考えているだけですが、こういう例ってたくさんあります。 というか、たぶんP2Pとかマルチスレッドっていうのはより人間とか人生に近くて、だからこそ扱いも難しいんじゃないかっておもいます。
ねこ☆ミ。   2009年03月12日 12:49
おもしろすぎるw

プログラミングの分野で、人間的な例がわかりやすいのが、不思議な感じがする。

例の背後にある、難しい問題が、存在するのかも知れないけど。
おかあつ   2009年03月12日 21:23
>例の背後にある、難しい問題が、存在するのかも知れないけど。

確かに、マルチスレッドプログラミングやP2Pプログラムは、デバッグするのが難しいかもしれない。

だけど、実際に内部で起こっていることって、実はすごく常識的なことだったりするような気がする。 例えば... 誰かが「健康診断が終わったらここに来てください。 先生があとで呼びに来ますから。」って言ったとして、身長測って体重を計って戻ってきて、椅子に座って待っているのだが待てども待てども呼びに来ない。 「おかしい、おかしい」と思っていると、実は先生は患者が来る前に呼びに来てしまって、患者がいないのでさっさと帰ってしまったとか。 こういうこともマルチスレッドプログラミングでは、しばしば起こる。

また、現実世界ではそういうことが起こらないように、たとえば、患者に「すれ違いにならないように、もし先生がいないときに来たら札を立てておいてくれますか?」 とか、先生に「もし来ていなくても帰らないでそのまま待っててください」ってお願いしたり、「絶対来るので何度か見に来てください」とか「15:30までにこなかったら帰ってください」っていうような、いろいろなストックオプションをつけておいたりする。 これもマルチスレッドプログラミングと同じような気がする。


 
出展 2009年03月12日04:30 『(プログラムメモ)地図と標識』