首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >将Python与仿真耦合优化一个物理问题

将Python与仿真耦合优化一个物理问题
EN

Stack Overflow用户
提问于 2022-06-12 14:32:27
回答 1查看 43关注 0票数 -1

我试图通过将模拟软件耦合到Python来解决物理问题。基本上,我需要找到以下图片中每个管段的长度和直径的值(任意两个黑点之间的线段是一个管道段),这样从0点开始的流体流动同时到达点1-5。给出了各个管段的长度和直径的起始值,并用仿真软件求解,以检验流体是否同时达到1~5点。如果没有,则需要改变管段的长度和直径以确保这一点。没有在同一时刻到达1-5点的流量被称为流量不平衡,理想情况下,我需要将这种不平衡降到零。

现在我的问题是-我能否将Python与模拟软件结合起来,以建议不同管道段的长度和直径的值,以确保流量同时到达点1-5?我已经知道如何通过python脚本运行仿真软件,以及如何从软件中提取流程不平衡的结果。我想知道的是,Python中是否存在一个库/函数,它可以迭代地表示管道段的长度和直径的值,这样在每次迭代之后流量不平衡就会减少吗?

请知道,不可能制定一个考虑管段长度和直径的目标函数,并设法将其最小化或最大化,以消除流量不平衡。运行软件模拟是真正检查这种流量不平衡的唯一方法。我知道像scipy.optimize这样的优化库是存在的,但是AFAIK它们工作在一个目标函数上。根据每次迭代后流量不平衡的大小,我找不到任何能给出管段长度和直径的值的东西。

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2022-06-13 07:29:16

所以你可以写一个函数

代码语言:javascript
复制
def imbalance(pipe_diameters):
  times = get_pipe_times(pipe_diameters)
  return times - np.mean(times)

然后你可以用

代码语言:javascript
复制
from scipy.optimize import leastsq
x0 = uniform_diameter_pipes()
diameters = leastsq(imbalance, x0)

如果参数的数量大于输出的数量,那么您可能不得不使用注释中提到的最小化。在这种情况下,不平衡必须返回一个标量。

代码语言:javascript
复制
def imbalance(pipe_diameters):
  times = get_pipe_times(pipe_diameters)
  return np.var(times) # calculate variance, could be other metric as well
票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/72593120

复制
相关文章

相似问题

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