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

现在我的问题是-我能否将Python与模拟软件结合起来,以建议不同管道段的长度和直径的值,以确保流量同时到达点1-5?我已经知道如何通过python脚本运行仿真软件,以及如何从软件中提取流程不平衡的结果。我想知道的是,Python中是否存在一个库/函数,它可以迭代地表示管道段的长度和直径的值,这样在每次迭代之后流量不平衡就会减少吗?
请知道,不可能制定一个考虑管段长度和直径的目标函数,并设法将其最小化或最大化,以消除流量不平衡。运行软件模拟是真正检查这种流量不平衡的唯一方法。我知道像scipy.optimize这样的优化库是存在的,但是AFAIK它们工作在一个目标函数上。根据每次迭代后流量不平衡的大小,我找不到任何能给出管段长度和直径的值的东西。
发布于 2022-06-13 07:29:16
所以你可以写一个函数
def imbalance(pipe_diameters):
times = get_pipe_times(pipe_diameters)
return times - np.mean(times)然后你可以用
from scipy.optimize import leastsq
x0 = uniform_diameter_pipes()
diameters = leastsq(imbalance, x0)如果参数的数量大于输出的数量,那么您可能不得不使用注释中提到的最小化。在这种情况下,不平衡必须返回一个标量。
def imbalance(pipe_diameters):
times = get_pipe_times(pipe_diameters)
return np.var(times) # calculate variance, could be other metric as wellhttps://stackoverflow.com/questions/72593120
复制相似问题