Проверка частных производных с помощью pass_by_obj

У меня есть компонент с входом типа int, поэтому я устанавливаю pass_by_obj = True. Однако, когда я проверяю производные с помощью check_partial_derivatives(), возникает эта ошибка:

data = prob.check_partial_derivatives(out_stream=sys.stdout)
  File "/usr/local/lib/python2.7/site-packages/openmdao/core/problem.py", line 1711, in check_partial_derivatives
    jac_rev[(u_name, p_name)][idx, :] = dinputs._dat[p_name].val
TypeError: float() argument must be a string or a number

Похоже, он пытается взять производную, хотя и не может. Вот простой пример:

import sys
from openmdao.api import IndepVarComp, Problem, Group, Component

class Comp(Component):
    def __init__(self):
        super(Comp, self).__init__()
        self.add_param('x', val=0.0)
        self.add_param('y', val=3, pass_by_obj=True)
        self.add_output('z', val=0.0)

    def solve_nonlinear(self, params, unknowns, resids):
        unknowns['z'] = params['y']*params['x']

    def linearize(self, params, unknowns, resids):
        J = {}
        J['z', 'x'] = params['y']
        return J

prob = Problem()
prob.root = Group()
prob.root.add('comp', Comp(), promotes=['*'])
prob.root.add('p1', IndepVarComp('x', 0.0), promotes=['x'])
prob.root.add('p2', IndepVarComp('y', 3, pass_by_obj=True), promotes=['y'])

prob.setup(check=False)
prob['x'] = 2.0
prob['y'] = 3

prob.run()
print prob['z']

data = prob.check_partial_derivatives(out_stream=sys.stdout)

Можно использовать метод check_partial_derivatives() с компонентами, входные данные которых указаны как pass_by_obj? Меня не интересуют производные для входных данных, указанных как pass_by_obj, но меня интересуют другие входные данные.


person Ry10    schedule 21.12.2015    source источник
comment
это почти наверняка ошибка в коде. Мы починим его как можно быстрее и сообщим вам, когда он больше не будет сломан.   -  person Justin Gray    schedule 22.12.2015


Ответы (1)


Спасибо за отчет и тест. Это была ошибка, из-за которой мы не исключали переменные дизайна, которые были объявлены как pass_by_obj. У меня есть запрос на включение в репозиторий OpenMDAO с исправлением. Вероятно, он будет объединен с мастером в течение дня.

РЕДАКТИРОВАТЬ - Исправление объединено. https://github.com/OpenMDAO/OpenMDAO/commit/b123b284e46aac7e15fa9bce3751f9ad9bb63b95

person Kenneth Moore    schedule 22.12.2015