Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/python/303.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Python OpenMDAO/ScipyOptimizer“;UnboundLocalError:局部变量';f#u new';作业前参考“;_Python_Openmdao - Fatal编程技术网

Python OpenMDAO/ScipyOptimizer“;UnboundLocalError:局部变量';f#u new';作业前参考“;

Python OpenMDAO/ScipyOptimizer“;UnboundLocalError:局部变量';f#u new';作业前参考“;,python,openmdao,Python,Openmdao,尝试运行OpenMDAO文档中的抛物面示例,但使用ScipyOptimizer,我在标题中得到了错误。不知道我做错了什么。我在下面附上了一个MWE OpenMDAO 1.7.3、Python 3.6.0 #-*-编码:utf-8-*- """ OpenMDAO文档中的抛物面教程: https://openmdao.readthedocs.io/en/latest/usr-guide/tutorials/paraboloid-tutorial.html """ #如果我们使用的是Python2

尝试运行OpenMDAO文档中的抛物面示例,但使用ScipyOptimizer,我在标题中得到了错误。不知道我做错了什么。我在下面附上了一个MWE

OpenMDAO 1.7.3、Python 3.6.0


#-*-编码:utf-8-*-
"""
OpenMDAO文档中的抛物面教程:
https://openmdao.readthedocs.io/en/latest/usr-guide/tutorials/paraboloid-tutorial.html
"""
#如果我们使用的是Python2,请从Python3导入print函数
来自未来导入打印功能
#从openmdao模块导入我们需要的所有组件
从openmdao.api导入IndepVarComp、组件、问题、组、ScipyOptimizer
类抛物面(组件):
“”“计算公式f(x,y)=(x-3)^2+xy+(y+4)^2-3”“”
定义初始化(自):
super(抛物面,自).\uuu init\uuuu()
self.add_参数('x',val=0.0)
self.add_参数('y',val=0.0)
self.add_输出('f_xy',shape=1)
def solve_非线性(自、参数、未知数、残差):
“f(x,y)=(x-3)^2+xy+(y+4)^2-3
"""
x=参数['x']
y=参数['y']
未知数['f_xy']=(x-3.0)**2+x*y+(y+4.0)**2-3.0
def线性化(自身、参数、未知数、残差):
“我们的抛物面是雅可比的。”
x=参数['x']
y=参数['y']
J={}
J['f_xy','x']=2.0*x-6.0+y
J['f_xy','y']=2.0*y+8.0+x
返回J
#此if语句仅在脚本作为脚本运行时执行,而不是在
#脚本作为模块导入。这个演示没有必要,但是它
#这是一个很好的编码实践。
如果名称=“\uuuuu main\uuuuuuuu”:
#初始化整个问题
top=问题()
#每个问题都有一个根“组”,其中包含评估组件
#目标函数
root=top.root=Group()
#使用自变量及其初始猜测定义组件
root.add('p1',IndepVarComp('x',3.0))
root.add('p2',IndepVarComp('y',-4.0))
#添加定义目标函数的组件
root.add('p',抛物面())
#将组件连接在一起
root.connect('p1.x','p.x')
root.connect('p2.y','p.y')
#指定问题的驱动程序(可选)
top.driver=ScipyOptimizer()
top.driver.options['optimizer']='SLSQP'
top.driver.options['disp']=True#不显示优化器输出
#设置问题
top.setup()
#运行优化
top.run()

打印(顶部['p.f_xy'])
我猜出来了。在一个典型的大脑放屁的时刻,我忘了给司机添加我的设计变量和目标函数。这就是我所缺少的:

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)
顶部。驱动因素。添加目标('p.f\U xy')