39 template<
typename LOSSFUNC,
typename PARAM,
typename BOX=PARAM>
requires concepts::lossfunction<LOSSFUNC> && concepts::parameter<PARAM> && concepts::parameter<BOX>
56 compass(LOSSFUNC& lossfunc, PARAM& param,
const BOX& lower=BOX(),
const BOX& upper=BOX(),
57 Scalar tolerance=Constants::Epsilon(), Scalar stepSize=1.0, Scalar contraction=0.5, Scalar expansion=1.0, Mask mask=
true) :
66 for(Scalar i=1; i <= std::size(param); ++i)
88 auto probe = [&](
auto cardinal, Mask mask=
true)
90 mask &= (cardinal != 0);
91 auto index = bbm::cast<index_t<Value>>( bbm::abs(cardinal) - 1 );
100 if(bbm::none(optimize))
return 0;
109 probe(cardinal, optimize);
112 Mask in_box = optimize;
115 multirange_for([&](
const auto& param,
const auto& lower,
const auto& upper)
117 in_box &= (param >= lower) && (param <= upper);
129 probe(-cardinal, optimize);
134 probe(best, optimize);
LOSS implementation of a loss function.
Definition: loss.h:29
optimization_algorithm concept
Definition: optimization_algorithm.h:25
#define BBM_CHECK_CONCEPT(CONCEPTNAME, CLASSNAME,...)
Check a class for a concept with bbm::concepts::archetypes in the namespace.
Definition: macro.h:35
Definition: aggregatebsdf.h:29
constexpr auto select(MASK &&mask, const A &a, const A &b)
Definition: backbone.h:255
void multirange_for(FUNC &&func, Ts &&... containers)
ranged for loop over multiple containers at once
Definition: multirange_for.h:43
void set(C &&container, const Index &idx, Value &&value, const index_mask_t< Index > &mask=true)
Generalization of backbone::set to include tuples/named/reflection-supported objects.
Definition: backbone.h:352
decltype(auto) value(T &&t)
return the value of an attribute, or if not an attribute the object
Definition: attribute_value.h:20
Optimization algorithm interface contract.
Concepts related to BSDF model parameters.
Compass Search.
Definition: compass.h:41
Scalar _initialStep
Definition: compass.h:178
Scalar _expansion
Definition: compass.h:181
Value _step
Definition: compass.h:173
void reset(void)
reset the step size
Definition: compass.h:145
Scalar _tolerance
Definition: compass.h:179
Scalar _contraction
Definition: compass.h:180
Value _lossValue
Definition: compass.h:174
BOX _lower
Definition: compass.h:170
Mask _mask
Definition: compass.h:182
std::vector< Scalar > _directions
Definition: compass.h:177
BBM_IMPORT_CONFIG(LOSSFUNC)
PARAM & _param
Definition: compass.h:169
LOSSFUNC & _lossfunc
Definition: compass.h:168
Value step(void)
probe each cardinal direction, and update the parameters to the one with the lowest loss.
Definition: compass.h:82
BOX _upper
Definition: compass.h:170
compass(LOSSFUNC &lossfunc, PARAM ¶m, const BOX &lower=BOX(), const BOX &upper=BOX(), Scalar tolerance=Constants::Epsilon(), Scalar stepSize=1.0, Scalar contraction=0.5, Scalar expansion=1.0, Mask mask=true)
Constructor: compass search.
Definition: compass.h:56
Mask is_converged(void) const
is_converged when _step < _tolerance
Definition: compass.h:158