1

我正在寻找一种可以以非正统方式使用的差分进化算法(希望是来自 Scipy 的算法)。我希望对于每一代,DE 都提前给我新一代的所有子成员,并且我在我的目标函数中一次评估它们。原因是我的目标函数调用了 COMSOL。我可以在 COMSOL 中进行一批计算,COMSOl 会仔细并行化,所以我不希望 DE 自己并行化它。所以最后,我想在 COMSOL 的一次调用中计算所有成员。您是否对具有这种自由度的 Python 包有任何想法?

谢谢您的帮助!

4

1 回答 1

1

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关键字,它将在每次迭代时将整个种群发送到目标函数。

于 2022-02-02T03:50:58.343 回答