You signed in with another tab or window. Reload to refresh your session.You signed out in another tab or window. Reload to refresh your session.You switched accounts on another tab or window. Reload to refresh your session.Dismiss alert
a) Thanks for providing bayesopt -- I am having fun with it and my multidimensional optimisation problems!
b) Please forgive this somewhat specific / longwinded way of asking for a diff to be merged, provided below, for what is undoubtedly technically a Matlab bug. I am providing a vast amount of information in case it helps someone else. On the Matlab (R2023a) interface, I was trying to optimise a 37-dimensional function that returns essentially the least squares difference of a simulation and experimental data. I had defined two functions: (i) optimFun(x) as an anonymous function, and AFullSimulation(x, parameters_1, parameters2, options,experimental_data) differently; that is AFullSimulation(...) was defined separately and optimFun = @(x) (AFullSimulation(x, Sys1, Exp, Options,...) was defined inline in the matlab file I was trying to run. Trying to call bayesoptcont(@optimFun,...) directly failed -- with "Error: -1" returned and ERROR: Unknown error in the log. I tried to understand this and tried iterations such as bayesoptcont('optimFun') etc but to no avail.
I therefore edited the wrapper function's generic, all-purpose catch(...) statement to provide a specific error class if one was available, utilising a feature in boostlib, which you are already linking against:
diff --git a/src/wrappers/bayesoptwpr.cpp b/src/wrappers/bayesoptwpr.cpp
index 2d38591..eeb13d3 100644
--- a/src/wrappers/bayesoptwpr.cpp
+++ b/src/wrappers/bayesoptwpr.cpp
@@ -26,6 +26,7 @@
#include "log.hpp"
#include "ublas_extra.hpp"
#include "specialtypes.hpp"
+#include <boost/exception/diagnostic_information.hpp>
static const int BAYESOPT_FAILURE = -1; /* generic failure code */
static const int BAYESOPT_INVALID_ARGS = -2;
@@ -134,7 +135,8 @@ int bayes_optimization(int nDim, eval_func f, void* f_data,
}
catch (...)
{
- FILE_LOG(logERROR) << "Unknown error";
+ FILE_LOG(logERROR) << "Unknown error building continuous optimizer!" << std::endl;
+ FILE_LOG(logERROR) << boost::current_exception_diagnostic_information() << std::endl; /* Provide debug information if available */
return BAYESOPT_FAILURE;
}
return 0; /* everything ok*/
@@ -192,7 +194,8 @@ int bayes_optimization_disc(int nDim, eval_func f, void* f_data,
}
catch (...)
{
- FILE_LOG(logERROR) << "Unknown error";
+ FILE_LOG(logERROR) << "Unknown error building discrete optimizer!" << std::endl;
+ FILE_LOG(logERROR) << boost::current_exception_diagnostic_information() << std::endl; /* Provide debugging info if it is there */
return BAYESOPT_FAILURE;
}
For my specific Matlab woe, this helpfully prints out the following:
[...] ERROR: Dynamic exception type: foundation::core::except::Exception<MATLAB::legacy_two_part::undefinedFunctionTextInputArgumentsType, std::exception, void> std::exception::what: Undefined function 'optimFun' for input arguments of type 'double'
Replacing @optimFun or 'optimFun' with @(x) AFullSimulation(x,...) (i.e. its full definition writ-large) appears to make Matlab JIT it into something that the mex interface is happy with.
I'm happy to submit this as a pull request if you like but thought I'd reach out first (!).
The text was updated successfully, but these errors were encountered:
Hi there,
a) Thanks for providing
bayesopt
-- I am having fun with it and my multidimensional optimisation problems!b) Please forgive this somewhat specific / longwinded way of asking for a diff to be merged, provided below, for what is undoubtedly technically a Matlab bug. I am providing a vast amount of information in case it helps someone else. On the Matlab (R2023a) interface, I was trying to optimise a 37-dimensional function that returns essentially the least squares difference of a simulation and experimental data. I had defined two functions: (i)
optimFun(x)
as an anonymous function, andAFullSimulation(x, parameters_1, parameters2, options,experimental_data)
differently; that isAFullSimulation(...)
was defined separately andoptimFun = @(x) (AFullSimulation(x, Sys1, Exp, Options,...)
was defined inline in the matlab file I was trying to run. Trying to callbayesoptcont(@optimFun,...)
directly failed -- with "Error: -1" returned andERROR: Unknown error
in the log. I tried to understand this and tried iterations such asbayesoptcont('optimFun')
etc but to no avail.I therefore edited the wrapper function's generic, all-purpose
catch(...)
statement to provide a specific error class if one was available, utilising a feature in boostlib, which you are already linking against:For my specific Matlab woe, this helpfully prints out the following:
Replacing
@optimFun
or'optimFun'
with@(x) AFullSimulation(x,...)
(i.e. its full definition writ-large) appears to make Matlab JIT it into something that the mex interface is happy with.I'm happy to submit this as a pull request if you like but thought I'd reach out first (!).
The text was updated successfully, but these errors were encountered: