ぎょーむ日誌 2002-05-21
2002 年 05 月 21 日 (火)
- 0920 起床.
うう,
なんか不調だ.
シャワー.
0940 自宅発.
曇.
今日も天気よくない.
0950 研究室着.
遅刻,
というべきか.
朝飯.
- 今日はバグとりで終った.
重篤だったのをふたつほど潰したんで,
改良された新機構たちがこれで問題なく動くようになってくれたけど
……
ばてた.
- 午前中は個体レヴェルで見られる挙動不審に関するもの.
原因がなかなか特定できなかったんだけど,
昨日の帰路途上で思いついた策を用いると
呪われポイントがわかった.
- ヘンだったのは PipeBunle
(こーいうの)
親子間で「生き太り・死に太り」増減の整合性とれてない,
というもの.
この問題発生箇所を枝分かれ構造の中から見つけるのはたいへんなので
……
だったらノックアウトマウスならぬ
「branching knock-out (枝分かれしない) 樹木」を作って,
それを調べればいいぢゃん,
というのが解決策.
で,
こういうの作った.
|
[branching knock-out 樹木]
ええ,
枝分かれ遺伝子をつぶしてみました
(うそです).
|
- 間違いは後述する新機構を組み込むときに混入した単純バグだった.
直径成長量推定再帰関数 { ... }
直径成長再帰関数 { ... }
直径成長再帰関数 {
直径成長量推定再帰関数 { ... }
...
}
となってたとゆーモノで.
いやはや.
- このバグは「死にパイプの部分的再利用」という
せこい収支計算を組み込む過程で生じた.
で,
この新機構は「PipeTree を太らせずに枝数を増やす」
ために導入された.
- 宗教ぱいぷもでる原理主義的には茎の太さと「葉っぱの面積」
(針葉でどうやって葉面積を算出するのか,
私はいまだにまっとうな説明を聞いたことないけど)
というのが緊密に対応してないといけないらしい.
で,
モデルにそれを組み込んだりすると,
(葉の寿命などで) 針葉が死んだりすると,
それにあわせて茎内部でも死ぬ部分がどんどん増えていく.
ところが,
樹木個体の高さ-太さ関係というのは,
いちおうそれらしい観測データあるんで
(何歳の個体なら直径○cm というような),
それにあわせようとすると
……
すかすかな樹冠になる.
枝数をむやみに増やすと枝だの幹だのが
すさまじく「死に太り」してしまうからだ.
- すかすかでない樹冠を作りたければ枝数を増やしてやるのが
最もまっとうな解決となる.
しかしそれをやると現実ばなれしたぶくぶく太り
……
という矛盾を回避するのが「死にパイプつなぎかえ」
という原理主義からは逸脱した収支計算である
(原案は
牧さん).
- 生きている枝の内部では
資源を費してつねに新しいパイプが生成されている.
生きたパイプの増大が「生き太り」をもたらす.
そのかたわらでは,
(原理主義にしたがって)
パイプがばたばた死んでいって「死に太り」が発生する
……
ということで樹木の枝・幹はひたすら太るわけなんだけど,
死にたてのパイプを帳簿操作上
「生きてる部分につなぎかえて」
やると「死に太り」が減じる
(場合によってはゼロになる).
- この帳簿操作の効果は劇的で,
先週末に示した下図のような,
うじゃうじゃと枝分かれしてるような個体を作っても
幹はむやみやたらと太ったりはしない
……
つまりすかすかでない樹冠を作れるということだ.
- しかしこれではクスリが効きすぎという場合もあって,
枝数はものすごくたくさんあるのに
幹の直径はほとんど増大しなかったり
……
ということで,
折衷案というか妥協案として
「死んだパイプのうち一部 (もしくは全部) を回収して再利用可能」
としてみた.
どれぐらい使いまわしてよいかは連続値として指定する
……
という機構を作っていて,
上のような呪われバグが混入してしまったんだよね.
いやはや.
まあ,
いままでややこしかったパイプ増減計算がひどく単純化されたから,
これでヨシとするか.
- 午後からは
「単木では問題なく動作するのに集団状態にすると挙動不審」
という,
これまたわけのわからぬバグにとりくむ.
夕方になって原因が解明されたんだけど,
こっちは先ほどよりさらに下らぬ阿呆な失敗で
……
ひどく脱力した.
たとえて言えば,
サイフがみつからないので
「どのへんで落したんだろう」
と昨日今日歩いたところをトレイスして探しまわったあげくに,
自分のポケットに入っているのを発見した,
というような.
- PipeTree では個体内部では,
上でうだうだ説明してるような収支計算のたぐいはやらずに,
Adjuster 群という樹種特異的な計算機構に外注させている.
利点としては個体ごとにそういう複雑な計算機構を準備しなくてよい,
ということ.
個体が複数いる場合は,
計算する前に「この個体について計算してね」というのを
Adjuster 群に教えてやらねばならないんだけど,
改造どたばたの渦中にあってそれを指示するコードが消失していた,
とゆーのが失敗だった.
嗚呼.
- 蛇足ながら現在の Adjuster 群は以下のようなコンポーネントで
構成されている.
まぁ,
こういうややこしいのは個体内部から取りだして,
独立した計算システムとしておいたほうが何かと便利なわけで.
adjusters | 窓口機能 |
central_adjuster | 中央管制 |
terminal_adjuster | 末端管制 |
terminal_navigator | 末端誘導 |
resource_allocator | 末端資源分配 |
branching_number | 末端芽数制御 |
assimilator | 資源同化 |
random_event | 確率論的事象 |
- 夕方までにはバグとり終って,
夜はパラメーター調整.
|
[待望の「暗い森」]
樹冠が高密になったんで
……
しかし計算時間もまた今までの数倍に増大.
|
- モデルが変わったんでパラメーター調整むずかしいな.
集団計算やらせておいて
2330 研究室発.
2340 帰宅.
もうちょっと早く帰宅するような生活周期にしたい.
- [今日の運動]
-
北大構内走 (1900-1940).
ストレッチングとか.
- [今日の食卓]
- 朝 (0950):
研究室お茶部屋.
パン.
- 昼 (1320):
研究室お茶部屋.
体調不調の甲山さんが食べなかった弁当もらった.
ごちそうさまでした.
- 晩 (2030):
研究室お茶部屋.
米 1.0 合.
タマネギ雑炊.