我正在寻找一种可以以非正统方式使用的差分进化算法(希望是来自 Scipy 的算法)。我希望对于每一代,DE 都提前给我新一代的所有子成员,并且我在我的目标函数中一次评估它们。原因是我的目标函数调用了 COMSOL。我可以在 COMSOL 中进行一批计算,COMSOl 会仔细并行化,所以我不希望 DE 自己并行化它。所以最后,我想在 COMSOL 的一次调用中计算所有成员。您是否对具有这种自由度的 Python 包有任何想法?
谢谢您的帮助!
我正在寻找一种可以以非正统方式使用的差分进化算法(希望是来自 Scipy 的算法)。我希望对于每一代,DE 都提前给我新一代的所有子成员,并且我在我的目标函数中一次评估它们。原因是我的目标函数调用了 COMSOL。我可以在 COMSOL 中进行一批计算,COMSOl 会仔细并行化,所以我不希望 DE 自己并行化它。所以最后,我想在 COMSOL 的一次调用中计算所有成员。您是否对具有这种自由度的 Python 包有任何想法?
谢谢您的帮助!
differential_evolution
您可以使用关键字的能力进行矢量化,workers
以接受一个类似地图的callable
发送给整个人口的地图,并期望返回一个数组,其中包含为整个人口评估的函数值:
from scipy.optimize import rosen, differential_evolution
bounds=[(0, 10), (0, 10)]
def maplike_fun(func, x):
# x.shape == (S, N), where S is the size of the population and N
# is the number of parameters. This is where you'd call out from
# Python to COMSOL, instead of the following line.
return func(x.T)
res = differential_evolution(rosen, bounds, workers=maplike_fun, polish=False, updating='deferred')
从 scipy 1.9 开始,还会有一个vectorized
关键字,它将在每次迭代时将整个种群发送到目标函数。