python - 是否可以将 SciPy Optimize 与外部应用程序调用一起使用
问题描述
我正在尝试使用 scipy.optimize.basinhopping 来找到具有许多潜在最小值的工程系统问题的最佳解决方案。
用于估计流体系统条件和特性的解析方程内置于预先存在的非 Python 应用程序中。这些方程是理想的,基于物理学和热力学。然后使用系数修改或“调整”这些方程以匹配在实验室测量的实际流体特性。我正在尝试使用 scipy.optimize.basinhopping 来找到最佳系数集,以最小化一系列属性(例如:压力、流速、湍流等)中预测值和测量值之间的预测误差或差异。误差通过所有属性的简单 SSE 测量。例如:
压力误差 = (Pprediced - Pmeasured)^2
Basinhopping 似乎正在努力寻找系统的解决方案,但它非常耗时。主要问题似乎是只有算法的步数部分起作用,而最小化部分无法与外部应用程序调用一起工作。我正在尝试确定问题是否与我的实现有关,或者是否根本无法使用外部应用程序进行优化。
这是我的实现:
minimizer_kwargs = {"method": "BFGS", "options":{"maxiter":1, "disp": True, "return_all": True}}
basinhopping(tuningRun,[ 1.00, 1.05, 0.80, 0.09, -1.22, 0.45], niter = 500, minimizer_kwargs=minimizer_kwargs, disp =True))
tuneRun 是一个调用外部应用程序、插入系数并返回误差/成本函数的函数。
这是我看到的输出示例:
从求解器迭代看来,成本/误差函数在 BFGS 函数评估之间没有变化。在这种情况下,它保持在 152.08 不变。在这种情况下效率特别低,因为应用程序调用非常昂贵(约 70 秒)。还要查看最终输出中的 hess 和 jac,该算法似乎无法收集任何导数。我尝试了其他最小化算法,例如 COBYLA,这似乎并没有改变最小化问题。我的问题是是否有可能改进我的实现,以便盆地跳跃算法可以使用差异来采取更有效的步骤,或者在这种情况下是否不可能(因为正在优化的函数不在 python 中)并且我应该覆盖/转-关闭最小化功能。
解决方案
推荐阅读
- css - css中间适合浏览器剩余空间
- html - 如何让 2 个部分在网格中用页眉/主/页脚填充整页
- android - 带有 ViewPager 的片段中的错误变量实例
- angular - Angular Web 应用程序经常对某些用户失去风格
- firebase - SendGrid 与 Firebase 触发电子邮件的集成。错误:无效登录:535 身份验证失败
- facebook - Facebook API 获取两个人之间的对话线程
- spring-boot - Spring Data JPA 加入问题
- powershell - 任务未正常运行 - Windows Server 2019
- apache-kafka - BACnet 或 KNX 与 RabbitMQ 或 Kafka 的比较
- python - 熊猫按年份分组,列中出现次数?