Generated on Tue Jan 28 2020 00:00:00 for Gecode by doxygen 1.8.17
linear-bool.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: 2016-05-23 22:18:23 +0200 (Mon, 23 May 2016) $ by $Author: schulte $
11  * $Revision: 15073 $
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/int/linear.hh>
39 
40 namespace Gecode {
41 
42  using namespace Int;
43 
44  void
45  linear(Home home, const BoolVarArgs& x, IntRelType irt, int c,
46  IntPropLevel ipl) {
48 
49  int n=x.size();
50  Region re(home);
52  for (int i=n; i--; ) {
53  t[i].a=1; t[i].x=x[i];
54  }
55 
56  Linear::post(home,t,n,irt,c,ipl);
57  }
58 
59  void
60  linear(Home home, const BoolVarArgs& x, IntRelType irt, IntVar y,
61  IntPropLevel ipl) {
63 
64  int n=x.size();
65  Region re(home);
67  for (int i=n; i--; ) {
68  t[i].a=1; t[i].x=x[i];
69  }
70 
71  Linear::post(home,t,n,irt,y,0,ipl);
72  }
73 
74  void
75  linear(Home home,
76  const IntArgs& a, const BoolVarArgs& x, IntRelType irt, int c,
77  IntPropLevel ipl) {
78  if (a.size() != x.size())
79  throw ArgumentSizeMismatch("Int::linear");
80 
82 
83  int n=x.size();
84  Region re(home);
86  for (int i=n; i--; ) {
87  t[i].a=a[i]; t[i].x=x[i];
88  }
89 
90  Linear::post(home,t,n,irt,c,ipl);
91  }
92 
93  void
94  linear(Home home,
95  const IntArgs& a, const BoolVarArgs& x, IntRelType irt, IntVar y,
96  IntPropLevel ipl) {
97  if (a.size() != x.size())
98  throw ArgumentSizeMismatch("Int::linear");
99 
100  GECODE_POST;
101 
102  int n=x.size();
103  Region re(home);
106  for (int i=n; i--; ) {
107  t[i].a=a[i]; t[i].x=x[i];
108  }
109  int min, max;
110  estimate(t,n,0,min,max);
111  IntView v(y);
112  switch (irt) {
113  case IRT_EQ:
114  GECODE_ME_FAIL(v.gq(home,min)); GECODE_ME_FAIL(v.lq(home,max));
115  break;
116  case IRT_GQ:
117  GECODE_ME_FAIL(v.lq(home,max));
118  break;
119  case IRT_LQ:
120  GECODE_ME_FAIL(v.gq(home,min));
121  break;
122  default: ;
123  }
124  if (home.failed()) return;
125  Linear::post(home,t,n,irt,y,0,ipl);
126  }
127 
128  void
129  linear(Home home, const BoolVarArgs& x, IntRelType irt, int c,
130  Reify r, IntPropLevel ipl) {
131  GECODE_POST;
132 
133  int n=x.size();
134  Region re(home);
136  for (int i=n; i--; ) {
137  t[i].a=1; t[i].x=x[i];
138  }
139 
140  Linear::post(home,t,n,irt,c,r,ipl);
141  }
142 
143  void
144  linear(Home home, const BoolVarArgs& x, IntRelType irt, IntVar y,
145  Reify r, IntPropLevel ipl) {
146  GECODE_POST;
147 
148  int n=x.size();
149  Region re(home);
151  for (int i=n; i--; ) {
152  t[i].a=1; t[i].x=x[i];
153  }
154 
155  Linear::post(home,t,n,irt,y,r,ipl);
156  }
157 
158  void
159  linear(Home home,
160  const IntArgs& a, const BoolVarArgs& x, IntRelType irt, int c,
161  Reify r, IntPropLevel ipl) {
162  if (a.size() != x.size())
163  throw ArgumentSizeMismatch("Int::linear");
164  GECODE_POST;
165 
166  int n=x.size();
167  Region re(home);
169  for (int i=n; i--; ) {
170  t[i].a=a[i]; t[i].x=x[i];
171  }
172 
173  Linear::post(home,t,n,irt,c,r,ipl);
174  }
175 
176  void
177  linear(Home home,
178  const IntArgs& a, const BoolVarArgs& x, IntRelType irt, IntVar y,
179  Reify r, IntPropLevel ipl) {
180  if (a.size() != x.size())
181  throw ArgumentSizeMismatch("Int::linear");
182  GECODE_POST;
183 
184  int n=x.size();
185  Region re(home);
187  for (int i=n; i--; ) {
188  t[i].a=a[i]; t[i].x=x[i];
189  }
190 
191  Linear::post(home,t,n,irt,y,r,ipl);
192  }
193 
194 }
195 
196 // STATISTICS: int-post
Post propagator for SetVar x
Definition: set.hh:784
Exception: Arguments are of different size
Definition: exception.hpp:77
IntRelType
Relation types for integers.
Definition: int.hh:906
Post propagator for SetVar SetOpType SetVar y
Definition: set.hh:784
Class for describing linear term .
Definition: linear.hh:1340
void max(Home home, FloatVar x0, FloatVar x1, FloatVar x2)
Post propagator for .
Definition: arithmetic.cpp:53
@ IRT_GQ
Greater or equal ( )
Definition: int.hh:911
Gecode::IntArgs i(4, 1, 2, 3, 4)
T * alloc(long unsigned int n)
Allocate block of n objects of type T from region.
Definition: region.hpp:326
NodeType t
Type of node.
Definition: bool-expr.cpp:234
IntPropLevel
Propagation levels for integer propagators.
Definition: int.hh:955
Gecode toplevel namespace
Reification specification.
Definition: int.hh:857
Passing Boolean variables.
Definition: int.hh:693
Home class for posting propagators
Definition: core.hpp:922
struct Gecode::@579::NNF::@61::@63 a
For atomic nodes.
Handle to region.
Definition: region.hpp:61
void estimate(Term *t, int n, FloatVal c, FloatNum &l, FloatNum &u)
Estimate lower and upper bounds.
Definition: post.cpp:49
Post propagator for SetVar SetOpType SetVar SetRelType r
Definition: set.hh:784
Integer variables.
Definition: int.hh:353
void linear(Home home, const FloatVarArgs &x, FloatRelType frt, FloatVal c)
Post propagator for .
Definition: linear.cpp:45
bool failed(void) const
Check whether corresponding space is failed.
Definition: core.hpp:4099
const int v[7]
Definition: distinct.cpp:263
#define GECODE_POST
Check for failure in a constraint post function.
Definition: macros.hpp:44
Integer view for integer variables.
Definition: view.hpp:129
#define GECODE_ME_FAIL(me)
Check whether modification event me is failed, and fail space home.
Definition: macros.hpp:81
@ IRT_EQ
Equality ( )
Definition: int.hh:907
void post(Home home, Term< BoolView > *t, int n, IntRelType irt, IntView x, int c, IntPropLevel)
Post propagator for linear constraint over Booleans.
Definition: bool-post.cpp:593
void min(Home home, FloatVar x0, FloatVar x1, FloatVar x2)
Post propagator for .
Definition: arithmetic.cpp:71
Gecode::FloatVal c(-8, 8)
int n
Number of negative literals for node type.
Definition: bool-expr.cpp:238
Passing integer arguments.
Definition: int.hh:610
@ IRT_LQ
Less or equal ( )
Definition: int.hh:909