Skip to content
Snippets Groups Projects
Commit e36e34b7 authored by Thomas Purcell's avatar Thomas Purcell
Browse files

Fix Log expr

actually uses correct fmt format
parent ded4c4d1
No related branches found
No related tags found
No related merge requests found
......@@ -220,7 +220,8 @@ public:
inline std::string expr(const double* params, const int depth=1) const
{
return fmt::format(
"(ln({}{:+11.6e}))",
"(ln({:.1f}*{}{:+11.6e}))",
params[0],
(depth < nlopt_wrapper::MAX_PARAM_DEPTH ? _feats[0]->expr(params + 2, depth + 1) : _feats[0]->expr()),
params[1]
);
......@@ -236,7 +237,8 @@ public:
inline std::string get_latex_expr(const double* params, const int depth=1) const
{
return fmt::format(
"\\left(\\ln{{ \\left({}{:+8.3e} \\right)}}\\right)",
"\\lef:3.\\ln{{ \\left({:.1f}{}{:+8.3e} \\right)}}\\right)",
params[0],
(depth < nlopt_wrapper::MAX_PARAM_DEPTH ? _feats[0]->get_latex_expr(params + 2, depth + 1) : _feats[0]->get_latex_expr()),
params[1]
);
......@@ -252,7 +254,8 @@ public:
inline std::string matlab_fxn_expr(const double* params, const int depth=1) const
{
return fmt::format(
"log({}{:+11.6e})",
"log({:.1f}*{}{:+11.6e})",
params[0],
(depth < nlopt_wrapper::MAX_PARAM_DEPTH ? _feats[0]->matlab_fxn_expr(params + 2, depth + 1) : _feats[0]->matlab_fxn_expr()),
params[1]
);
......
......@@ -247,7 +247,6 @@ void LogNode::initialize_params(double* params, const int depth) const
void LogParamNode::set_bounds(double* lb, double* ub, const int depth) const
{
// The parameters of logarithm are dependent on the external shift/scale parameters, but physically relevant
lb[0] = _sign_alpha;
ub[0] = _sign_alpha;
......@@ -267,13 +266,23 @@ void LogParamNode::initialize_params(double* params, const int depth) const
if(depth >= nlopt_wrapper::MAX_PARAM_DEPTH)
{
val_ptr = _feats[0]->value_ptr();
params[1] = std::max(0.0, -1.0 * _sign_alpha * (*std::min_element(val_ptr, val_ptr + _n_samp, [this](double x1, double x2){return x1 * _sign_alpha < x2 * _sign_alpha;})) + 1e-10);
params[1] = std::max(
0.0,
1e-10 - 1.0 * _sign_alpha * (
*std::min_element(val_ptr, val_ptr + _n_samp, [params](double v1, double v2){return params[0] * v1 < params[0] * v2;})
)
);
return;
}
_feats[0]->initialize_params(params + 2, depth + 1);
val_ptr = _feats[0]->value_ptr(params + 2);
params[1] = std::max(0.0, -1.0 * _sign_alpha * (*std::min_element(val_ptr, val_ptr + _n_samp, [this](double x1, double x2){return x1 * _sign_alpha < x2 * _sign_alpha;})) + 1e-10);
params[1] = std::max(
0.0,
1e-10 - 1.0 * _sign_alpha * (
*std::min_element(val_ptr, val_ptr + _n_samp, [params](double v1, double v2){return params[0] * v1 < params[0] * v2;})
)
);
}
void LogParamNode::update_postfix(std::string& cur_expr, const bool add_params) const
......
0% Loading or .
You are about to add 0 people to the discussion. Proceed with caution.
Please register or to comment