【发布时间】:2016-06-03 04:50:49
【问题描述】:
我想使用缩放器并最终使用 OpenMDAO 1.x 测试了您的 Paraboloid example from OpenMDAO 0.x 文档,但无论是否使用缩放器,我都会得到奇怪的结果。这是代码:
从 __future__ 导入 print_function 导入系统 从 openmdao.api 导入 IndepVarComp、组件、问题、组、ScipyOptimizer 类抛物面(组件): def __init__(self): 超级(抛物面,自我).__init__() self.add_param('x', val=0.0) self.add_param('y', val=0.0) self.add_output('f_xy', val=0.0) def solve_nonlinear(self, params, unknowns, resids): x = 参数['x'] y = 参数['y'] #unknowns['f_xy'] = (x-3.0)**2 + x*y + (y+4.0)**2 - 3.0 未知数['f_xy'] = (1000.*x-3.)**2 + (1000.*x)*(0.01*y) + (0.01*y+4.)**2 - 3。 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['f_xy', 'x'] = 2000000.0*x - 6000.0 + 10.0*y J['f_xy', 'y'] = 0.0002*y + 0.08 + 10.0*x 返回 J 如果 __name__ == "__main__": 顶部 = 问题() 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.add_desvar('p1.x', lower=-1000, upper=1000, scaler=0.001) top.driver.add_desvar('p2.y', lower=-1000, upper=1000, scaler=1000.) top.driver.add_objective('p.f_xy') top.setup() 顶部运行() 打印('\n') print('在 (%f, %f) 处找到的 %f 的最小值' % (top['p.f_xy'], top['p.x'], top['p.y']))当我在我的系统上运行它时,它会给出:
2.7.11 |Anaconda 2.5.0(64 位)| (默认,2016 年 1 月 29 日,14:26:21)[MSC v.1500 64 位 (AMD64)] Python 键入“help”、“copyright”、“credits”或“license”以获取更多信息。 [评估 paraboloid_optimize_scaled.py] ############################################# 设置:检查潜在问题... 没有指定记录器,因此不会保存任何数据。 设置:检查完成。 ############################################# 优化成功终止。 (退出模式 0) 当前函数值:[8981902.27846645] 迭代次数:1 功能评估:12 梯度评估:1 优化完成 ---------------------------------- 最小值 8981902.278466 位于 (3.000000, -4.000000)我错过了什么吗?
【问题讨论】:
-
您运行的是哪个版本的 OpenMDAO 1.x?
-
至于现在,我会说 HEAD。