Aleph-w 3.0
A C++ Library for Data Structures and Algorithms
Loading...
Searching...
No Matches
Aleph::IncrementalBoundProvider Concept Reference

Concept for domains that can estimate a move's bound without modifying state (incremental bound for Branch-and-Bound ordering). More...

#include <state_search_common.H>

Concept definition

template<typename Domain>
requires(Domain &domain,
const typename Domain::State &state,
const typename Domain::Move &move) {
{ domain.bound_after(state, move) }
-> std::convertible_to<typename Domain::Objective>;
}
Concept for domains that can estimate a move's bound without modifying state (incremental bound for B...
@ Domain
Preserve the order emitted by for_each_successor().

Detailed Description

Concept for domains that can estimate a move's bound without modifying state (incremental bound for Branch-and-Bound ordering).

When a domain satisfies this concept, Aleph::Branch_And_Bound can compute ordering priorities for Estimated_Bound move ordering without calling apply()/undo() on each candidate move. This avoids O(k) apply/undo pairs per batch of k successors, which matters when the state mutation is expensive.

The expression domain.bound_after(state, move) must return a value convertible to Domain::Objective and must represent an optimistic bound on the best objective reachable by applying move to state, without altering state. The direction of the bound depends on the active ObjectivePolicy: an upper bound for Aleph::Maximize_Objective and a lower bound for Aleph::Minimize_Objective. Implementers targeting Aleph::Branch_And_Bound should ensure the returned value is consistent with the policy so that pruning remains correct.

Template Parameters
DomainBranch-and-bound domain type.

Definition at line 191 of file state_search_common.H.