Python:使用并行编程进行多启动优化

计算科学 优化 matlab Python 并行计算
2021-12-15 02:22:45

[我之前在StackOverflow上问过我的问题,但这个网站可能更合适]

在 Matlab 中,我目前在计算机集群的并行设置中使用MultiStart作为优化算法。例如,这是我的 Matlab 代码:

opts = optimoptions(@fmincon,'Algorithm','sqp','Use Parallel','Always'); %The options for the algo. The key here is the Use Parallel 
problem = createOptimProblem('fmincon','objective',...
 @(x) x.^2 + 4*sin(5*x),'x0',3,'lb',-5,'ub',5,'options',opts); %x is the variable I wish to min/max
ms = MultiStart;
[x,f] = run(ms,problem,20) %20 stands for the number of initial random variables

当我在集群上为 X 处理器提交批处理作业时,此代码运行良好。我正在网上寻找可以使用 Python 并行实现的类似算法,但我有点不知所措。任何类似的算法可用于 Python?

更新 至于我的集群要求,多线程是不可接受的。通常我使用mpi4py.

1个回答

据我所知,MultiStart 本身并不是一种优化算法,而是一个fmincon为一组随机起点(即单独的、独立的实例)并行运行给定优化算法(在您的代码中,SQP via)的框架fmincon每个起点)。由于实例根本不需要通信,这不需要 MPI(技术术语是“令人尴尬的并行”),因此您可以使用任何作业服务器来启动实例,每个实例都在一个单独的节点上。

由于 Python (如果你愿意的话)比 Matlab 低得多,你可以很容易地自己实现它:选择一个最小化算法的实现(最接近fminconSciPy 的scipy.optimize.minimize)并将它包装在一个multiprocessingPool 中;该模块joblib似乎为此提供了一个方便的包装器。如果你在集群上运行它,你可以尝试dispy.

在更高的层次上,Coopr(一种类似于 AMPL 的优化建模框架)提供了并行解决多个实例的功能。