Мне было интересно, как лучше всего экспортировать локальные переменные в целевую функцию для оптимизации или линейных решателей. Например, у меня есть такая функция, как:
function example(x)
b = sum(x)
return b * x' * x
затем я отправляю эту функцию в минимизатор. Предположим, он сходится. Я хочу получить значение b на последней итерации. Как я могу этого добиться?
У меня есть несколько пробных решений:
globalize b с помощью аффикса const (оберните его контейнером массива). Добавьте аргумент флага, чтобы указать, следует ли выводить b, затем снова запустите функцию с индикатором. Возьмите изменяемый контейнер b в качестве аргумента и измените его как побочный эффект функции. Насколько я понимаю, глобальные переменные имеют проблемы с производительностью, поэтому я должен стараться избегать; второй подход надежен, но он требует дополнительной итерации, что не кажется очень эффективным (хотя в большинстве моих приложений стоимость достаточно низка). Сейчас я использую третий метод, и пока он работает хорошо. Однако, поскольку я новичок в Джулии, я не уверен, есть ли у нее какие-то скрытые проблемы (например, совместимость с другими пакетами, такими как ForwardDiff?).
Спасибо за любой комментарий!
с ForwardDiff могут возникнуть проблемы, поскольку функция вычисляется по двойному числу. Но если вы работаете с конкретными числами, возможно, вы можете использовать множественную отправку для сохранения, когда функция оценивает:
а потом :
Звучит очень умно. Большое спасибо! — person SymbolRanger; 21.12.2019