まぃふぇいばりっと

機械学習やってます.Julia大好きです.勉強したことの殴り書きです.

Python 確率単体上で凸関数を最小化(SciPy)

多変数関数f(x)を確率単体上のxで最適化したい.(最近,情報幾何をやっているので,こういうタスクばかりやってる気がする) つまり,xは 0 < x[i] < 1 かつ sum(x) = 1 の範囲でf(x)の最小化をしたい. ちまちま自分でソルバー書いてたけど,scipy使う方がよさそう. ドキュメント見た感じ,これでいける.

from scipy import optimize

def f(x):
    return (x[0]-1)**2 + (x[1]-1)**2 + (x[2]-1)**2

cons = [ 
        {'type':'eq', 'fun': lambda x: 1-sum(x)},
        {'type':'ineq', 'fun': lambda x: -x+1},
        {'type':'ineq', 'fun': lambda x: x}
       ]

optimize.minimize(f, np.array([-3,-3,-3]), constraints=cons)