Arhn - архитектура программирования

scipy poolhopping с обратным вызовом: остановить алгоритм при выполнении условия

моя цель состоит в том, чтобы при использовании алгоритма basinhopping для нахождения глобального минимума останавливать алгоритм всякий раз, когда выполняется условие после нахождения минимума. просмотрев документы здесь (https://docs.scipy.org/doc/scipy-0.14.0/reference/generated/scipy.optimize.basinhopping.html), со специальной ссылкой на этот раздел, я пришел к выводу, что мне нужно было правильное callback :

обратный вызов : callable, callback(x, f, accept), необязательный Функция обратного вызова, которая будет вызываться для всех найденных минимумов. x и f — это координаты и значение функции пробных минимумов, а accept означает, были ли приняты эти минимумы. Это можно использовать, например, для сохранения наименьших найденных минимумов N. Кроме того, обратный вызов можно использовать для указания определяемого пользователем критерия остановки, при необходимости возвращая значение True, чтобы остановить процедуру перехода из бассейна.

поэтому я подумал, что, сделав что-то вроде этого:

def callback_on_optimization_indicator(x, f, accepted, threshold=2):

    if f > threshold:
        print(x, f, accepted, threshold)
        return f
    else:
        return False

и callback=callback_on_optimization_indicator должно работать. и эффективно останавливает алгоритм basinhopping, когда выполняется часть "true". проблема в том, что хотя переменные внутри callback_on_optimization_indicator являются правильными, когда оптимизация завершается и я изучаю объект оптимизации, я получаю разные значения (и x0, и f). Я понятия не имею, почему.

Значение с данными:

(callback) x0  = [some data]
(callback) f = 2.60688517662

тогда как в объекте оптимизации:

opt_obj.x = [different data]
opt_obj.fun = 1.6630711010135293

я неправильно использую функцию обратного вызова?

Я бы так сказал но мне еще предстоит понять как сделать так чтобы я получал в объекте оптимизации первый x0 который удовлетворяет условию в callback (после того как минимум найден)


  • переменные, которые вы получаете, - это те, которые передаются при выполнении обратного вызова... теперь, чтобы обойти эту проблему, иногда вы можете использовать что-то вроде закрытия 10.01.2018
  • закрытие? извините, я не знаком с термином 10.01.2018
  • это моя очень простая версия объяснения: когда вы определяете функцию в рамках другой функции, объявления переменных во внешней функции доступны («закрыты») для внутренней функции. В Google много информации, большая часть сбивает с толку 10.01.2018
  • @Asher11: Использование пример кода в документы, я не могу воспроизвести проблему. Можете ли вы привести работающий пример? 10.01.2018
  • извините, я понятия не имею, почему, но с помощью def callback_on_optimization_indicator(x, f, accepted, threshold=2): if f › threshold: print(x, f, accepted, threshold) return True else: return False Я решил. Я не знаю, почему, потому что это первое, что я попробовал (и в то время я был безуспешным), и теперь это работает. 10.01.2018

Ответы:


1

Обратный вызов показывает значение x0 перед остановкой.

opt_obj записывает минимум до этой точки (ниже порога 2).

26.05.2018
Новые материалы

Коллекции публикаций по глубокому обучению
Последние пару месяцев я создавал коллекции последних академических публикаций по различным подполям глубокого обучения в моем блоге https://amundtveit.com - эта публикация дает обзор 25..

Представляем: Pepita
Фреймворк JavaScript с открытым исходным кодом Я знаю, что недостатка в фреймворках JavaScript нет. Но я просто не мог остановиться. Я хотел написать что-то сам, со своими собственными..

Советы по коду Laravel #2
1-) Найти // You can specify the columns you need // in when you use the find method on a model User::find(‘id’, [‘email’,’name’]); // You can increment or decrement // a field in..

Работа с временными рядами спутниковых изображений, часть 3 (аналитика данных)
Анализ временных рядов спутниковых изображений для данных наблюдений за большой Землей (arXiv) Автор: Рольф Симоэс , Жильберто Камара , Жильберто Кейрос , Фелипе Соуза , Педро Р. Андраде ,..

3 способа решить квадратное уравнение (3-й мой любимый) -
1. Методом факторизации — 2. Используя квадратичную формулу — 3. Заполнив квадрат — Давайте поймем это, решив это простое уравнение: Мы пытаемся сделать LHS,..

Создание VR-миров с A-Frame
Виртуальная реальность (и дополненная реальность) стали главными модными терминами в образовательных технологиях. С недорогими VR-гарнитурами, такими как Google Cardboard , и использованием..

Демистификация рекурсии
КОДЕКС Демистификация рекурсии Упрощенная концепция ошеломляющей О чем весь этот шум? Рекурсия, кажется, единственная тема, от которой у каждого начинающего студента-информатика..