extract cache at the beginning of functions that use it (e.g. estimate and simulate)
rename and avoid backward breaking changes (when old cache creation is called, indicate to user that it's deprecated; throw warning when cache is specified in the calling of estimate and simulate)