Scipy中differential_evolution的部分参数边界设置问题
Scipy中differential_evolution的部分参数边界设置问题
嗨,这个问题我之前也碰到过!Scipy的differential_evolution确实要求每个参数都得设置明确的数值边界,不能用None来表示无限制,这也是它和basinhopping的一个明显区别点。
那怎么解决这个问题呢?其实很简单,给那些需要无边界的参数设置一个足够宽泛的合理范围就可以了:
- 对于你第二个参数那种完全无限制的
(None, None),可以根据你的问题场景,设置一个极大的区间,比如(-1e10, 1e10)——只要这个范围远大于你预期的最优参数取值,就不会干扰算法找到正确结果; - 第五个参数是
(0, None),也就是下限为0、无上限,那可以设成(0, 1e10)。
调整后的边界列表就变成这样:
bounds = [(0.0, 1.0), (-1e10, 1e10), (0.0, 1.0), (0.0, 1.0), (0, 1e10)]
为什么differential_evolution不能接受None呢?这和它的核心工作机制有关:它是基于种群的全局优化算法,需要明确的参数空间范围来初始化候选解种群,以及后续的变异、交叉操作,所以必须给每个参数指定确定的上下界数值。
如果担心太宽泛的范围会拖慢优化速度,你还可以先通过预实验或者结合问题的物理/业务意义,大致估算参数的合理区间,把范围缩小到一个既满足算法要求,又不会过于冗余的区间,这样能让优化过程更高效。
备注:内容来源于stack exchange,提问作者jasmine
相关产品推荐
相关产品推荐

