Go to the documentation of this file.
53 Play(
void) : h(0),
a(0), g(0) {}
73 int gn(
int h,
int a)
const {
74 return teams*(h-1) +
a;
78 return plays[
p*weeks() + w];
106 RRS(
int t) : teams(
t), plays(new
Play[periods()*weeks()]) {
113 for (
int p=1;
p<periods();
p++) {
114 play(
p,0).h = (
p + 1) + 1;
115 play(
p,0).a = teams - (
p + 1 - 2);
116 play(
p,0).g = gn(play(
p,0).h,play(
p,0).
a);
120 for (
int w=1; w<weeks(); w++) {
121 for (
int p=0;
p<periods();
p++) {
122 if (play(
p,w-1).h == teams)
124 else if (play(
p,w-1).h == 1)
127 play(
p,w).h = play(
p,w-1).h + 1;
128 if (play(
p,w-1).
a == teams)
131 play(
p,w).a = play(
p,w-1).a + 1;
134 if (play(
p,w).h > play(
p,w).
a)
137 play(
p,w).g = gn(play(
p,w).h,play(
p,w).
a);
144 for (
int p=0;
p<periods();
p++) {
191 return home[
p*teams + w];
195 return home[
p*teams + w];
199 return away[
p*teams + w];
203 return away[
p*teams + w];
207 return game[
p*weeks() + w];
211 return game[
p*weeks() + w];
219 home(*this, periods() * teams, 1, weeks()),
220 away(*this, periods() * teams, 2, weeks()+1),
221 game(*this, weeks()*periods(), 2, teams*weeks())
227 for (
int w=0; w<weeks(); w++) {
228 IntArgs rh(periods()),
ra(periods()), rg(periods());
235 for (
int p=0;
p<periods();
p++) {
243 for (
int p=0;
p<periods();
p++)
244 for (
int w=0; w<teams; w++)
250 for (
int p=0;
p<periods();
p++)
260 for (
int w=0; w<teams; w++) {
262 for (
int p=0;
p<periods();
p++) {
263 c[2*
p] = h(
p,w);
c[2*
p+1] =
a(
p,w);
269 for (
int p=0;
p<periods();
p++) {
271 for (
int t=0;
t<teams;
t++) {
276 for (
int i=1;
i<=teams;
i++)
282 for (
int p=0;
p<periods();
p++)
283 for (
int w=0; w<weeks(); w ++)
284 rel(*
this, teams * h(
p,w) +
a(
p,w) - g(
p,w) == teams);
292 :
Script(s), teams(s.teams) {
303 virtual void print(std::ostream& os)
const {
306 for (
int p=0;
p<periods();
p++) {
313 for (
int w=0; w<weeks(); w++) {
317 for (
int p=0;
p<periods();
p++) {
319 os << h(
p,w).val() <<
'-';
321 os <<
a(
p,w).val() <<
" ";
338 if (
opt.size() < 5) {
339 std::cerr<<
"No Solution for less than 5 teams!" << std::endl;
342 if (
opt.size() % 2 != 0) {
343 std::cerr <<
"Number of teams has to be even!" << std::endl;
346 Script::run<SportsLeague, DFS,SizeOptions>(
opt);
void values(Home home, const IntVarArgs &x, IntSet y, IntPropLevel ipl)
Post constraint .
IntVar & a(int p, int w)
Away team in period p and week w.
IntVarBranch INT_VAR_NONE(void)
Select first unassigned variable.
int periods(void) const
Return number of periods.
Passing integer variables.
void element(Home home, IntSharedArray c, IntVar x0, IntVar x1, IntPropLevel)
Post domain consistent propagator for .
unsigned int size(I &i)
Size of all ranges of range iterator i.
const IntVar & h(int p, int w) const
Home team in period p and week w.
void ipl(IntPropLevel i)
Set default integer propagation level.
const int teams
number of teams
SportsLeague(SportsLeague &s)
Constructor for cloning s.
IntVar & h(int p, int w)
Home team in period p and week w.
const int teams
Number of teams.
void hag(int w, IntArgs &h, IntArgs &a, IntArgs &g)
Home, away, and game information.
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.
IntVarArray away
away teams
Gecode toplevel namespace
RRS(int t)
Build a feasible schedule.
struct Gecode::@602::NNF::@65::@67 a
For atomic nodes.
Parametric base-class for scripts.
Post propagator for SetVar SetOpType SetVar SetRelType r
Domain propagation Options: basic versus advanced propagation.
void parse(int &argc, char *argv[])
Parse options from arguments argv (number is argc)
int weeks(void) const
Return number of weeks.
IntRelType swap(IntRelType irt)
Return swapped relation type of irt.
int weeks(void) const
Return number of weeks.
IntVarArray game
game numbers
const IntVar & a(int p, int w) const
Away team in period p and week w.
virtual Space * copy(void)
Copy during cloning.
void rel(Home home, FloatVar x0, FloatRelType frt, FloatVal n)
Propagates .
void count(Home home, const IntVarArgs &x, int n, IntRelType irt, int m, IntPropLevel)
Post propagator for .
Example: Sports league scheduling
Play * plays
Play information.
Play & play(int p, int w)
Play for period p and week w.
int periods(void) const
Return number of periods.
IntVar & g(int p, int w)
Return game number for game in period p and week w.
int gn(int h, int a) const
Game number for game between home team h and away team a.
void distinct(Home home, const IntVarArgs &x, IntPropLevel ipl)
Post propagator for for all .
IntValBranch INT_VAL_SPLIT_MIN(void)
Select values not greater than mean of smallest and largest value.
Entry in round robin schedule.
Gecode::FloatVal c(-8, 8)
int n
Number of negative literals for node type.
IntVarArray home
home teams
Passing integer arguments.
SportsLeague(const SizeOptions &opt)
Setup model.
Gecode::IntArgs i({1, 2, 3, 4})
int g
game number Default constructor
const IntVar & g(int p, int w) const
Return game number for game in period p and week w.
~RRS(void)
Delete schedule.
int p
Number of positive literals for node type.
int main(int argc, char *argv[])
Main-function.
virtual void print(std::ostream &os) const
Print solution.
void update(Space &home, VarArray< Var > &a)
Update array to be a clone of array a.
Options for scripts with additional size parameter