openmdao - OpenMDAO:如何解决“numpy.ndarray”对象没有属性“log”错误
问题描述
我是 OpenMDAO 的新手,正在尝试解决优化问题。当我运行代码时,我收到以下错误“'numpy.ndarray' object has no attribute 'log'”无法解决问题?有什么建议么?
我已经查看了 OpenMDAO 文档。
错误消息:“numpy.ndarray”对象没有属性“log”
from __future__ import division, print_function
import openmdao.api as om
import numpy as np
class Objective (om.ExplicitComponent):
def setup(self):
self.add_input('mu1', val = 3.84)
self.add_input('mu2', val = 3.84)
self.add_output('f', val = 0.00022)
# Finite difference all partials.
self.declare_partials('*', '*', method='fd')
def compute(self, inputs, outputs):
mu1 = inputs['mu1']
mu2 = inputs['mu2']
outputs['f'] = np.log((mu1*(0.86))/(1.0-(mu1*0.14)))+np.log((mu2*(0.86))/(1.0-(mu2*0.14)))
# build the model
prob = om.Problem()
indeps = prob.model.add_subsystem('indeps', om.IndepVarComp())
indeps.add_output('mu1', 3.84)
indeps.add_output('mu2', 3.84)
prob.model.add_subsystem('obj', Objective())
prob.model.add_subsystem('cnst', om.ExecComp('g = 7924.8 - 2943.0*(np.log(mu1)) - 2943.0*(np.log(mu2))'))
prob.model.connect('indeps.mu1', 'obj.mu1')
prob.model.connect('indeps.mu2', 'obj.mu2')
prob.model.connect('indeps.mu1', 'cnst.mu1')
prob.model.connect('indeps.mu2', 'cnst.mu2')
# setup the optimization
prob.driver = om.ScipyOptimizeDriver()
prob.driver.options['optimizer'] = 'COBYLA'
prob.model.add_design_var('indeps.mu1', lower=0.0, upper=5.0)
prob.model.add_design_var('indeps.mu2', lower=0.0, upper=5.0)
prob.model.add_objective('obj.f')
prob.model.add_constraint('cnst.g', lower=0.0, upper=0.0)
prob.setup()
prob.run_driver()
解决方案
问题在于您的 ExecComp 的定义。你有np.log
,但你只是想要的字符串解析工作的方式log
。
试试这个:
'g = 7924.8 - 2943.0*(log(mu1)) - 2943.0*(log(mu2))'
有了这个改变,我得到了:
Normal return from subroutine COBYLA
NFVALS = 46 F = 3.935882E+00 MAXCV = 2.892193E-10
X = 3.843492E+00 3.843491E+00
Optimization Complete
推荐阅读
- fft - 如何通过 FFT 计算卷积和相关的组合?
- go - 在 Ubuntu 上作为 systemctl 服务运行时,Go 找不到文件
- intel-media-sdk - vainfo - iHD_drv_video.so 初始化失败
- c++ - 在特定的 Windows DLL 模块中分配内存
- python - 如何获取位于通过单击 tkinter 中不同窗口中的按钮出现的窗口中的 GUI 文本字段的参数?
- c - 创建名称取自变量值的新文件
- c# - 通用扩展 - 服务未实现接口成员
- c++ - 如何修复崇高文本中的编码问题
- arrays - 如何在离子3中显示数组数组
- python - Keras 2:在“合并”层中使用 lambda 函数