来自SCIPY的教程仅示出了差分进化的一种可能的解决方案(https://docs.scipy.org/doc/scipy/reference/generated/scipy.optimize.differential_evolution.html)。
我怎么能得到多个解决方案?如果不是,是因为scipy实现还是差分进化算法只是这样设计的?
import numpy as np
from scipy.optimize import rosen, differential_evolution
bounds = [(0,2), (0, 2), (0, 2), (0, 2), (0, 2)]
result = differential_evolution(rosen, bounds)
result.x, result.fun
2条答案
按热度按时间jum4pzuy1#
有几个超参数可以让进化算法发散。
https://docs.scipy.org/doc/scipy/reference/generated/scipy.optimize.differential_evolution.html
例如:
[out]:
在边界中具有较大的方差
但由于罗森函数是公式化的,因此边界的方差需要足够大,才能看到结果的显著变化。
[out]:
8fq7wneg2#
在
rosen
函数中只有一个全局最小值。不清楚为什么你期望有多个解。differential_evolution
被设计成有更大的概率找到全局最小值。如果你有一个具有多个最小值的解,并且你想记录它们,那么shgo
可能是你最好的选择。或者你可以跟踪微分的进度_进化群体以识别能量表面中的不同最小值。