42 using namespace Gecode;
54 _w(
"w",
"number of weeks",9),
55 _g(
"g",
"number of groups",8),
56 _s(
"s",
"number of players per group",4) {
62 int w(
void)
const {
return _w.
value(); }
64 int g(
void)
const {
return _g.
value(); }
66 int s(
void)
const {
return _s.value(); }
104 groups(*this,g*w,
IntSet::empty,0,g*s-1,
105 static_cast<unsigned int>(s),static_cast<unsigned int>(s)) {
109 SetVar allPlayers(*
this, 0,g*s-1, 0,g*s-1);
110 for (
int i=0;
i<w;
i++)
114 if (
opt.propagation() == PROP_SET ||
opt.propagation() == PROP_MIXED) {
116 for (
int i=0;
i<groups.
size()-1;
i++)
117 for (
int j=
i+1; j<groups.
size(); j++)
120 if (
opt.propagation() == PROP_INT ||
opt.propagation() == PROP_MIXED) {
123 int playerCount = g * s;
126 for (
int p1=0; p1<playerCount-1; p1++)
127 for (
int p2=p1+1; p2<playerCount; p2++)
128 ts.
add({p1, p2, pairCount++});
133 for (
int i=0;
i<groups.
size()-1;
i++) {
139 for (
int p1=0; p1<group.
size()-1; ++p1) {
140 for (
int p2=p1+1; p2<group.
size(); ++p2) {
141 IntVar pair(*
this, 0, pairCount);
144 args << group[p1] << group[p2] << pair;
156 if (
opt.model() == MODEL_SYMMETRY) {
167 for (
int j=0; j<w; j++) {
168 for (
int p=0;
p < g*s;
p++) {
170 for (
int i=0;
i<g;
i++)
177 for (
int j=0; j<w; j++) {
179 for (
int i=0;
i<g;
i++)
188 for (
int i=0;
i<w;
i++)
203 os <<
"Tournament plan" << std::endl;
205 for (
int j=0; j<w; j++) {
206 os <<
"Week " << j <<
": " << std::endl <<
" ";
207 os << schedule.
row(j) << std::endl;
218 return new Golf(*
this);
238 Script::run<Golf,DFS,GolfOptions>(
opt);
struct Gecode::@602::NNF::@65::@66 b
For binary nodes (and, or, eqv)
int p
Number of positive literals for node type.
BoolVar expr(Home home, const BoolExpr &e, const IntPropLevels &ipls)
Post Boolean expression and return its value.
int size(void) const
Return size of array (number of elements)
void parse(int &argc, char *argv[])
Parse options from arguments argv (number is argc)
Passing Boolean variables.
void value(int v)
Set default value to v.
Parametric base-class for scripts.
static IntArgs create(int n, int start, int inc=1)
Allocate array with n elements such that for all .
Passing integer variables.
Matrix-interface for arrays.
Slice< A > row(int r) const
Access row r.
void propagation(int v)
Set default propagation value.
void solutions(unsigned int n)
Set default number of solutions to search for.
void ipl(IntPropLevel i)
Set default integer propagation level.
void model(int v)
Set default model value.
Class represeting a set of tuples.
TupleSet & add(const IntArgs &t)
Add tuple t to tuple set.
void finalize(void)
Finalize tuple set.
int size(void) const
Return size of array (number of elements)
void update(Space &home, VarArray< Var > &a)
Update array to be a clone of array a.
int g(void) const
Return number of groups.
int s(void) const
Return number of players per group.
GolfOptions(void)
Constructor.
int w(void) const
Return number of weeks.
int main(int argc, char *argv[])
Main-function.
@ MODEL_PLAIN
A simple model.
@ MODEL_SYMMETRY
Model with symmetry breaking.
virtual void print(std::ostream &os) const
Print solution.
int g
Number of groups in a week.
virtual Space * copy(void)
Copy during cloning.
int s
Number of players in a group.
SetVarArray groups
The sets representing the groups.
@ PROP_MIXED
Propagation of pair play amount using both set and int variables.
@ PROP_SET
Propagation of pair play amount using set variables.
@ PROP_INT
Propagation of pair play amount using int variables and distinct.
Golf(const GolfOptions &opt)
Actual model.
Golf(Golf &s)
Constructor for copying s.
void distinct(Home home, const IntVarArgs &x, IntPropLevel ipl)
Post propagator for for all .
void channelSorted(Home home, const IntVarArgs &x, SetVar y)
void linear(Home home, const FloatVarArgs &x, FloatRelType frt, FloatVal c)
Post propagator for .
void rel(Home home, FloatVar x0, FloatRelType frt, FloatVal n)
Propagates .
void extensional(Home home, const IntVarArgs &x, DFA dfa, IntPropLevel)
Post domain consistent propagator for extensional constraint described by a DFA.
void precede(Home home, const IntVarArgs &x, int s, int t, IntPropLevel)
Post propagator that s precedes t in x.
@ IPL_DOM
Domain propagation Options: basic versus advanced propagation.
const FloatNum min
Smallest allowed float value.
Gecode::IntArgs i({1, 2, 3, 4})
SetExpr setdunion(const SetVarArgs &x)
Disjoint union of set variables.
SetExpr singleton(const LinIntExpr &e)
Singleton expression.
LinIntExpr cardinality(const SetExpr &e)
Cardinality of set expression.
SetValBranch SET_VAL_MIN_INC(void)
SetVarBranch SET_VAR_MIN_MIN(BranchTbl tbl)