- android - 多次调用 OnPrimaryClipChangedListener
- android - 无法更新 RecyclerView 中的 TextView 字段
- android.database.CursorIndexOutOfBoundsException : Index 0 requested, 光标大小为 0
- android - 使用 AppCompat 时,我们是否需要明确指定其 UI 组件(Spinner、EditText)颜色
我正在尝试使用 openMDAO 的 pyopt-sparse 驱动程序和 NSGA2 算法来解决多目标优化问题。以下是代码:
from __future__ import print_function
from openmdao.api import IndepVarComp, Component, Problem, Group, pyOptSparseDriver
class Circ2(Component):
def __init__(self):
super(Circ2, self).__init__()
self.add_param('x', val=10.0)
self.add_param('y', val=10.0)
self.add_output('f1', val=40.0)
self.add_output('f2', val=40.0)
def solve_nonlinear(self, params, unknowns, resids):
x = params['x']
y = params['y']
unknowns['f1'] = (x - 0.0)**2 + (y - 0.0)**2
unknowns['f2'] = (x - 1.0)**2 + (y - 1.0)**2
def linearize(self, params, unknowns, resids):
J = {}
x = params['x']
y = params['y']
J['f1', 'x'] = 2*x
J['f1', 'y'] = 2*y
J['f2', 'x'] = 2*x-2
J['f2', 'y'] = 2*y-2
return J
if __name__ == "__main__":
# Defining Problem & Root
top = Problem()
root = top.root = Group()
# Adding in-present variable values and model
startVal = 50.0
root.add('p1', IndepVarComp('x', startVal))
root.add('p2', IndepVarComp('y', startVal))
root.add('p', Circ2())
# Making Connections
root.connect('p1.x', 'p.x')
root.connect('p2.y', 'p.y')
# Configuring Driver
top.driver = pyOptSparseDriver()
top.driver.options['optimizer'] = 'NSGA2'
# Setting bounds for the optimizer
top.driver.add_desvar('p1.x', lower=-600, upper=600)
top.driver.add_desvar('p2.y', lower=-600, upper=600)
# Setting Objective Function(s)
top.driver.add_objective('p.f1')
top.driver.add_objective('p.f2')
# # Setting up constraints
# top.driver.add_constraint('con.c', lower=1.0)
top.setup()
top.run()
我收到以下错误 -
Traceback (most recent call last):
File "/home/prasad/DivyaManglam/Python Scripts/Pareto Testing/Basic_Sphere.py", line 89, in <module>
top.run()
File "/usr/local/lib/python2.7/dist-packages/openmdao/core/problem.py", line 1038, in run
self.driver.run(self)
File "/usr/local/lib/python2.7/dist-packages/openmdao/drivers/pyoptsparse_driver.py", line 280, in run
sol = opt(opt_prob, sens=self._gradfunc, storeHistory=self.hist_file)
File "/usr/local/lib/python2.7/dist-packages/pyoptsparse/pyNSGA2/pyNSGA2.py", line 193, in __call__
self.optProb.comm.bcast(-1, root=0)
File "MPI/Comm.pyx", line 1276, in mpi4py.MPI.Comm.bcast (src/mpi4py.MPI.c:108819)
File "MPI/msgpickle.pxi", line 620, in mpi4py.MPI.PyMPI_bcast (src/mpi4py.MPI.c:47164)
File "MPI/msgpickle.pxi", line 143, in mpi4py.MPI.Pickle.load (src/mpi4py.MPI.c:41248)
TypeError: only length-1 arrays can be converted to Python scalars
请告诉您是否可以犯上述错误以及如何解决。
另外,多目标问题的解决方案的输出将以什么形式返回。我打算为此生成帕累托最优前沿。谢谢大家。
最佳答案
事实证明这不是 OpenMDAO 错误,而是 NSGA2 的 Pyopt 稀疏包装器中的错误。修复并不可怕,我已经提交了 pull request到 pyoptsparse 仓库。同时,修补您的本地 pyoptsparse 副本将非常容易。
您询问了如何报告结果。当前的 NSGA2 包装器不对结果做任何事情。它只是让 NSGA2 将它们全部写入一系列文本文件,例如 nsga2_best_pop.out
,如下所示:
# This file contains the data of final feasible population (if found)
# of objectives = 1, # of constraints = 0, # of real_var = 2, # of bits of bin_var = 0, constr_violation, rank, crowding_distance
-1.000000e+00 3.190310e+01 -2.413640e+02 0.000000e+00 1 1.000000e+14
-1.000000e+00 -5.309160e+02 2.449727e+02 0.000000e+00 1 0.000000e+00
-1.000000e+00 -3.995119e+02 -1.829071e+02 0.000000e+00 1 0.000000e+00
作为旁注,在您的示例中,您为示例中的组件实现了一个线性化方法。当您需要计算梯度时会使用该方法,但 NSGA2 是无梯度优化器,根本不会使用它。因此,除非您还计划测试一些基于梯度的方法,否则您可以将该方法排除在组件之外。
关于python - 使用 NSGA2 解决多目标问题时出现“TypeError”。来自 OpenMDAO 1.x 中的 pyopt-sparse,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/35148660/
我正在尝试熟悉 OpenMDAO。我发现很难理解的一件事是集成/状态变量如何在 OpenMDAO 的单独组件中工作。我认为这很重要,我想了解基础知识。 假设我有一枚推力恒定且质量不断变化的火箭,我想用
我有一个混合整数非线性问题。我不想使用任何惩罚方法,所以我在 Openmdao 中寻找 MINLP 求解器。是否可以在 openmdao 中使用 APOPT 求解器?它在 pyoptsparse 驱动
我的 Dymos 轨迹有 3 个阶段。在第一阶段和最后阶段,我使用攻角作为控制。在第二阶段,我不想控制而是让攻角保持在第一阶段的最后一个值。我在中间阶段使用 opt = False 关闭了攻角优化。我
我最近“被迫”使用无梯度优化器(包括 pyoptsparse 中的优化器) 之前,迭代次数相当低,因此记录数据从来不是一个大问题,我选择了内部记录器。 但是对于超过 30,000 次迭代的优化问题,从
我尝试使用 OpenMDAO 求解简单的隐式方程。方程如下所示, x*z + z - 4 = 0 y = x + 2*z 当 x = 0.5 时,解为 z = 2.666667,y = 5.83333
我对这个 openmdao 错误感到困惑。为什么会提出这个问题?我可以以某种方式告诉 openmdao 我没有梯度并使用有限差分吗?为什么针对 childWeight 提高此值,而不针对 eta 提高
我一直在使用 SLSQP 算法仅使用 ExplicitComponents 来运行一些 MDO 问题。每个组件的运行时间约为 10 秒,有 60-100 个输入变量。大多数输入变量是静态输入变量,在整
下面关于 OpenMDAO 中 SimpleGADriver 文档的链接描述了“默认是一个空字典,其中每个未指定的变量都被假定为一个整数,并且位数是自动计算的” 在文档的例子中,“xI”的值在优化过程
我想运行一个类似于演示的控制系统模拟 here .由于 OpenMDAO 似乎具有基于组件的建模的良好特性,是否可以使用 OpenMDAO 运行这样的模拟? 更具体地说,我现在正在努力完成的是动态系统
我正在通过 OpenMDAO 使用 SLSQP 来解决优化问题。优化工作充分;最后的 SLSQP 输出如下: Optimization terminated successfully. (Exi
我正在尝试按照在 Python 上找到的方向安装 petsc4py website但我收到一个错误。我该如何解决这个找不到正确版本的错误?我的总体目标是能够使用 openMDAO,但我需要从让 pet
我正在使用 OpenMDAO 和普通的 omdao 记录器来解决 Unix 和 Linux 中的问题,即在我的基于 OpenMDAO 的 python 脚本中我这样做: from openmd
我正在尝试在 OpenMDAO 上实现协作优化和其他多层次架构。我读到 here,这可以通过在问题的子类中定义一个单独的 solve_nonlinear 方法来完成。 问题是在运行问题实例时,未调用定
我不明白这个错误: NameError:源“x”无法连接到目标“AB.x”:目标必须是参数,但“AB.x”未知。 我已阅读此内容 response ,但我仍然缺少一些东西。 我写了一个简单的问题来更容
openmdao GUI 在 1.7.0 版本上可用吗?如果是,如何运行它?我发现如何在 0.10.7 版本上运行 GUI,但它在 1.7 上不起作用。 最佳答案 我们不再有 GUI,并且我们为提高性
我一直在使用 NonLinearBlockGS作为nonlinear_solver我的 MDO 系统由 ExplicitComponents 组成这按预期工作。首先,我将其与简单的数学函数一起使用(因
NameError: name 'sys_platform' is not defined 是什么意思?这个错误的原因可能是什么? 编辑 这似乎是 openMDAO 的问题。当我在 openMDAO
我正在尝试使用 openMDAO 的 pyopt-sparse 驱动程序和 NSGA2 算法来解决多目标优化问题。以下是代码: from __future__ import print_functio
我想用Dymos解决最优控制问题: enter image description here 服从动力系统: enter image description here 我有两个问题: (1)如何设置V
我想用Dymos解决最优控制问题: enter image description here 服从动力系统: enter image description here 我有两个问题: (1)如何设置V
我是一名优秀的程序员,十分优秀!