2016-04-04 4 views
3

Я пытаюсь передать кусочную функцию через 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 и получил те же результаты.

+2

'optimize.minimize' является локальным оптимизатором, не глобальный оптимизатор. Если вы начнете процесс оптимизации на плато, это никуда не денется. – user2357112

ответ