我正在寻找一个微分进化算法(希望是来自西西),我可以用一种非正统的方式。我希望,对于每一代人,DE预先给我新一代的所有儿童成员,并在我的目标函数中同时对他们进行评估。原因是我的目标函数调用COMSOL。我可以在COMSOL中进行一批计算,COMSOl将仔细地并行化,所以我不希望DE将其本身并行化。最后,我要计算COMSOL调用中的所有成员。你对用Python实现这种自由的包有什么想法吗?
谢谢你的帮助!
发布于 2022-02-02 03:50:58
您可以通过使用differential_evolution关键字的能力来向量化differential_evolution,该关键字可以接受一个类似于映射的callable,该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')从ciply1.9中还将有一个vectorized关键字,它将在每次迭代时将整个种群发送到目标函数。
https://stackoverflow.com/questions/65387767
复制相似问题