Symmetry-breaking brancher with generic view and value selection. More...
#include <ldsb.hh>
Public Types | |
typedef void(* | VarValPrint) (const Space &home, const BrancherHandle &bh, unsigned int b, typename View::VarType x, int i, const Val &m, std::ostream &o) |
Function type for printing variable and value selection. More... | |
Public Member Functions | |
LDSBSetBrancher (Space &home, bool share, LDSBSetBrancher &b) | |
Constructor for cloning b. More... | |
LDSBSetBrancher (Home home, ViewArray< View > &x, ViewSel< View > *vs[n], ValSelCommitBase< View, Val > *vsc, SymmetryImp< View > **syms, int nsyms, SetBranchFilter bf, VarValPrint vvp) | |
Constructor for creation. More... | |
virtual const Choice * | choice (Space &home) |
Return choice. More... | |
virtual ExecStatus | commit (Space &home, const Choice &c, unsigned int b) |
Perform commit for choice c and alternative b. More... | |
virtual Actor * | copy (Space &home, bool share) |
Perform cloning. More... | |
void | updatePart1 (Space &home, int choicePos) |
Part one of the update phase. More... | |
![]() | |
virtual const Choice * | choice (const Space &home, Archive &e) |
Return choice. More... | |
virtual size_t | dispose (Space &home) |
Delete brancher and return its size. More... | |
![]() | |
virtual NGL * | ngl (Space &home, const Choice &c, unsigned int b) const |
Create no-good literal for choice c and alternative b. More... | |
virtual void | print (const Space &home, const Choice &c, unsigned int b, std::ostream &o) const |
Print branch for choice c and alternative b. More... | |
![]() | |
virtual bool | status (const Space &home) const |
Check status of brancher, return true if alternatives left. More... | |
![]() | |
unsigned int | id (void) const |
Return unsigned brancher id. More... | |
![]() |
Static Public Member Functions | |
static BrancherHandle | post (Home home, ViewArray< View > &x, ViewSel< View > *vs[n], ValSelCommitBase< View, Val > *vsc, SymmetryImp< View > **_syms, int _nsyms, SetBranchFilter bf, VarValPrint vvp) |
Brancher post function. More... | |
![]() | |
static BrancherHandle | post (Home home, ViewArray< View > &x, ViewSel< View > *vs[n], ValSelCommitBase< View, Val > *vsc, SymmetryImp< View > **syms, int nsyms, BranchFilter bf, VarValPrint vvp) |
Brancher post function. More... | |
![]() | |
static BrancherHandle | post (Home home, ViewArray< View > &x, ViewSel< View > *vs[n], ValSelCommitBase< View, Val > *vsc, BranchFilter bf, VarValPrint vvp) |
Brancher post function. More... | |
![]() | |
static void * | operator new (size_t s, Space &home) |
Allocate memory from space. More... | |
static void | operator delete (void *p, Space &home) |
No-op for exceptions. More... | |
Public Attributes | |
int | _prevPos |
Position of previous variable that was branched on. More... | |
int | _nNonValueSymmetries |
Number of non-value symmetries. More... | |
int | _nValueSymmetries |
Number of value symmetries. More... | |
ValueSymmetryImp< View > ** | _copiedSyms |
Copy of value symmetries from the first node where the current variable was branched on. More... | |
int | _nCopiedSyms |
Number of copied symmetries. More... | |
IntSet | _leftBranchValues |
Set of values used on left branches for the current variable. More... | |
bool | _stable |
Is the state of the brancher "stable"? More... | |
![]() | |
SymmetryImp< View > ** | _syms |
Array of symmetry implementations. More... | |
int | _nsyms |
Number of symmetry implementations. More... | |
int | _prevPos |
Additional Inherited Members | |
![]() | |
typedef void(* | VarValPrint) (const Space &home, const BrancherHandle &bh, unsigned int b, typename View::VarType x, int i, const Val &m, std::ostream &o) |
Function type for printing variable and value selection. More... | |
![]() | |
typedef void(* | VarValPrint) (const Space &home, const BrancherHandle &bh, unsigned int b, typename View::VarType x, int i, const Val &m, std::ostream &o) |
Function type for printing variable and value selection. More... | |
![]() | |
typedef BranchTraits< typename View::VarType >::Filter | BranchFilter |
The branch filter that corresponds to the var type. More... | |
![]() | |
LDSBBrancher (Space &home, bool share, LDSBBrancher &b) | |
Constructor for cloning b. More... | |
LDSBBrancher (Home home, ViewArray< View > &x, ViewSel< View > *vs[n], ValSelCommitBase< View, Val > *vsc, SymmetryImp< View > **syms, int nsyms, BranchFilter bf, VarValPrint vvp) | |
Constructor for creation. More... | |
![]() | |
ViewValBrancher (Space &home, bool share, ViewValBrancher &b) | |
Constructor for cloning b. More... | |
ViewValBrancher (Home home, ViewArray< View > &x, ViewSel< View > *vs[n], ValSelCommitBase< View, Val > *vsc, BranchFilter bf, VarValPrint vvp) | |
Constructor for creation. More... | |
![]() | |
Pos | pos (Space &home) |
Return position information. More... | |
View | view (const Pos &p) const |
Return view according to position information p. More... | |
ViewBrancher (Space &home, bool shared, ViewBrancher< View, n > &b) | |
Constructor for cloning b. More... | |
ViewBrancher (Home home, ViewArray< View > &x, ViewSel< View > *vs[n], BranchFilter bf) | |
Constructor for creation. More... | |
![]() | |
Brancher (Home home) | |
Constructor for creation. More... | |
Brancher (Space &home, bool share, Brancher &b) | |
Constructor for cloning b. More... | |
![]() | |
ValSelCommitBase< View, Val > * | vsc |
Value selection and commit object. More... | |
VarValPrint | vvp |
Print function. More... | |
![]() | |
ViewArray< View > | x |
Views to branch on. More... | |
int | start |
Unassigned views start at x[start]. More... | |
ViewSel< View > * | vs [n] |
View selection objects. More... | |
BranchFilter | bf |
Branch filter function. More... | |
Symmetry-breaking brancher with generic view and value selection.
Implements view-based branching for an array of views (of type View) on set variables and value (of type Val).
typedef void(* Gecode::Set::LDSB::LDSBSetBrancher< View, n, Val, a >::VarValPrint) (const Space &home, const BrancherHandle &bh, unsigned int b, typename View::VarType x, int i, const Val &m, std::ostream &o) |
Gecode::Set::LDSB::LDSBSetBrancher< View, n, Val, a >::LDSBSetBrancher | ( | Space & | home, |
bool | share, | ||
LDSBSetBrancher< View, n, Val, a > & | b | ||
) |
Constructor for cloning b.
Definition at line 71 of file brancher.hpp.
Gecode::Set::LDSB::LDSBSetBrancher< View, n, Val, a >::LDSBSetBrancher | ( | Home | home, |
ViewArray< View > & | x, | ||
ViewSel< View > * | vs[n], | ||
ValSelCommitBase< View, Val > * | vsc, | ||
SymmetryImp< View > ** | syms, | ||
int | nsyms, | ||
SetBranchFilter | bf, | ||
VarValPrint | vvp | ||
) |
Constructor for creation.
Definition at line 42 of file brancher.hpp.
|
virtual |
Return choice.
Reimplemented from Gecode::Int::LDSB::LDSBBrancher< View, n, Val, a >.
Definition at line 180 of file brancher.hpp.
|
virtual |
Perform commit for choice c and alternative b.
Reimplemented from Gecode::Int::LDSB::LDSBBrancher< View, n, Val, a >.
Definition at line 199 of file brancher.hpp.
|
virtual |
Perform cloning.
Reimplemented from Gecode::Int::LDSB::LDSBBrancher< View, n, Val, a >.
Definition at line 241 of file brancher.hpp.
|
inlinestatic |
Brancher post function.
Definition at line 248 of file brancher.hpp.
void Gecode::Set::LDSB::LDSBSetBrancher< View, n, Val, a >::updatePart1 | ( | Space & | home, |
int | choicePos | ||
) |
Part one of the update phase.
If the branching is at a new variable, restore previously copied value symmetries, do bulk update of values used on left branches for the previous variable, and make fresh copy of resulting value symmetries.
Definition at line 133 of file brancher.hpp.
int Gecode::Set::LDSB::LDSBSetBrancher< View, n, Val, a >::_prevPos |
int Gecode::Set::LDSB::LDSBSetBrancher< View, n, Val, a >::_nNonValueSymmetries |
int Gecode::Set::LDSB::LDSBSetBrancher< View, n, Val, a >::_nValueSymmetries |
ValueSymmetryImp<View>** Gecode::Set::LDSB::LDSBSetBrancher< View, n, Val, a >::_copiedSyms |
int Gecode::Set::LDSB::LDSBSetBrancher< View, n, Val, a >::_nCopiedSyms |
IntSet Gecode::Set::LDSB::LDSBSetBrancher< View, n, Val, a >::_leftBranchValues |
bool Gecode::Set::LDSB::LDSBSetBrancher< View, n, Val, a >::_stable |
Is the state of the brancher "stable"?
The brancher is unstable if we are about to run either "choice" or "commit", but "updatePart1" has not been run. After "updatePart1" has been run the brancher is stable, until the second part of the update is done (in commit).