matobaの備忘録

和歌山と東京を往復しつつ活動するエンジニアの記録

数理最適化の話を聞きました

社内の勉強会で数理最適化の話を聞いた。

そこで数理最適化と機械学習は何が違うの?って話があった。

  • 機械学習は、過去のデータを使って問題を解く。
  • 数理最適化は、モデルを使って問題を解く。

みたいな話を聞いた。

この話を聞いて、

『あー、機械学習って、確率と統計だし、確かに新しい問題とか未知の問題は解けないよなあ。』とか思った。

あと『数理最適化だと、解きたい問題があって、それに対する理論を作るから、データがなくてもできるなあ』とかも思った。数理最適化は、理論で問題を解くようなイメージで理解した。

改めて聞いたことを振り返りながら書いていく。

まず、数理最適化には、3つの重要な要素があるらしい。で、その3つの重要な要素は、

  • 変数
  • 目的関数
  • 制約条件

らしい。

名称が数学っぽくて、理解のオーバーヘッドになってるので、個人的な理解で言い換えると、

  • 変数は、変えられること。
  • 目的関数は、価値観のバランス。
  • 制約条件は、変えられることの中で倫理的にやって良い範囲。できる範囲。

みたいなイメージ。

  • 変数を洗い出す時は、何を変化させられるのか、を考える。
  • 目的関数を考える時は、変えられることの変えやすさを、考える。
  • 制約条件を考える時は、変化させられるのかことで、まあやったとしてもここまでかなー、と言うのを考える。

と言うのが今のところの個人的な理解。

この変数と目的関数と制約条件を元に問題がといていく。

この変数、目的関数、制約条件を元に問題を解いてくれるソフトウェアをソルバーと言うらしい。

class Solver:
    def __init__(self, 変数, 目的関数, 制約条件):
        pass
    def solve(self):
        pass

僕のイメージはこう言うイメージ。

それから数理最適化には、典型問題と言うのがあるらしい。

よくわかってないけど、典型的な問題だと思う。『これは、〇〇問題だね!』的な使い方をすると理解した。

多分、デザインパターンとかアーキテクチャパターンとか、みたいな何かなのかなと思って話を聞いていた。

典型問題には、比較的簡単な計算コストが低い問題もあれば、計算コストが高い問題があるらしい。

O(NN)の問題を解くのは無理です。みたいな話。

はい。

典型問題はたくさんあるらしいけど、すぐに理解するのは難しそうだなあという印象を受けた。

あとは、Qiitaに参考になる記事がたくさんあるよ、という話も聞いた。

個人的な感想としては、面白いし、もっと勉強したいなと思った。

機械学習は、データを使うことを前提としていて、ボトムアップなアプローチだけど、数理最適化は、知恵を使うことを前提にしていて、トップダウンなアプローチ。みたいな印象を受けた。

どっちがいいとかじゃなくて、バランスよく使えるようになりたいなあ、という気持ち