main page
modules
namespaces
classes
files
Gecode home
Generated on Sat Nov 9 2013 19:18:24 for Gecode by
doxygen
1.8.4
examples
grocery.cpp
Go to the documentation of this file.
1
/* -*- mode: C++; c-basic-offset: 2; indent-tabs-mode: nil -*- */
2
/*
3
* Main authors:
4
* Christian Schulte <schulte@gecode.org>
5
*
6
* Copyright:
7
* Christian Schulte, 2001
8
*
9
* Last modified:
10
* $Date: 2013-07-08 14:22:40 +0200 (Mon, 08 Jul 2013) $ by $Author: schulte $
11
* $Revision: 13820 $
12
*
13
* This file is part of Gecode, the generic constraint
14
* development environment:
15
* http://www.gecode.org
16
*
17
* Permission is hereby granted, free of charge, to any person obtaining
18
* a copy of this software and associated documentation files (the
19
* "Software"), to deal in the Software without restriction, including
20
* without limitation the rights to use, copy, modify, merge, publish,
21
* distribute, sublicense, and/or sell copies of the Software, and to
22
* permit persons to whom the Software is furnished to do so, subject to
23
* the following conditions:
24
*
25
* The above copyright notice and this permission notice shall be
26
* included in all copies or substantial portions of the Software.
27
*
28
* THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND,
29
* EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF
30
* MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND
31
* NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE
32
* LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION
33
* OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION
34
* WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
35
*
36
*/
37
38
#include <
gecode/driver.hh
>
39
#include <
gecode/int.hh
>
40
#include <
gecode/minimodel.hh
>
41
42
using namespace
Gecode;
43
60
class
Grocery
:
public
Script
{
61
protected
:
63
IntVarArray
abcd
;
65
static
const
int
s = 711;
67
static
const
int
p
= 711 * 100 * 100 * 100;
68
public
:
70
Grocery
(
const
Options
&
opt
) : abcd(*this,4,0,s) {
71
IntVar
a
(abcd[0]),
b
(abcd[1]),
c
(abcd[2]),
d
(abcd[3]);
72
73
// The sum of all variables is s
74
rel
(*
this
,
a
+
b
+
c
+d == s, opt.
icl
());
75
76
// The product of all variables is s (corrected by scale factor)
77
rel
(*
this
, (
a
*
b
)*(
c
*d) ==
p
, opt.
icl
());
78
79
// Break symmetries: order the variables
80
rel
(*
this
, abcd,
IRT_LQ
);
81
82
branch
(*
this
, abcd,
INT_VAR_NONE
(),
INT_VAL_SPLIT_MAX
());
83
}
84
86
Grocery
(
bool
share,
Grocery
& s) :
Script
(share,s) {
87
abcd.update(*
this
, share, s.
abcd
);
88
}
89
91
virtual
Space
*
92
copy
(
bool
share) {
93
return
new
Grocery
(share,*
this
);
94
}
95
97
virtual
void
98
print
(std::ostream& os)
const
{
99
os <<
"\t"
<< abcd << std::endl;
100
}
101
};
102
106
int
107
main
(
int
argc,
char
* argv[]) {
108
Options
opt
(
"Grocery"
);
109
opt.
iterations
(20);
110
opt.
parse
(argc,argv);
111
Script::run<Grocery,DFS,Options>(
opt
);
112
return
0;
113
}
114
115
// STATISTICS: example-any
116