Могу ли я использовать промежуточную переменную, из которой значение функции, якобиан и (прогнозируемый) гессиан непосреPython

Программы на Python
Ответить Пред. темаСлед. тема
Anonymous
 Могу ли я использовать промежуточную переменную, из которой значение функции, якобиан и (прогнозируемый) гессиан непосре

Сообщение Anonymous »

У меня вопрос, когда я могу использовать промежуточную переменную, из которой значение функции, якобиан и (прогнозируемый) гессиан непосредственно выводятся во время оптимизации.
Например, у меня есть функция f зависит от q, который, в свою очередь, зависит от x.
Хорошим свойством f является то, что его якобиан g и прогнозируемый гессиан hv все зависят от q напрямую.
Поэтому я могу вычислить q из x один раз и получить все f, g и hv, тем временем.
В python/scipy я могу установить q как глобальную переменную. На каждой итерации оптимизации при оценке f с помощью myfunc q автоматически обновляется на основе текущего x; при оценке g и hv вместо работы с x функции myjac и myhessp считывают глобальный q и возвращают значение соответствующие производные.
Что-то вроде

Код: Выделить всё

q=0

def myfunc(x):
global q
q=foo(x)
return bar0(q)

def myjac(x):
# do nothing with x
return bar1(q)

def myhessp(x):
# do nothing with x
return bar2(q)
scipy.optimize.minimize(myfunc,initial_guess_x0,method="blablabla",jac=myjac,hessp=myhessp)

Если на каждой итерации myfunc, myjac и myhessp оцениваются только один раз соответственно только с одним $x$, стратегия обязательно сработает .
Однако некоторые оптимизаторы оценивают эти значения с помощью более одного x за одну итерацию.
Когда оптимизаторы пытаются оценить g и hv с помощью x_prime< /code> кроме текущего x, который используется для оценки f, x_prime на самом деле не имеет значения, и вместо этого q получен из x читается по ошибке.
Конечно, множественное вычисление f допустимо, поскольку в myfunc f получается после того, как q получается из x.
Одним из примеров является использование числового гессиана с конечной разностью.
Чтобы оценить числовой гессиан, оптимизатору потребуется вызвать myjac со многими различными xs.
Поскольку myjac читает только неизмененный q вместо x, все якобианы будут абсолютно одинаковыми.
Я пробовал позволить myjac и myhessp вычислять g и hv по x вместо q, но в моем случае вычисление q занимает очень много времени.
Напротив, получение g и hv из q происходит довольно быстро.
Поэтому я хочу придерживаться стратегии, и мне интересно, работает ли с ней какой-нибудь оптимизатор.
Лучше, чтобы оптимизатор был второго порядка, чтобы сходимость была легкой.
Он также должен быть основан на алгоритм со сдвигом уровня и радиусом доверия, потому что у меня под рукой есть хороший предобуславливатель.
Заранее большое спасибо!

Подробнее здесь: https://stackoverflow.com/questions/786 ... n-and-proj
Реклама
Ответить Пред. темаСлед. тема

Быстрый ответ

Изменение регистра текста: 
Смайлики
:) :( :oops: :roll: :wink: :muza: :clever: :sorry: :angel: :read: *x)
Ещё смайлики…
   
К этому ответу прикреплено по крайней мере одно вложение.

Если вы не хотите добавлять вложения, оставьте поля пустыми.

Максимально разрешённый размер вложения: 15 МБ.

  • Похожие темы
    Ответы
    Просмотры
    Последнее сообщение

Вернуться в «Python»