ぎょーむ日誌 2002-12-23
2002 年 12 月 23 日 (月)
- 0900 起床.
朝飯.
コーヒー.
1000 自宅発.
晴.
1010 研究室着.
- 数値計算プログラム作成ばかりやってて,
また仕事わりふり全体が破綻しつつあるので
……
とりあえず生態学会大会
要旨書き.
京都の宣教師殿の
要旨スタイルマクロ
(LaTeX)
使わせていただく
……
う,
印刷したあとに切り貼りせんといかんのか.
- 30 分ほどで図いりのてきとーなる要旨を書いてしまう.
今回は甲山さんとの連名なんで,
まぁ明日あたりに見てもらって速達で出してしまうか.
25 日必着.
- 連休であるためか,
ほとんど誰もいない.
M1 大澤君あいてに Linux の
apt-get
ちゅーとりある 2 時間ほど.
つまり RPM package の管理手法ですな.
まぁ,
修士の中にひとりぐらい Linux 使いがいたっていいだろう,
ということで.
- おそい昼飯.
小菅せんせーがパンの耳にマヨネイズを付着させた
面妖なるモノを食おうとしてるで,
まよ依存症ではと忠告したんだけど,
聞く耳を持たない.
やさぐれまよらー
救済しがたし.
- このせんせーの先週の酔態証拠写真を大澤君がお茶部屋に提出.
「俺はこんなにひどいことをやったのか」
ととぼけておられるよーで.
- 昨日かなり書きすすめた修正 Powell 法 Perl モジュールの
アルゴリズムは自分のアタマで覚えていた計算方法だけによっているんで
……
これ以上つくっていく前に,
また Numerical Recipes を見なおして
その計算方法でまちがいないかどうか調べてみる.
- 多次元の空間を parameter set が移動していくくだりはよい,
としてだ
……
あるヴェクトルをきめたときにその上で関数の極値を探す
Brent のアルゴリズムなるものその他あれこれあって,
これがややこしー.
えーい,
どうしたものか.
Perl ではまだぜんぜん書いてない.
- どうせ Perl でプロトタイピングしてるんで,
それならもう一度 CPAN
あさってみますか
……
とあまり期待しないでひっかきまわしてみると
……
あった.
Numerical Recipes コードの Perl 移植版が.
- えーと,
John A.R. Williams
氏なる人物が 1995 年のクリスマスに公開したコードが
そのまま今も CPAN している.
さっそく
Math::Brent
なるモジュールをダウンロードして
インストールしてみる.
- その
Brent.pm
は
Numerical Recipes
の特徴である読みづらい C コードをそのまま Perl 化したもの.
しかしちゃんと動作する.
- なんとまぁ,この Williams 氏は Nelder-Mead 式の
Polytope 法
(これは Powell-Brent 法とはまた別モノ)
まで Perl モジュール化しちゃっているよ.
これも Numerical Recipes から
そっくりそのまま移植版.
こっちの
Math::Amoeba
ほうは多次元なのに
一次元な Brent よりコードが短い.
- さーて,
どうするか.
Math::Brent
を使って修正 Powell 法の Perl モジュールの完成をめざすか?
それとも
……
よし,
Powell 法モジュールの開発はいったん止めて,
まずは
Math::Amoeba
でくだんの最尤推定問題が解決するかどうか調べてみるか.
修正 Powell 法 Perl モジュール作っても,
それ自身の試験運転にかなりの時間をとられそうなんで.
- 数値計算定番本 Numerical Recipes によると,
Polytope 法より Powell 法のほうが
「速い」ということらしい.
そういうもんかと今回は Powell 法にいったんは着手したんだけど,
実際のところ Powell 法がどれぐらい速いのか私にはわからん
(というか,このアルゴリズム「速い」
とはにわかには信じられない).
いっぽうで
Polytope 法が遅い,
というのはいろいろと体験ずみであるが
……
しかし
Math::Amoeba
はそれなりの速度で動いているように見える.
- そもそも「数値微分を使わない最大化」で,
懸案の問題が解けるかどうかをまず確かめないといけないわけで.
もし解けないなら速い遅いは関係ない.
- CPAN の
Math::Amoeba
はそのままでは使えないような気がしたんで,
これを手元で改造してみることに.
とりあえず移植者 Williams 氏のクレジットなどは
コード中に残しておいたまま,
NelderMead.pm
と名前をかえて内部を改変してみる.
- ところがこのコードというのが,
Numerical Recipes の「読みづらさ」のみならず「見苦しさ」まで
そのまま移植しちゃってるもんだから
読んでてすごく気分がわるくなってくる.
ホントにそういう傾向があるのかどうかわからないんだけど
……
学術プログラマー集団の中にあって
数値計算専門屋の書くコードはかなりキタないような気がする.
計算できればそれでヨシというぽりしー?
はたまた FORTRAN の呪縛か.
- それはともかく,
もっと見やすく整形しないとおかしなバグが混入しそうだ.
整形ツールとしては
GNU
indent
ってのがあるけど,
これは C 用だしなぁ
……
ということで,
Perl 用の整形ツールはないかと
またまた CPAN をあさってみる
- あった.
Perl::Tidy
というもので,
(モジュールというより
独立したアプリケイションソフトウェア
perltidy
として利用されるためか)
sourceforge.net に登録されていた.
もちろん CPAN からもダウンロードできる.
- このツールをインストールしてみて,
さっそく試行錯誤してみる.
私の好みに近い指定は
perltidy -t -et=8 -i=8 -pt=2 -bt=2 -sbt=2
だとわかった
……
おお,
ぐっと見やすくなる.
- このコードにいろいろと手をいれながら,
内容をチェックしていく.
- かなり私ふうに直したところで撤退.
2130 研究室発.
雪はふってないけどすごく寒い.
北 12 生協で買いものして
2150 帰宅.
体重 73.6kg.
運動不足にたたられている.
- 晩飯.
ぎょーむ日誌書いてみると,
今日も一日ばたばたしていたとわかる.
ばたばたしていただけか.
- [今日の食卓]
- 朝 (0920):
米麦 0.6 合.
ハクサイ・タマネギ・シイタケの炒めもの.
- 昼 (1420):
研究室お茶部屋.
米麦 0.8 合.
弁当の菜ではなく,
なぜか一昨日からお茶部屋にある
マグロ味噌汁の残りを全部食ってしまった.
- 晩 (2220):
スパゲッティー.
ハクサイ・タマネギ・シイタケのスープ.