что если шаги FD меняются в зависимости от вывода / ввода - PullRequest
0 голосов
/ 26 июня 2018

Я использую схему конечных разностей, чтобы найти градиенты. Допустим, у меня есть 2 выхода (y1, y2) и 1 вход (x) в одном компоненте. И заранее я знаю, что чувствительность y1 по отношению к x не такая же, как чувствительность y2 к x. И, таким образом, я мог бы иметь два разных шага для тех, кто в;

self.declare_partials(of=y1, wrt=x, method='fd',step=0.01, form='central')
self.declare_partials(of=y2, wrt=x, method='fd',step=0.05, form='central')

Ничто не останавливает меня (алгоритмически), но неясно, что именно сделает расчет градиента openmdao в этом случае?

обменивается ли он информацией из случая, когда шаги отличаются, рассматривая соотношения шагов или просто обрабатывая их независимо и, следовательно, удваивая вычислительное время?

Ответы [ 2 ]

0 голосов
/ 27 июня 2018

Это справедливый вопрос о влиянии API. В типичных приложениях FD вы получите только 1 вызов функции на переменную конструкции для прямой и обратной разницы и 2 вызова функции для центральной разницы.

Однако в этом случае вы запросили два разных размера шага для двух разных выходов, оба с центральной разницей. Итак, здесь вы получите 4 вызова функций для вычисления всех производных. dy1_dx будет вычислено с использованием размера шага 0,01, а dy2_dx будет вычислено с размером шага 0,05.

Между двумя разными вызовами FD нет перекрестных помех, и в итоге вы получите больше вызовов функций, чем было бы, если бы вы просто указали размер одного шага с помощью:

self.declare_partials(of='*', wrt=x, method='fd',step=0.05, form='central')

Если стоимость - это то, что вы можете нести, и вы получаете повышенную точность, то вы можете использовать этот метод, чтобы получить разные размеры шагов для разных выходов.

0 голосов
/ 26 июня 2018

Я только что проверил это, и он делает конечную разницу дважды с двумя разными размерами шагов и сохраняет только запрошенные выходные данные для каждого шага. Я не думаю, что мы могли бы что-то сделать с соотношениями, как вы предложили, поскольку причина использования разных размеров шагов для разрешения отдельных выходов заключается в том, что вы не доверяете точности выходов при меньшем (или большом) размере шага.

...