2014-02-17 2 views
2

Я пытаюсь найти глобальный минимум целевой функции, используя basinhopping, но большую часть времени он застревает на локальном минимуме. Я прочитал документ для basinhopping и нашел, что interval и accept_test могут быть полезны, но теперь вопрос заключается в том, какие значения дают им, например. Я хочу, чтобы моя целевая функция максимально приближалась к 0 (закрытие 1е-5), не затрачивая слишком много времени на очень большие значения, например 4 или 5. Как и для interval, как можно узнать, как часто обновляется этапы?scipy.optimize.basinhopping interval и принять тестовые синтаксисы

Вот как я ищу «глобальный» минимум:

np.random.seed(555) # Seeded to allow replication. 
minimizer_kwargs = {"method": "L-BFGS-B", "bounds": bnds,, tol=1e-4} 
ret = basinhopping(merit_function, abcdex, minimizer_kwargs=minimizer_kwargs, niter=10) 
zoom = ret['x'] 

res = minimize(merit_function, zoom, method = 'L-BFGS-B', bounds=bnds, tol=1e-9) 
print res 

ответ

1

Если вы застряли в локальном минимуме, то, что, вероятно, означает, что вам нужно больше размер шага. Вы можете установить stepize с ключевым словом «stepize».

Соответствующий шаг зависит от проблемы, но, к счастью, basinhopping автоматически настроит шаг. Как часто это зависит от ключевого слова «Интервал». Каждый интервал итераций шаг будет увеличен или уменьшен в 0,9 раза. Если исходное предположение для шага отключено, это может занять некоторое время. Если вы уменьшите интервал до 10 (или так), это будет намного быстрее.

Я не думаю, что accept_test поможет вам здесь. Это можно использовать, например, для принудительного использования запрещенных областей конфигурационного пространства.