main page
modules
namespaces
classes
files
Gecode home
Generated on Tue Oct 22 2013 00:48:58 for Gecode by
doxygen
1.8.4
examples
all-interval.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, 2006
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
#include <cstdlib>
43
44
using namespace
Gecode;
45
66
class
AllInterval
:
public
Script
{
67
private
:
69
IntVarArray
x
;
71
IntVarArray
d
;
72
public
:
74
AllInterval
(
const
SizeOptions
&
opt
) :
75
x
(*this, opt.
size
(), 0, opt.
size
()-1),
76
d
(*this, opt.
size
()-1, 1, opt.
size
()-1) {
77
const
int
n
=
x
.size();
78
79
// Set up variables for distance
80
for
(
int
i
=0;
i
<n-1;
i
++)
81
rel
(*
this
,
d
[
i
] ==
abs
(
x
[
i
+1]-
x
[
i
]), opt.
icl
());
82
83
distinct
(*
this
,
x
, opt.
icl
());
84
distinct
(*
this
,
d
, opt.
icl
());
85
86
// Break mirror symmetry
87
rel
(*
this
,
x
[0],
IRT_LE
,
x
[1]);
88
// Break symmetry of dual solution
89
rel
(*
this
,
d
[0],
IRT_GR
,
d
[n-2]);
90
91
branch
(*
this
,
x
,
INT_VAR_SIZE_MIN
(),
INT_VAL_SPLIT_MIN
());
92
}
94
AllInterval
(
bool
share,
AllInterval
& s)
95
:
Script
(share, s) {
96
x
.update(*
this
, share, s.x);
97
d
.
update
(*
this
, share, s.d);
98
}
100
virtual
Space
*
101
copy
(
bool
share) {
102
return
new
AllInterval
(share, *
this
);
103
}
105
virtual
void
106
print
(std::ostream& os)
const
{
107
const
int
n
=
x
.size();
108
os <<
"\tx["
<< n <<
"] = {"
;
109
for
(
int
i
= 0;
i
< n-1;
i
++)
110
os <<
x
[
i
] <<
"("
<<
d
[
i
] <<
"),"
;
111
os <<
x
[n-1] <<
"}"
<< std::endl;
112
}
113
};
114
115
119
int
120
main
(
int
argc,
char
* argv[]){
121
SizeOptions
opt
(
"AllInterval"
);
122
opt.
size
(1000);
123
opt.
iterations
(5);
124
opt.
icl
(
ICL_BND
);
125
opt.
parse
(argc, argv);
126
if
(opt.
size
() < 2) {
127
std::cerr <<
"size must be at least 2!"
<< std::endl;
128
return
-1;
129
}
130
Script::run<AllInterval,DFS,SizeOptions>(
opt
);
131
return
0;
132
}
133
134
// STATISTICS: example-any
135