2012年1月16日月曜日

ファイルを書き,ファイルを読む

久しぶりにPythonでプログラムを書いた.Pythonというのは比較的新しいがポピュラーなプログラミング言語で,スクリプトをチョチョッと書いてすぐ実行できるのと,機能拡張パッケージが充実しているので,重宝している.

今回はPyevolveという遺伝的アルゴリズムを実装したソフトを使って,最適化計算.

最適化というと聞こえがいいが,やっていることは結局「いろいろ,たくさんやってみて,よさそうなものを探す」ことに過ぎない.このうち「いろいろ,たくさん」の部分を本当にいろいろたくさんやってしまうと時間がかかるので,多少頭を使ってよさそうなものを見つけようとする方法がいくつかあり,今回使った遺伝的アルゴリズムもそのひとつ.

で,問題は「やってみて」の部分.今回の場合は,パラメタを変えながら数値計算のプログラムを回してみて,計算結果がなるべく小さくなるものを探す.

この計算プログラムはCで書かれていて,2003年に開発したのだからもう8年以上使っているもの.パラメタファイルを読んで,計算結果を標準出力に書き出す,というごく平凡な構成だ.
だから,パラメタを変えてプログラムを回し,計算結果を調べるためには,パラメタをファイルに書き出し,計算プログラムを起動してその標準出力を読む,というプログラムを書くことになる.

まあ大雑把に言うと,ファイルを書いて,ファイルを読むプログラムということだ.(正確じゃないけど.パイプもファイルのうちだということで.)ごく基本的なプログラムを書いたに過ぎない.

でも結局は,このような基本的なプログラムをきちっと書ける,ということが大事なのだろう.
去年,これを学生さんにやらせようとしたが,概念を理解してもらうだけでもとても苦労したし,結局最後まではできなかった.ところが自分でプログラムを書いてみると,問題は違うものの,機能面ではほぼ同じことが1日でできてしまった.
ごく簡単な機能を組み合わせれば,できる,ということなのだが,それをうまく伝えられなかったのだろうか.いやそれ以前に,「ごく簡単な機能を組み合わせる」ことが,学生さんには難しいのか.

Pyevolveの方は,付属の例題1(pyevolve_ex1_simple.py)をちょっと改造しただけで,実装することができた.自分で書いたプログラムは30行ぐらい.まぁつまりその程度の問題だということです.
たったその程度のことだけど,これで「遺伝的アルゴリズムを利用してパラメタを最適化した」と堂々と主張できるわけだ.

やり方はだいたい分かった.これからいろいろ使えそう.

0 件のコメント:

コメントを投稿