我有一个有 64 个变量的 Python 函数,我试图在最小化函数中使用 L-BFGS-B 方法对其进行优化,但是这种方法对初始猜测有很强的依赖性,并且未能找到全局最小值。
但我喜欢它为变量设置界限的能力。有没有一种方法/函数可以在为变量设置边界的同时找到全局最小值?
原文由 dilyar 发布,翻译遵循 CC BY-SA 4.0 许可协议
我有一个有 64 个变量的 Python 函数,我试图在最小化函数中使用 L-BFGS-B 方法对其进行优化,但是这种方法对初始猜测有很强的依赖性,并且未能找到全局最小值。
但我喜欢它为变量设置界限的能力。有没有一种方法/函数可以在为变量设置边界的同时找到全局最小值?
原文由 dilyar 发布,翻译遵循 CC BY-SA 4.0 许可协议
2 回答5.2k 阅读✓ 已解决
2 回答1.1k 阅读✓ 已解决
4 回答1.4k 阅读✓ 已解决
3 回答1.3k 阅读✓ 已解决
3 回答1.3k 阅读✓ 已解决
2 回答865 阅读✓ 已解决
1 回答1.7k 阅读✓ 已解决
这可以通过
scipy.optimize.basinhopping
来完成。 Basinhopping 是一种旨在找到目标函数的 全局 最小值的函数。它使用函数scipy.optimize.minimize
重复最小化,并在每次最小化后在坐标空间中采取随机步骤。 Basinhopping 仍然可以通过使用实现边界的最小化器之一(例如 L-BFGS-B)来遵守边界。这是一些代码,展示了如何做到这一点上面的代码适用于一个简单的情况,但如果 basinhopping 随机位移例程将您带到那里,您仍然可能会进入禁区。幸运的是,可以通过使用关键字
take_step
传递自定义步骤来覆盖例程