paulknysh / blackbox

A Python module for parallel optimization of expensive black-box functions
MIT License
439 stars 60 forks source link

Comparison with scipy optimize #2

Closed pedvide closed 5 years ago

pedvide commented 7 years ago

Hello,

Do you have a comparison with scipy's minimize function (https://docs.scipy.org/doc/scipy-0.18.1/reference/generated/scipy.optimize.minimize.html#scipy.optimize.minimize), maybe even using the different methods?

I have created a simulation (https://github.com/pedvide/simetuc) that takes from 1s to maybe 1000s to solve. optimization of the few (1-5) free parameters is painfully slow for the longer simulations, so I'm interested in any improvement!

paulknysh commented 7 years ago

Hi,

I don't have a direct comparison with this function. I looked at the list of methods available for scipy.optimize.minimize() - they are all "general purpose" methods.

blackbox (procedure is described here, based on this paper) is designed for a specific class of functions that are expensive and black-box. In short, method is evaluating given function at few points, and based on those values, constructs an approximation of given function, that is much cheaper to evaluate and optimize. Of course, there is a time spent on constructing/optimizing such approximation, but that time is negligible in comparison to the time spent on evaluations of expensive function. This time also can be significant, if the method is applied on cheap function. So method doesn't work well for cheap functions.

I'd say, for the function that takes 1 s to evaluate it's not obvious if blackbox will provide significant speedup (it depends). But I believe it will in case of 10 s and more (definitely for >100 s).

pedvide commented 7 years ago

Thanks for the explanation. I understand it now. I'll try to test it with my simulations, and compare it to the general scipy.minimize approach.

pedvide commented 7 years ago

I suggest that you copy the license contents to the top of your python file. People will probably copy your program file but not your license file!