2019年10月25日金曜日

TeXのソースは、コマメに改行すべきである

TeX のソースで、一段落ごとに改行していたりすることがあるわけだが、やはりもっと少ない文字数で改行をすべきであると個人的には思ったりしている。

もちろん、最近の TeX のエディタは右端で折り返してくれるので、TeX のソースを読んだり書いたりするときには改行はたいして重要ではない。
ただ、コマメに改行すると以下のようなメリットがある。

1. TeXのコンパイラは「何行目にエラーがあるか」を教えてくれるので、各行の文字数が短いほどどこにエラーがあるのかを人間が確認しやすい。TeXの統合環境ならエラーのある行の番号にジャンプする機能もあるので、数行に分かれているほど作業しやすい。
2. git も行ごとに認識しているので、1行が300文字もあると1文字修正しただけで300文字の修正として登録しないとならない。

もちろんひたすら改行すればいいってものではないけど、できれば80文字ぐらいでTeXの場合は改行してほしい。


2019年10月18日金曜日

LaTeXとヴィルトの法則

ここ最近になって「LaTeX のコンパイルがどんどんと遅くなっている」と思っていて「個人の感想です」かと思っていたら、他の人も似たようなことを思っていたそうで「少なくとも2人の感想です」ということが分かった。

世の中には「ヴィルトの法則」というものがあるそうで、「ハードウェアがスピード向上はソフトウェアのスピード低下に打ち勝てない」ということで、「あぁ、まさに LaTeX のことだなぁ」と思ったりする。
2000年ごろの論文を見ると LaTeX が既に使われていて(いつから使われているのかはよく分からないけど)、20年ぐらい経って数式とか論文を書くとかいうのには、どんどんと遅くなりつつあるかと思う。

個人的に「ヴィルトの法則」だと思うもう一つはエディタの Atom で、使っている人が減っているのは、やっぱり動作の遅さが原因なんだろうなぁ、と思う。前に使っていた時は、起動するためのアイコンクリックから文字を書き始めるまでに20秒ぐらいかかって、「これはしんどいなぁ」と思ったこともある。

逆にWindowsは Windows 7 よりも Windows 10 のほうが動きが速いように感じるので「ヴィルトの法則」からは外れているのかもしれない。ただ、半年ごとのアップデートでは少しずつ遅くなっているようにも感じる。


2019年10月10日木曜日

Juliaの型宣言は、かなり厳密

数値実験をやっていて気がついたけど、Juliaの型宣言はかなり厳密に行われているようだ。

たとえば、xを変数ベクトルとして定義したときに
x[1], 1.0*x[1], x[1]+0.0
などは数学では等価として計算してほしいけど、Juliaでは異なるものとして処理されるようで、最適化ソルバーに入れて結果を見ると違う結果が出てくることがある。

JuMPなど複数のパッケージを使っているので、どのパッケージで異なる処理が入るのかを特定できていないけど、このあたりは気をつけたいところだ。

(理由として推測できるのは、C言語の int 型だと 3/2 が 1 になって、double 型だと 3.0/2.0 が 1.5 になる、みたいなこと、かと思っている。)

2019年10月2日水曜日

論文読み:On Polyhedral and Second-Order-Cone Decompositions of Semidefinite Optimization Problems

Optimization Online に出てきていた
"On Polyhedral and Second-Order-Cone Decompositions of Semidefinite Optimization Problems"
http://www.optimization-online.org/DB_HTML/2019/09/7392.html
をザックリと読んでみた。

基本的には、半正定値条件をLPだったりSOCPだったりで近似する、という話だった。
近似して解いた後に、半正定値条件を満たしていなければ、切除平面を入れて解きなおしている。

数値実験は Sparse PCA と nuclear norm 最小化を扱っていて、やはり、問題が大きなものには近似でやったほうが大きなサイズが解けるようだ。
SOCPで半正定値条件を近似すると、切除平面法の収束は普通には結構な反復回数が必要なので、Sparse PCA や nuclear norm 最小化は問題の構造が比較的簡単なのかもしれない。