Go to the documentation of this file.
39 namespace Gecode {
namespace Int {
namespace LDSB {
42 findVar(
int *indices,
unsigned int n_values,
unsigned int seq_size,
int index) {
45 for (
unsigned int i=0U ;
i<n_values ;
i++) {
46 if (indices[
i] == index)
47 return std::pair<int,int>(seq,
pos);
49 if (
pos == seq_size) {
54 return std::pair<int,int>(-1,-1);
60 using namespace Int::LDSB;
64 for (
int i = 0 ;
i < vars.
size() ;
i++)
65 a[
i] = vars[
i].varimp();
70 for (
int i = 0 ;
i < vars.
size() ;
i++)
71 a[
i] = vars[
i].varimp();
77 for (
int i = 0 ;
i < indices.
size() ;
i++)
78 xs[
i] =
x[indices[
i]];
92 for (
int i = 0 ;
i < vars.
size() ;
i++)
93 a[
i] = vars[
i].varimp();
98 for (
int i = 0 ;
i < vars.
size() ;
i++)
99 a[
i] = vars[
i].varimp();
107 int n = (upper-lower+1)/2;
127 namespace Gecode {
namespace Int {
namespace LDSB {
143 dynamic_cast<VariableSymmetryObject*>(s.
ref);
145 dynamic_cast<ValueSymmetryObject*>(s.
ref);
147 dynamic_cast<VariableSequenceSymmetryObject*>(s.
ref);
149 dynamic_cast<ValueSequenceSymmetryObject*>(s.
ref);
152 int* indices = home.
alloc<
int>(
n);
153 for (
int i = 0 ;
i <
n ;
i++) {
154 VariableMap::const_iterator index = variableMap.find(varref->
xs[
i]);
155 if (index == variableMap.end())
157 indices[
i] = index->second;
163 int *vs = home.
alloc<
int>(
n);
172 int n = varseqref->
nxs;
173 int* indices = home.
alloc<
int>(
n);
174 for (
int i = 0 ;
i <
n ;
i++) {
175 VariableMap::const_iterator index =
176 variableMap.find(varseqref->
xs[
i]);
177 if (index == variableMap.end())
179 indices[
i] = index->second;
186 int *vs = home.
alloc<
int>(
n);
187 for (
unsigned int i = 0 ;
i <
n ;
i++)
200 dynamic_cast<VariableSymmetryObject*>(s.
ref);
202 dynamic_cast<ValueSymmetryObject*>(s.
ref);
204 dynamic_cast<VariableSequenceSymmetryObject*>(s.
ref);
206 dynamic_cast<ValueSequenceSymmetryObject*>(s.
ref);
209 int* indices = home.
alloc<
int>(
n);
210 for (
int i = 0 ;
i <
n ;
i++) {
211 VariableMap::const_iterator index = variableMap.find(varref->
xs[
i]);
212 if (index == variableMap.end())
214 indices[
i] = index->second;
220 int *vs = home.
alloc<
int>(
n);
229 int n = varseqref->
nxs;
230 int* indices = home.
alloc<
int>(
n);
231 for (
int i = 0 ;
i <
n ;
i++) {
232 VariableMap::const_iterator index =
233 variableMap.find(varseqref->
xs[
i]);
234 if (index == variableMap.end())
236 indices[
i] = index->second;
243 int *vs = home.
alloc<
int>(
n);
244 for (
unsigned int i = 0 ;
i <
n ;
i++)
256 using namespace Int::LDSB;
265 if (home.
failed())
return;
289 for (
int i = 0 ;
i <
x.size() ;
i++)
290 variableMap[
x[
i].varimp()] =
i;
297 for (
int i = 0 ;
i <
n ;
i++) {
301 postldsbbrancher<IntView,1,int,2>
314 if (home.
failed())
return;
315 vars.
a.expand(home,
x);
319 vars.
b.expand(home,
x);
323 vars.
c.expand(home,
x);
327 vars.
d.expand(home,
x);
329 branch(home,
x,vars.
a,vals,syms,bf,vvp);
334 for (
int i = 0 ;
i <
x.size() ;
i++)
335 variableMap[
x[
i].varimp()] =
i;
342 for (
int i = 0 ;
i <
n ;
i++) {
366 postldsbbrancher<IntView,2,int,2>
390 postldsbbrancher<IntView,3,int,2>
414 postldsbbrancher<IntView,4,int,2>
429 if (home.
failed())
return;
439 for (
int i = 0 ;
i <
x.size() ;
i++)
440 variableMap[
x[
i].varimp()] =
i;
447 for (
int i = 0 ;
i <
n ;
i++) {
462 postldsbbrancher<BoolView,1,int,2>
475 if (home.
failed())
return;
476 vars.
a.expand(home,
x);
480 vars.
b.expand(home,
x);
484 vars.
c.expand(home,
x);
488 vars.
d.expand(home,
x);
490 branch(home,
x,vars.
a,vals,syms,bf,vvp);
495 for (
int i = 0 ;
i <
x.size() ;
i++)
496 variableMap[
x[
i].varimp()] =
i;
503 for (
int i = 0 ;
i <
n ;
i++) {
529 postldsbbrancher<BoolView,2,int,2>(home,xv,vs,vsc,array,
n,bf,vvp);
535 postldsbbrancher<BoolView,3,int,2>(home,xv,vs,vsc,array,
n,bf,vvp);
541 postldsbbrancher<BoolView,4,int,2>(home,xv,vs,vsc,array,
n,bf,vvp);
int seq_size
Size of each sequence in symmetry.
Post propagator for SetVar x
VarImpBase ** xs
Array of variables in symmetry.
Select the largest range of the variable domain if it has several ranges, otherwise select values gre...
Combine variable selection criteria for tie-breaking.
SymmetryHandle VariableSymmetry(const IntVarArgs &vars)
Variables in x are interchangeable.
Random (uniform, for tie breaking)
Select values not greater than mean of smallest and largest value.
IntVarBranch INT_VAR_NONE(void)
Select first unassigned variable.
IntSet values
Set of symmetric values.
VarImpBase ** xs
Array of variables in symmetry.
Passing integer variables.
SymmetryHandle ValueSequenceSymmetry(const IntArgs &vs, int ss)
Value sequences in v of size ss are interchangeable.
ViewSel< IntView > * viewsel(Space &home, const IntVarBranch &ivb)
Return view selectors for integer views.
Implementation of a value symmetry.
std::function< void(const Space &home, const Brancher &b, unsigned int a, BoolVar x, int i, const int &n, std::ostream &o)> BoolVarValPrint
Function type for printing branching alternatives for Boolean variables.
Random (uniform, for tie breaking)
Which values to select for branching first.
void branch(Home home, const FloatVarArgs &x, FloatVarBranch vars, FloatValBranch vals, FloatBranchFilter bf, FloatVarValPrint vvp)
Branch over x with variable selection vars and value selection vals.
Which integer variable to select for branching.
Select value according to user-defined functions.
Exception: Value selection incompatible with LDSB
BranchCommit commit(void) const
Return commit function.
Implementation of a variable symmetry.
unsigned int size(void) const
Return size (cardinality) of set.
Collection of symmetries.
Gecode toplevel namespace
IntArgs values
Array of values in symmetry.
Select value according to user-defined functions.
struct Gecode::@602::NNF::@65::@67 a
For atomic nodes.
SymmetryImp< BoolView > * createBoolSym(Space &home, const SymmetryHandle &s, VariableMap variableMap)
Create a boolean symmetry implementation from a symmetry handle.
Implementation of a value sequence symmetry at the modelling level.
Argument array for non-primitive types.
Which Boolean variable to select for branching.
Implementation of a variable sequence symmetry.
Passing Boolean variables.
Home class for posting propagators
SymmetryImp< IntView > * createIntSym(Space &home, const SymmetryHandle &s, VariableMap variableMap)
Create an integer symmetry implementation from a symmetry handle.
int nxs
Number of variables in symmetry.
Implementation of a variable symmetry at the modelling level.
Select values greater than mean of smallest and largest value.
Select select(void) const
Return selection strategy.
int nxs
Number of variables in symmetry.
Implementation of a value symmetry at the modelling level.
T * alloc(long unsigned int n)
Allocate block of n objects of type T from space heap.
Implementation of a value sequence symmetry.
Select all values starting from smallest.
#define GECODE_NEVER
Assert that this command is never executed.
Base class for value selection and commit.
Exception: Variable in symmetry not branched on
void expand(Home home, const IntVarArgs &x)
Expand AFC, action, and CHB.
Select the smallest range of the variable domain if it has several ranges, otherwise select values no...
bool failed(void) const
Check whether corresponding space is failed.
A reference-counted pointer to a SymmetryObject.
void expand(Home home, const BoolVarArgs &x)
Expand decay factor into AFC or action.
int size(void) const
Return size of array (number of elements)
SymmetryHandle ValueSymmetry(const IntArgs &vs)
Values in v are interchangeable.
SymmetryHandle values_reflect(int lower, int upper)
The values from lower to upper (inclusive) can be reflected.
SymmetryHandle VariableSequenceSymmetry(const IntVarArgs &vars, int ss)
Variable sequences in x of size ss are interchangeable.
std::function< bool(const Space &home, IntVar x, int i)> IntBranchFilter
Branch filter function type for integer variables.
Implementation of a variable sequence symmetry at the modelling level.
std::pair< int, int > findVar(int *indices, unsigned int n_values, unsigned int seq_size, int index)
Find the location of an integer in a collection of sequences.
Select all values starting from largest.
int seq_size
Size of each sequence in symmetry.
Map from variable implementation to index.
Int::LDSB::SymmetryObject * ref
Symmetry object that this handle refers to.
Implementation of a single symmetry.
int n
Number of negative literals for node type.
ValSelCommitBase< IntView, int > * valselcommit(Space &home, const IntValBranch &ivb)
Return value and commit for integer views.
std::function< bool(const Space &home, BoolVar x, int i)> BoolBranchFilter
Branch filter function type for Boolean variables.
Passing integer arguments.
Select select(void) const
Return selection strategy.
Value iterator for integer sets.
Gecode::IntArgs i({1, 2, 3, 4})
bool pos(const View &x)
Test whether x is postive.
BoolVarBranch BOOL_VAR_NONE(void)
Select first unassigned variable.
std::function< void(const Space &home, const Brancher &b, unsigned int a, IntVar x, int i, const int &n, std::ostream &o)> IntVarValPrint
Function type for printing branching alternatives for integer variables.
VarBranch a
Branching criteria to try in order.
Which values to select for branching first.