scipy.optimize:制約条件の付け方

import numpy as np
import scipy.optimize
def func(x):
    return np.sum((x-2.5)**2)+1

inequality constraintは、returnが正であるような形で関数を書いて指定する。

def con1(x):
    return 2-x[0]
cons1 = ({'type':'ineq','fun':con1})

boundaryはnp.arrayで指定できる。

b1=np.array([[0,10],[0,3.],[0,1.]])
a=scipy.optimize.minimize(func,x0=np.array([7,10,3.]),method='SLSQP',constraints=cons1,bounds=b1)
print(a.x)

[ 2.          2.49999999  1.        ]