Arrays OpenMDAO 1.5:使用数组作为desvar运行DOEdriver
我使用了这里描述的例子()来说明我的问题。我想对一个组件使用相同的方法,即“params”是数组,不再是float。见下面的例子Arrays OpenMDAO 1.5:使用数组作为desvar运行DOEdriver,arrays,driver,openmdao,Arrays,Driver,Openmdao,我使用了这里描述的例子()来说明我的问题。我想对一个组件使用相同的方法,即“params”是数组,不再是float。见下面的例子 from openmdao.api import IndepVarComp, Group, Problem, ScipyOptimizer, ExecComp, DumpRecorder, Component from openmdao.drivers.latinhypercube_driver import LatinHypercubeDriver, Optim
from openmdao.api import IndepVarComp, Group, Problem, ScipyOptimizer, ExecComp, DumpRecorder, Component
from openmdao.drivers.latinhypercube_driver import LatinHypercubeDriver, OptimizedLatinHypercubeDriver
import numpy as np
class Paraboloid(Component):
""" Evaluates the equation f(x,y) = (x-3)^2 + xy + (y+4)^2 - 3 """
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', val=0.0)
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
class ParaboloidArray(Component):
""" Evaluates the equation f(x,y) = (x-3)^2 + xy + (y+4)^2 - 3 """
def __init__(self):
super(ParaboloidArray, self).__init__()
self.add_param('X', val=np.array([0., 0.]))
self.add_output('f_xy', val=0.0)
def solve_nonlinear(self, params, unknowns, resids):
"""f(x,y) = (x-3)^2 + xy + (y+4)^2 - 3
"""
x = params['X'][0]
y = params['y'][1]
unknowns['f_xy'] = (x-3.0)**2 + x*y + (y+4.0)**2 - 3.0
top = Problem()
root = top.root = Group()
root.add('p1', IndepVarComp('x', 50.0), promotes=['*'])
root.add('p2', IndepVarComp('y', 50.0), promotes=['*'])
root.add('comp', Paraboloid(), promotes=['*'])
top.driver = OptimizedLatinHypercubeDriver(num_samples=4, seed=0, population=20, generations=4, norm_method=2)
top.driver.add_desvar('x', lower=-50.0, upper=50.0)
top.driver.add_desvar('y', lower=-50.0, upper=50.0)
top.driver.add_objective('f_xy')
top.setup()
top.run()
top.cleanup()
###########################
print("case float ok")
top = Problem()
root = top.root = Group()
root.add('p1', IndepVarComp('X', np.array([50., 50.])), promotes=['*'])
root.add('comp', ParaboloidArray(), promotes=['*'])
top.driver = OptimizedLatinHypercubeDriver(num_samples=4, seed=0, population=20, generations=4, norm_method=2)
top.driver.add_desvar('X', lower=np.array([-50., -50.]), upper=np.array([50., 50.]))
top.driver.add_objective('f_xy')
top.setup()
top.run()
top.cleanup()
我得到以下错误:
Traceback (most recent call last):
File "C:\Program Files (x86)\Wing IDE 101 5.0\src\debug\tserver\_sandbox.py", line 102, in <module>
File "D:\tlefeb\Anaconda2\Lib\site-packages\openmdao\core\problem.py", line 1038, in run
self.driver.run(self)
File "D:\tlefeb\Anaconda2\Lib\site-packages\openmdao\drivers\predeterminedruns_driver.py", line 108, in run
for run in runlist:
File "D:\tlefeb\Anaconda2\Lib\site-packages\openmdao\drivers\latinhypercube_driver.py", line 57, in _build_runlist
design_var_buckets = self._get_buckets(bounds['lower'], bounds['upper'])
File "D:\tlefeb\Anaconda2\Lib\site-packages\openmdao\drivers\latinhypercube_driver.py", line 101, in _get_buckets
bucket_walls = np.linspace(low, high, self.num_samples + 1)
File "D:\tlefeb\Anaconda2\Lib\site-packages\numpy\core\function_base.py", line 102, in linspace
if step == 0:
ValueError: The truth value of an array with more than one element is ambiguous. Use a.any() or a.all()
回溯(最近一次呼叫最后一次):
文件“C:\Program Files(x86)\Wing IDE 101 5.0\src\debug\tserver\\u sandbox.py”,第102行,在
文件“D:\tlefeb\Anaconda2\Lib\site packages\openmdao\core\problem.py”,第1038行,正在运行
self.driver.run(self)
文件“D:\tlefeb\Anaconda2\Lib\site packages\openmdao\drivers\predeterminedruns\u driver.py”,第108行,正在运行
对于在运行列表中运行:
文件“D:\tlefeb\Anaconda2\Lib\site packages\openmdao\drivers\拉丁超立方体\u driver.py”,第57行,在\u build\u runlist中
design_var_bucket=self._get_bucket(边界['lower'],边界['upper']))
文件“D:\tlefeb\Anaconda2\Lib\site packages\openmdao\drivers\拉丁超立方体\u driver.py”,第101行,在\u get\u bucket中
bucket_walls=np.linspace(低、高、self.num_示例+1)
文件“D:\tlefeb\Anaconda2\Lib\site packages\numpy\core\function\u base.py”,第102行,在linspace中
如果步骤==0:
ValueError:包含多个元素的数组的真值不明确。使用a.any()或a.all()
在我的编码方式中,我是否误解了什么 使用,我得到的错误与您的不同,但我得到的错误并不比您少。该模式没有任何错误,但是在使用数组变量时存在一些错误。我已经在OpenMDAO积压工作中添加了一个bug修复,我们希望在接下来的几周内能够处理它。如果您在我们开始之前开发修复程序,我们很乐意接受请求 使用,我得到的错误与您的不同,但我得到的错误并不比您少。该模式没有任何错误,但是在使用数组变量时存在一些错误。我已经在OpenMDAO积压工作中添加了一个bug修复,我们希望在接下来的几周内能够处理它。如果您在我们开始之前开发修复程序,我们很乐意接受请求 您正在运行哪个版本的OpenMDAO?我这里也有一个错误,但它和你的不同。我得到一个值错误…感谢您的检查:我使用的是1.5.0版本(我有Anaconda提供python),您正在运行哪个版本的OpenMDAO?我这里也有一个错误,但它和你的不同。我得到一个值错误…感谢检查:我使用1.5.0版本(我有Anaconda提供python),目前,我可以使用DOE的“float”方法,但我将检查我是否可以在我的一位同事的帮助下开发修复程序!目前,我可以使用DOE的“浮动”方法,但我会检查我是否可以在我的一位同事的帮助下开发修复程序!