久々に少々長いプログラムを書いた

論文を投稿したのだが、1ヶ月前に4人のレフェリー全員から好意的な結果が返ってきた。誰もrejectを示唆しなかったのはこれまでの経験でも殆ど無いし嬉しい。
とはいうものの、いずれのコメントでも修正点や質問が沢山あり、答えにくい質問も含まれていた。ちゃんとしたデータを出して認めてもらうことが必要であり、ないがしろにすると蹴られる。

大体の問題はボスの知識と1ヶ月に渡る文献調査とGaussian09を使った簡単な計算で解決されたのだが、質問のうちの1つがどうしても既存の文献だとサポートしきれず、新しくプログラムを書き下ろして解析することとなった。結果的に全部で1000行弱のものになった。

今回あったことと雑感

・今まではずっとPython 2系を使って書いてきたのだが、流石にサポートの問題とかもあるため、前々からPython 3に切り替えたいと思っていた。いい機会なので練習がてら使ってみることにした。print文が関数になっており戸惑ったり、rangeをリストとして利用できないなどの点に困ったが、慣れると案外使いやすい。

・初めて最適化アルゴリズムを採用した。この記事(最適化アルゴリズム - sonoshouのまじめなブログ)に従った。webにこういう記事があるありがたさを感じる。最初は焼きなまし法を採用したのだが、確率的に他の不安定状態にうつる箇所があるとどうしても上手く行かなかったため、ステップ数の増加に従ってパラメータの変位が小さくなる点を残してあとは自己流で適当に作った。Local minimumに落ちるのを回避するため、同じ計算を数度繰り返し、直近数回の誤差が100万分の1とかになった時のみ採用するという条件を課した。39次元の変数の最適化を行ったが、この方法だと案外うまくいった。

・自分の不注意によるミスに多く出くわした。特に三角関数微分で時間の係数を三角関数にかけたとき、ラジアンの変換に使う2πをかけ忘れててとんでもない値が出てた時は間違いに気づくまでに一晩かかった(寝て起きたら気づいた)。

割と楽しかったのでこれからもプログラミングを多用して研究していきたい。