多変数関数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)