社内の勉強会で数理最適化の話を聞いた。
そこで数理最適化と機械学習は何が違うの?って話があった。
- 機械学習は、過去のデータを使って問題を解く。
- 数理最適化は、モデルを使って問題を解く。
みたいな話を聞いた。
この話を聞いて、
『あー、機械学習って、確率と統計だし、確かに新しい問題とか未知の問題は解けないよなあ。』とか思った。
あと『数理最適化だと、解きたい問題があって、それに対する理論を作るから、データがなくてもできるなあ』とかも思った。数理最適化は、理論で問題を解くようなイメージで理解した。
改めて聞いたことを振り返りながら書いていく。
まず、数理最適化には、3つの重要な要素があるらしい。で、その3つの重要な要素は、
- 変数
- 目的関数
- 制約条件
らしい。
名称が数学っぽくて、理解のオーバーヘッドになってるので、個人的な理解で言い換えると、
- 変数は、変えられること。
- 目的関数は、価値観のバランス。
- 制約条件は、変えられることの中で倫理的にやって良い範囲。できる範囲。
みたいなイメージ。
- 変数を洗い出す時は、何を変化させられるのか、を考える。
- 目的関数を考える時は、変えられることの変えやすさを、考える。
- 制約条件を考える時は、変化させられるのかことで、まあやったとしてもここまでかなー、と言うのを考える。
と言うのが今のところの個人的な理解。
この変数と目的関数と制約条件を元に問題がといていく。
この変数、目的関数、制約条件を元に問題を解いてくれるソフトウェアをソルバーと言うらしい。
class Solver: def __init__(self, 変数, 目的関数, 制約条件): pass def solve(self): pass
僕のイメージはこう言うイメージ。
それから数理最適化には、典型問題と言うのがあるらしい。
よくわかってないけど、典型的な問題だと思う。『これは、〇〇問題だね!』的な使い方をすると理解した。
多分、デザインパターンとかアーキテクチャパターンとか、みたいな何かなのかなと思って話を聞いていた。
典型問題には、比較的簡単な計算コストが低い問題もあれば、計算コストが高い問題があるらしい。
O(NN)の問題を解くのは無理です。みたいな話。
はい。
典型問題はたくさんあるらしいけど、すぐに理解するのは難しそうだなあという印象を受けた。
あとは、Qiitaに参考になる記事がたくさんあるよ、という話も聞いた。
個人的な感想としては、面白いし、もっと勉強したいなと思った。
機械学習は、データを使うことを前提としていて、ボトムアップなアプローチだけど、数理最適化は、知恵を使うことを前提にしていて、トップダウンなアプローチ。みたいな印象を受けた。
どっちがいいとかじゃなくて、バランスよく使えるようになりたいなあ、という気持ち