ソフトウェアの開発でコードの改善をしているときに、
実は「実験してみなきゃわからない」部分はそんなに多くはない。
明快な指導原理にしたがって設計できることがある。
あるいは、明快な指導原理を設定しないと、きちんとした設計はできない。
その場しのぎのアルゴリズムを組みあわせたものではなく、明快な指導原理にしたがったアルゴリズムが増えてきていて、コンピュータの性能向上のおかげで、それがいい結果を出すようになってきている。勉強会や論文などで読むアルゴリズムはそうだ。
アルゴリズムの多くは、最小化問題であって、そこに束縛条件がつく。その束縛条件を満たすと0になり、外れるほど値が大きくなる項を最小化する元々の関数に追加する。
そうすると、束縛条件付の最小化問題が解ける。その束縛条件付の最小化問題をどうやって速く解くかという問題になる。
そういったことのために、その場しのぎの改良よりは、明快な指導原理にもとづくアルゴリズムが増えてきているように思う。
解こうとする問題に対して、何に着目してどう定式化するのか、その部分で既に勝負はついていると言ってもいいのではないかと思う。
なんでもかんでも「実験してみなきゃわからない」だったら、勝負をするのは無理だ。
明快な指導原理にしたがってできることを増やしておいて、
「実験は、自分の予想があたっていたかの検証」となることを目指すべきだ。
すべての項目に対して「実験してみなきゃわからない」を乱発すると何もできなくなる。
付記: ラグランジュの未定定数法について
ラグランジュの未定乗数法は、束縛条件付きの最小化問題を解く代数的な手法である。ただ、コンピュータを用いた最小化問題では、何も偏微分方程式を解く必要はない。