1#ifndef FSTSEARCHBRANCHANDBOUNDIMPROVED_H
2#define FSTSEARCHBRANCHANDBOUNDIMPROVED_H
111template<
class RETURNTYPE,
typename DIMTYPE,
class SUBSET,
class CRITERION>
126 virtual std::ostream&
print(std::ostream& os)
const override {
128 else os <<
"Improved Branch & Bound (IBB) [Search_Branch_And_Bound_Improved()]";
140template<
class RETURNTYPE,
typename DIMTYPE,
class SUBSET,
class CRITERION>
149 typename parent::EVALUATORENGINE::ResultCallback on_result=[
this](
const RETURNTYPE value,
const PSubset&,
const DIMTYPE feat) {
153 avail->
type=parent::COMPUTED;
160 assert(currentset->selected_raw(avail->
feature));
161 currentset->deselect_raw(avail->
feature);
163 currentset->select_raw(avail->
feature);
173template<
class RETURNTYPE,
typename DIMTYPE,
class SUBSET,
class CRITERION>
Implements Improved Branch and Bound (IBB) method, i.e., with fully computed node ordering.
Definition search_branch_and_bound_improved.hpp:112
virtual std::ostream & print(std::ostream &os) const override
writes a human-readable identification of the search and its configuration; base default writes nothi...
Definition search_branch_and_bound_improved.hpp:126
virtual bool cut_possible() override
reports whether the current node's (always computed) value fails to exceed the bound,...
Definition search_branch_and_bound_improved.hpp:174
virtual void initialize(const DIMTYPE d, const DIMTYPE n, const PCriterion crit) override
IBB keeps no structures of its own beyond the base class's tree, so there is nothing to set up.
Definition search_branch_and_bound_improved.hpp:134
parent::NodeType NodeType
UNKNOWN/RANDOM/PREDICTED/COMPUTED node-value provenance, see Search_Branch_And_Bound.
Definition search_branch_and_bound_improved.hpp:119
parent::PSubset PSubset
shared pointer to a feature subset
Definition search_branch_and_bound_improved.hpp:116
parent::PCriterion PCriterion
shared pointer to the criterion the search optimizes
Definition search_branch_and_bound_improved.hpp:115
Search_Branch_And_Bound_Improved(PEvaluatorEngine engine=PEvaluatorEngine())
engine forwarded to Search_Branch_And_Bound; defaults to sequential in-line evaluation if not supplie...
Definition search_branch_and_bound_improved.hpp:121
parent::PNode PNode
pointer to a search-tree Node, see Search_Branch_And_Bound
Definition search_branch_and_bound_improved.hpp:117
virtual void pre_evaluate_availables() override
evaluates the criterion for every available feature (one batch through the evaluation engine) so that...
Definition search_branch_and_bound_improved.hpp:141
parent::PEvaluatorEngine PEvaluatorEngine
shared pointer to the injected evaluation-strategy engine
Definition search_branch_and_bound_improved.hpp:120
Search_Branch_And_Bound< RETURNTYPE, DIMTYPE, SUBSET, CRITERION > parent
base class alias
Definition search_branch_and_bound_improved.hpp:114
virtual void post_process_tree_level() override
nothing to do: every node of the new level already carries a COMPUTED value from pre_evaluate_availab...
Definition search_branch_and_bound_improved.hpp:136
parent::Node Node
search-tree node record (feature, value, type, valid), see Search_Branch_And_Bound
Definition search_branch_and_bound_improved.hpp:118
PSubset & get_currentset()
mutable accessor for _currentset, for use by descendant B&B variants' hooks
Definition search_branch_and_bound.hpp:198
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