1#ifndef FSTSEARCHBRANCHANDBOUNDFAST_H
2#define FSTSEARCHBRANCHANDBOUNDFAST_H
114template<
class RETURNTYPE,
typename DIMTYPE,
class SUBSET,
class CRITERION,
class PREDICTOR>
133 virtual std::ostream&
print(std::ostream& os)
const override {
135 else os <<
"Fast Branch & Bound (FBB) [Search_Branch_And_Bound_Fast() with " <<
_predictor <<
"]";
143 virtual void leaf_result(
const DIMTYPE feature,
const RETURNTYPE value)
override;
149template<
class RETURNTYPE,
typename DIMTYPE,
class SUBSET,
class CRITERION,
class PREDICTOR>
160template<
class RETURNTYPE,
typename DIMTYPE,
class SUBSET,
class CRITERION,
class PREDICTOR>
179 DIMTYPE to_compute=0;
184 avail->
type=parent::PREDICTED;
186 avail->
type=parent::UNKNOWN;
190 if(to_compute==0)
return;
197 typename parent::EVALUATORENGINE::ResultCallback on_result=[
this,&parentnode](
const RETURNTYPE value,
const PSubset&,
const DIMTYPE feat) {
201 node->
type=parent::COMPUTED;
209 if(avail->
type!=parent::PREDICTED) {
210 assert(currentset->selected_raw(avail->
feature));
211 currentset->deselect_raw(avail->
feature);
213 currentset->select_raw(avail->
feature);
223template<
class RETURNTYPE,
typename DIMTYPE,
class SUBSET,
class CRITERION,
class PREDICTOR>
232 if(currentnode.
type!=parent::COMPUTED) {
236 assert(currentset->selected_raw(currentnode.
feature));
237 currentset->deselect_raw(currentnode.
feature);
239 currentset->select_raw(currentnode.
feature);
240 currentnode.
type=parent::COMPUTED;
Interface for Implementations of Prediction Mechanism in Fast Branch & Bound and Branch & Bound with ...
Implements Fast Branch and Bound, i.e., B&B with full utilization of prediction mechanism.
Definition search_branch_and_bound_fast.hpp:115
void set_delta(const unsigned int delta=1)
forwards to the PREDICTOR's set_delta() (in Branch_And_Bound_Predictor_Averaging the number of sample...
Definition search_branch_and_bound_fast.hpp:130
parent::NodeType NodeType
UNKNOWN/RANDOM/PREDICTED/COMPUTED node-value provenance, see Search_Branch_And_Bound.
Definition search_branch_and_bound_fast.hpp:122
virtual bool cut_possible() override
decides whether the sub-branch below the current node can be cut: a value above the bound rejects the...
Definition search_branch_and_bound_fast.hpp:224
virtual std::ostream & print(std::ostream &os) const override
writes the method's name, the predictor's own print() and, with a threaded engine,...
Definition search_branch_and_bound_fast.hpp:133
virtual void pre_evaluate_availables() override
orders the available features for the next tree level: each feature's value is predicted where the pr...
Definition search_branch_and_bound_fast.hpp:161
parent::PNode PNode
pointer to a search-tree Node, see Search_Branch_And_Bound
Definition search_branch_and_bound_fast.hpp:120
parent::Node Node
search-tree node record (feature, value, type, valid), see Search_Branch_And_Bound
Definition search_branch_and_bound_fast.hpp:121
PREDICTOR _predictor
the prediction mechanism instance (PREDICTOR type parameter, e.g. Branch_And_Bound_Predictor_Averagin...
Definition search_branch_and_bound_fast.hpp:139
parent::PCriterion PCriterion
shared pointer to the criterion the search optimizes
Definition search_branch_and_bound_fast.hpp:118
parent::PEvaluatorEngine PEvaluatorEngine
shared pointer to the injected evaluation-strategy engine
Definition search_branch_and_bound_fast.hpp:123
parent::PSubset PSubset
shared pointer to a feature subset
Definition search_branch_and_bound_fast.hpp:119
void set_gamma(const RETURNTYPE gamma=1.0)
forwards to the PREDICTOR's set_gamma() (in Branch_And_Bound_Predictor_Averaging the scaling factor a...
Definition search_branch_and_bound_fast.hpp:129
virtual void initialize(const DIMTYPE d, const DIMTYPE n, const PCriterion crit) override
resets the predictor's per-feature statistics before each search - nothing is carried over from a pre...
Definition search_branch_and_bound_fast.hpp:142
Search_Branch_And_Bound_Fast(PEvaluatorEngine engine=PEvaluatorEngine())
engine forwarded to Search_Branch_And_Bound; defaults to sequential in-line evaluation if not supplie...
Definition search_branch_and_bound_fast.hpp:124
virtual void post_process_tree_level() override
nothing to do: a PREDICTED node value is what makes FBB fast, and the values are turned into computed...
Definition search_branch_and_bound_fast.hpp:145
Search_Branch_And_Bound< RETURNTYPE, DIMTYPE, SUBSET, CRITERION > parent
base class alias
Definition search_branch_and_bound_fast.hpp:117
virtual void leaf_result(const DIMTYPE feature, const RETURNTYPE value) override
feeds one more observed criterion-value drop to the predictor; fired per leaf, in candidate order,...
Definition search_branch_and_bound_fast.hpp:150
PSubset & get_currentset()
mutable accessor for _currentset, for use by descendant B&B variants' hooks
Definition search_branch_and_bound.hpp:198
Node & get_parent_node()
the node one level up (_tree[k-1].back()) whose feature removal defines the branch currently being fo...
Definition search_branch_and_bound.hpp:199
Node * PNode
pointer to a Node, as used by the getFirst.../getNext... accessors below
Definition search_branch_and_bound.hpp:142
PCriterion const & get_criterion() const
accessor for _criterion, for use by descendant B&B variants' hooks
Definition search_branch_and_bound.hpp:180
Search_Branch_And_Bound(PEvaluatorEngine engine=PEvaluatorEngine())
Constructs the search, optionally injecting a candidate-evaluation engine.
Definition search_branch_and_bound.hpp:121
DIMTYPE n
no. of all features
Definition search_branch_and_bound.hpp:176
Node & get_current_node()
the node at the current level k presently being visited (_tree[k].back()), i.e. about to be tested fo...
Definition search_branch_and_bound.hpp:200
PEvaluatorEngine const & get_engine() const
accessor for the injected evaluation strategy (sequential-inline or thread-pooled),...
Definition search_branch_and_bound.hpp:181
bool getAvailable(DIMTYPE idx, PNode &avail)
direct lookup of _available[idx] by feature index, regardless of its valid flag; returns false if idx...
Definition search_branch_and_bound.hpp:195
bool getFirstAvailable(PNode &avail)
begins iteration over _available in feature-index order, skipping withdrawn (invalid) entries,...
Definition search_branch_and_bound.hpp:193
DIMTYPE d
no. of features to be selected
Definition search_branch_and_bound.hpp:177
std::shared_ptr< EVALUATORENGINE > PEvaluatorEngine
shared pointer to an EVALUATORENGINE, as accepted by the constructor and returned by get_engine()
Definition search_branch_and_bound.hpp:115
bool is_bound_valid() const
true once a valid bound has been established, see _boundvalid
Definition search_branch_and_bound.hpp:184
std::shared_ptr< SUBSET > PSubset
shared pointer to a feature subset
Definition search_branch_and_bound.hpp:113
bool getNextAvailable(PNode &avail)
advances the getFirstAvailable() iteration, again skipping invalid entries; returns false once exhaus...
Definition search_branch_and_bound.hpp:194
std::shared_ptr< CRITERION > PCriterion
shared pointer to the criterion under optimization
Definition search_branch_and_bound.hpp:112
NodeType
Marks how a Node's value was obtained: UNKNOWN = not yet assigned; RANDOM = reserved but currently un...
Definition search_branch_and_bound.hpp:134
DIMTYPE get_n() const
total number of features, see n
Definition search_branch_and_bound.hpp:187
RETURNTYPE get_bound_value() const
the current best (bound) criterion value; meaningful only once is_bound_valid()
Definition search_branch_and_bound.hpp:183
FST4 specific error passing class.
Definition error.hpp:61
FST4 specific error passing class.
The Feature Selection Toolbox 4 library: every library component – data access, criteria and classifi...
Definition data_accessor.hpp:80
void notify(const std::string msg)
Prints msg followed by a newline via syncout::print(); a no-op unless the preprocessor macro DEBUG is...
Definition global.hpp:112
Defines interface for classes that enable collecting multiple results.
Implements Branch and Bound template method as basis for more advanced B&B implementations.
Structure representing search tree node.
Definition search_branch_and_bound.hpp:136
RETURNTYPE value
the node's criterion value: exact once type==COMPUTED, an ordering estimate while type==PREDICTED,...
Definition search_branch_and_bound.hpp:138
DIMTYPE feature
the feature index this node represents removing from its ancestor set (meaningless in the single root...
Definition search_branch_and_bound.hpp:137
NodeType type
how value was obtained, see NodeType
Definition search_branch_and_bound.hpp:139