Я пытаюсь передать кусочную функцию через scipy optimizer. Пример я построил ниже показывает проблему:Оптимизация кусочной функции в Scipy/python
args = (6,6,7,1,2,4,6,6)
def _alpha(params, *args):
knot = params[0]
rate = np.asarray(args)
where_knot = np.where(rate>knot, 1, 0)
return np.sum(where_knot)
seed_vals = (5,)
bounds = ((1,7),)
res1 = optimize.minimize(_alpha, seed_vals, args=args, method='L-BFGS-B', bounds=bounds)
res1.x
>>> array([ 5.])
Однако это, очевидно, не является решением:
print _alpha((5,), args)
>>> 5
print _alpha((7,), args)
>>> 0
Есть ли способ сделать это, что работает?
EDIT: Я также попробовал кусочную функцию numpy и получил те же результаты.
'optimize.minimize' является локальным оптимизатором, не глобальный оптимизатор. Если вы начнете процесс оптимизации на плато, это никуда не денется. – user2357112