I OpenMDAO mit den ersten Paraboloid Tutorial lerne. Aber wo ich den Code mit dem eingeschränkten Fall (add_constraint (...)) laufen bekomme ich die Fehler: Attribute: ‚schweben‘ Objekt hat kein Attribut ‚Größe‘. ich nur den Code aus dem Tutorial kopiert kleisterte aber ich den Fehler nicht fein kann. Hier ist der Code:Openmdao - Attribute: 'schweben' Objekt hat kein Attribut 'Größe' in Paraboloid Tutorial
from __future__ import print_function
from openmdao.api import IndepVarComp, Component, Problem, Group
from openmdao.api import ScipyOptimizer
from openmdao.api import ExecComp
class Paraboloid(Component):
def __init__(self):
super(Paraboloid, self).__init__()
self.add_param('x', val=0.0)
self.add_param('y', val=0.0)
self.add_output('f_xy', shape=1)
def solve_nonlinear(self, params, unknowns, resids):
"""f(x,y) = (x-3)^2 + xy + (y+4)^2 - 3
"""
x = params['x']
y = params['y']
unknowns['f_xy'] = (x-3.0)**2 + x*y + (y+4.0)**2 - 3.0
def linearize(self, params, unknowns, resids):
""" Jacobian for our paraboloid."""
x = params['x']
y = params['y']
J = {}
J['f_xy', 'x'] = 2.0*x - 6.0 + y
J['f_xy', 'y'] = 2.0*y + 8.0 + x
return J
if __name__ == "__main__":
top = Problem()
root = top.root = Group()
root.add('p1', IndepVarComp('x', 3.0))
root.add('p2', IndepVarComp('y', -4.0))
root.add('p', Paraboloid())
# Constraint Equation
root.add('con', ExecComp('c = x-y'))
root.connect('p1.x', 'p.x')
root.connect('p2.y', 'p.y')
root.connect('p.x', 'con.x')
root.connect('p.y', 'con.y')
top.driver = ScipyOptimizer()
top.driver.options['optimizer'] = 'SLSQP'
top.driver.add_desvar('p1.x', lower=-50, upper=50)
top.driver.add_desvar('p2.y', lower=-50, upper=50)
top.driver.add_objective('p.f_xy')
top.driver.add_constraint('con.c', lower=15.0)
top.setup()
top.run()
print('\n')
print('Minimum of %f found at (%f, %f)' % (top['p.f_xy'], top['p.x'], top['p.y']))
ich das Skript ausführen und ich folgendes:
##############################################
Setup: Checking root problem for potential issues...
No recorders have been specified, so no data will be saved.
Setup: Check of root problem complete.
##############################################
Traceback (most recent call last):
File "paraboloid.py", line 65, in <module>
top.run()
File "/home/sim/.local/lib/python2.7/site-packages/openmdao/core/problem.py", line 1151, in run
self.driver.run(self)
File "/home/sim/.local/lib/python2.7/site-packages/openmdao/drivers/scipy_optimizer.py", line 211, in run
options=self.opt_settings)
File "/home/sim/.local/lib/python2.7/site-packages/scipy/optimize/_minimize.py", line 458, in minimize
constraints, callback=callback, **options)
File "/home/sim/.local/lib/python2.7/site-packages/scipy/optimize/slsqp.py", line 390, in _minimize_slsqp
g = append(fprime(x),0.0)
File "/home/sim/.local/lib/python2.7/site-packages/scipy/optimize/optimize.py", line 292, in function_wrapper
return function(*(wrapper_args + args))
File "/home/sim/.local/lib/python2.7/site-packages/openmdao/drivers/scipy_optimizer.py", line 334, in _gradfunc
return_format='array')
File "/home/sim/.local/lib/python2.7/site-packages/openmdao/core/driver.py", line 834, in calc_gradient
sparsity=sparsity, inactives=inactives)
File "/home/sim/.local/lib/python2.7/site-packages/openmdao/core/problem.py", line 1310, in calc_gradient
inactives=inactives)
File "/home/sim/.local/lib/python2.7/site-packages/openmdao/core/problem.py", line 1561, in _calc_gradient_ln_solver
root._sys_linearize(root.params, unknowns, root.resids)
File "/home/sim/.local/lib/python2.7/site-packages/openmdao/core/system.py", line 947, in _sys_linearize
self._jacobian_cache = linearize(params, unknowns, resids)
File "/home/sim/.local/lib/python2.7/site-packages/openmdao/core/group.py", line 836, in linearize
sub._sys_linearize(sub.params, sub.unknowns, sub.resids)
File "/home/sim/.local/lib/python2.7/site-packages/openmdao/core/system.py", line 947, in _sys_linearize
self._jacobian_cache = linearize(params, unknowns, resids)
File "/home/sim/.local/lib/python2.7/site-packages/openmdao/components/exec_comp.py", line 273, in linearize
J[(u, param)] = numpy.zeros((jval.size, psize))
AttributeError: 'float' object has no attribute 'size'
Die Fehlermeldung erscheint nur, wenn ich die Beschränkungsgleichung setzen. Ich glaube, es ist ein dummer Fehler, aber kann mir jemand die richtige Richtung zeigen? Vielen Dank im Voraus für Ihre Hilfe!
Hallo, danke für deine Antwort. Ich habe die numpy Version überprüft und es ist 1.13.0. Aber, ja, wahrscheinlich habe ich ein Modul im Hintergrund, das nicht richtig funktioniert. OpenMDAO verwendet andere Module? – Sim81
Sie haben Recht, sieht aus wie eine aktuelle Numpy Upgrade uns gebrochen hat. In der Zwischenzeit schlage ich vor, es zurück auf 1.12.0 zu rollen, bis wir die Chance haben, eine Lösung zu finden. –