如何在for循环中重新运行不同模型的问题?
How to re-run problem with different model in for loop?
我正在进行一项设计研究,需要我 运行 在不同模型上解决许多优化问题。我的问题是第一次失败后的任何优化。比如我运行先研究1,问题收敛。然后我 运行 研究了 2、3、4 等,但问题失败了。但是,如果我先从 运行ning study 2 开始,问题就会收敛。然后我可以 运行 研究 1、3、4 等,但问题失败了。
过去似乎有人遇到过类似的问题,我已经按照前面 post: Replaceing Component in OpenMDAO Group 中的描述进行了处理。
下面提供了我的问题的伪代码:
for i in range(N):
p = om.Problem()
add_subsystem(Model i)
add driver and solvers
add constraints
add design variables
add objective
p.setup()
set initial guesses
run driver and save data
p.cleanup()
del p
如您所见,我在 for 循环的每次迭代中清理、删除并重新实例化问题。但是,第一次失败后的所有优化。你知道为什么这个过程会失败吗?有没有办法更正一下?
此外,需要说明的是,每个模型都是由不同变量组成的独特结构,因此我不能简单地更改特定参数值并重新运行驱动程序。
您没有提供太多细节,但是如果您的伪代码与您的模型非常匹配,那么问题就与 OpenMDAO 本身无关。多个问题实例之间不共享任何状态。不过,您看到的行为是有状态的。
所以您的某个组件或组中的某些东西必须以某种方式存储状态。要么将某些内容写入下一个案例读取的文件,将值存储在某种全局变量中,要么调用以某种方式有状态的已编译库。
如果没有关于您的模型的更多详细信息或某种示例案例,则很难更具体。
我正在进行一项设计研究,需要我 运行 在不同模型上解决许多优化问题。我的问题是第一次失败后的任何优化。比如我运行先研究1,问题收敛。然后我 运行 研究了 2、3、4 等,但问题失败了。但是,如果我先从 运行ning study 2 开始,问题就会收敛。然后我可以 运行 研究 1、3、4 等,但问题失败了。 过去似乎有人遇到过类似的问题,我已经按照前面 post: Replaceing Component in OpenMDAO Group 中的描述进行了处理。 下面提供了我的问题的伪代码:
for i in range(N):
p = om.Problem()
add_subsystem(Model i)
add driver and solvers
add constraints
add design variables
add objective
p.setup()
set initial guesses
run driver and save data
p.cleanup()
del p
如您所见,我在 for 循环的每次迭代中清理、删除并重新实例化问题。但是,第一次失败后的所有优化。你知道为什么这个过程会失败吗?有没有办法更正一下?
此外,需要说明的是,每个模型都是由不同变量组成的独特结构,因此我不能简单地更改特定参数值并重新运行驱动程序。
您没有提供太多细节,但是如果您的伪代码与您的模型非常匹配,那么问题就与 OpenMDAO 本身无关。多个问题实例之间不共享任何状态。不过,您看到的行为是有状态的。
所以您的某个组件或组中的某些东西必须以某种方式存储状态。要么将某些内容写入下一个案例读取的文件,将值存储在某种全局变量中,要么调用以某种方式有状态的已编译库。
如果没有关于您的模型的更多详细信息或某种示例案例,则很难更具体。