There is a PR currently in progress for scipy, that is aimed at introducing multiprocessing into scipy.optimize.differential_evolution. For some problems whose objective functions take a long time to calculate this could speed up optimization significantly.
I am currently writing another PR for lmfit, called emcee, that samples the posterior probability distribution function using Markov Chain Monte Carlo. This allows one to obtain robust probability distributions for parameters, marginalise nuisance parameters and also perform model selection. The PR requires that the objective function be called a few orders of magnitude more. This can make the whole process very slow. However, the emcee package that is used to do the sampling can sample in parallel. Given that most people have multiple core computers (or possibly clusters) I would like to try and make the emcee method use this option. However, the parallelisation is done using multiprocessing. Multiprocessing means that everything used for the parallelisation needs to be pickleable, via the pickle module. This would include:
1) the objective function
2) Minimizer._residual
3) Parameters
And everything contained in them. I know that at the moment Parameters objects are not pickleable. (lambda functions and inline functions can't be used for example, all functions have to be declared at the top level) Does anyone know the scope of work for these to become pickleable?
--
_____________________________________
Dr. Andrew Nelson
_____________________________________