LoginSignup
2
1

More than 3 years have passed since last update.

Scipy optimizeで離散値を変数として使う方法

Posted at

解決したいこと(モチベーション)

scipy optimizeを使って最適化したいものの、ものの個数など整数しか取らない変数を入力とするやり方がわからなかったので、その備忘録に

解決策

scipy 公式の中に答えを見つけました。
https://docs.scipy.org/doc/scipy-0.14.0/reference/generated/scipy.optimize.brute.html
scipy.optimize.brute (Minimize a function over a given range by brute force.)
Brute forceは無理やりにということであり、総当たり的に力づくで最適値を探すということですね

scipy.optimize.brute(func, ranges, args=(), Ns=20, full_output=0, finish=, disp=False)
という定義なのですが、このfinishは総当たり後にさらにその周辺を最適化するものなので、こちらをNoneにすると、rangesに定義されたグリッドのみを計算して最小の位置とその時の値を返して終わります
なので、これを用いてrangesで(slice(0,15,1),slice(0,10,1))の様に整数しか取らない様にslice()を定義すれば、整数のみで最小値を探します。

所感

正直総当たりであれば、np.meshgrid使って、あとはfor文を使ってえばいいじゃないという突っ込みはもちろん理解していますが、APIとして提供されていれば、不要な間違いなどが避けられていいかなと思うので、便利に使いたいと思います

2
1
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
2
1