首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >优化过程中的零导数计算(不影响目标)

优化过程中的零导数计算(不影响目标)
EN

Stack Overflow用户
提问于 2021-11-30 14:02:56
回答 1查看 65关注 0票数 0

我正在为有限差分辐射解算器模型编写优化代码。我开始使用"src_indices“来连接参数,而不是提升所有变量。但当我更改连接时,优化不计算导数,给出“对目标没有影响”错误,并在第一次迭代后成功终止优化。在日志中找不到任何用于查找错误的线索(Bug可能是完全不同的原因)。

有什么建议可以让我从哪里开始吗?

我把代码上传到了GitHub https://github.com/TufanAkba/opt_question

EN

回答 1

Stack Overflow用户

发布于 2021-11-30 16:49:04

当你提到“设计变量对目标没有影响”时,你想到的第一件事就是可能有一个缺失的连接。由于此行为是在您更改连接样式后才开始的,因此我认为这更有可能。

有几个工具可以用来诊断这个问题。第一个是n2查看器,您可以通过在命令提示符下键入以下命令来启动它:

代码语言:javascript
复制
openmdao n2 receiver_opt.py

这将启动一个浏览器窗口,其中包含详细信息here中描述的图形模型查看器。您可以使用它来探索模型的结构。要查找模型中未连接的输入,请查找任何着色为orange的输入块。它们在技术上连接到一个名为_auto_ivc的隐藏IndepVarComp,并将包括由优化器设置的设计变量。您将需要查找任何应该连接到其他组件输出的组件。

OpenMDAO也有一个只显示连接的连接查看器。

代码语言:javascript
复制
openmdao view_connections receiver_opt.py

您可以使用此工具只关注连接。它被描述为here。如果您选择使用它,只需过滤以查看源输出字符串中与_auto_ivc的任何连接,即可查看未连接的输入。

如果达到这一点,并且对所有连接都是正确的感到满意,那么还有一些其他的可能性:

  1. 你所有的src_indices都正确吗?也许它们中的一些是空集,或者可能创建了一个“退化”的情况。例如,如果您有一组级联组件,每个组件将传入的向量乘以对角线矩阵,如果您的索引在一个连接中,而在另一个连接中为4,那么您实际上已经切断了整个模型。我们的可视化工具都无法提取这些信息,您需要手动检查索引。

  1. 这也可能是一个派生问题,尽管你所描述的听起来像是联系。在这种情况下,我建议使用check_partials查找任何丢失或不正确的derivatives.

  1. ,你用复杂的步骤计算导数吗?通过复杂的不安全操作,您可能会丢失计算的复杂部分。根据'fd‘检查你的衍生品可以帮助你找到这些。
票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/70170641

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档