2011-05-07

Contour Map - 5 月連休の成果

4 月 30 日から始まった(私の)今年の 5 月の連休も、残りあと 2 日となりました。そろそろ、通常の生活リズムに戻さないといけません。今回の連休では、Fedora 15(ベータ版)のクリーンインストールの他に、もうひとつ取り組みたいことがありました。それは、Contour Map(等高線図)を描くプログラムを作ることでした。

等高線図と言うと、地図の等高線図を想像するかもしれませんが、今回、興味があったのは、汎用の等高線図描画プログラムを作ることではなく、既知の複数の関数、特に高々 2 次の多項式 z = f(x, y) を、等高線図にして重ね合わして表示できるプログラムを作ることでした。具体的には、例えば参考文献 [1] や [2] に示されているような RSM (Response Surface Methodology, 応答曲面法) を利用した統計解析をするための、基本プログラムを作ることです。ポピュラーなデータ分析ツールの一つである JMP[3] でも、応答曲面を扱う機能があります。会社では JMP も使っていますが、個人で買うには高価ですし Linux は適用外です。それに、個人的には JMP のこの機能には満足していません。

昔、RSM を利用した実験および解析をするのに、BBN RS/Discover, RS/Explorer というソフトウェアを VAXstationSun OS のワークステーション上で使っていました。いつの頃の話だと言うぐらい古い話です。実験して最適解を探し出したいエンジニアにとって、痒いところに手が届く、大変よくできた素晴らしいソフトウェアだったのですが、残念なことに今は販売されていないようです[4]。そもそも、べらぼうに高価なソフトウェアでした。RPL (RS Programming Language) という言語が利用でき、半導体製造ラインのデータを収集して、統計処理をすることに威力を発揮しましたが、そんなことは、今時のソフトウェアであれば選択肢がいくらでもあります。しかし、応答曲面法の解析の部分については、使いやすさを含めて、期待を上回るソフトウェアに出会っていません。

このように興味のある機能が限定的であるので、いっそ、自分で作ってしまおうと考え、ずーっと取り組んでいます。いまだに Tcl/Tk と付き合っているのも、根底には Contour Map をはじめとしたグラフを GUI 化しやすいプログラミング言語を常に使えるようにしておきたい、という思いがあるからです。実際、Contour Map を描画するプログラムは、Tcl/Tk と C 言語を組み合わせて、何年も前から何度も作ってきました。しかし、何度作っても納得できるプログラムにならず、発展させることができませんでした。とにかく、コーディングが美しくないのです。お客様に期限までに納品しなければならないような場合、それでもなんとか使い物になるレベルまで仕上げなければなりませんが、幸い、そういう縛りはありません。本件は、自分が納得できるプログラムに仕上げることがとても重要なのです。

今回はプログラミング言語を Java に変えてみました。プログラミング言語を変えても、基本的なアルゴリズムが変わるわけではありませんので、同じといえばそうなのですが、やはりクラスに機能をまとめると、幾分すっきりしたプログラム構成になります。Java での計算速度を心配していましたが杞憂でした。全然ストレスを感じません。実行例を下記に示しました。


この連休中のマイルストーンは、複数の任意の 2 次多項式

z = f(x, y) = c0 + c1x2 + c2x + c3xy + c4y + c5y2 (ただし c1 ≠ 0, c5 ≠ 0)

を Contour Map で表現することでしたので、所期の目的は達成できたことになります。

しかし残念ながら、以前 Tcl/Tk と C 言語で作ったときと同様に、IF 文だらけで重複した処理がごちゃごちゃたくさんある、という作りは変わっていません。今後時間をかけて整理していきます。今年のお盆の連休に、なにか公開できるようなレベルになっているといいな。(気の長い話です。)

余談ですが、Fedora 15 の新しい Gnome 3 デスクトップの操作にも慣れてきました。画面を切り替えるのに Alt + Tab の使用頻度が激増です。

参考文献

[1] Application of Response Surface Methodology to Evaluation of Bioconversion Experimental Conditions
[2] (株)日科技研:応答曲面法(RSM) 一特性の最適化とは(実験計画法) | 機能・手法一覧
[3] JMP -- 探索的統計解析ソフトウェア | データ分析 - 統計 - Six Sigma - 実験計画法(DOE)
[4] ジーリンクシステムコンサルティング株式会社