Generated on for Gecode by doxygen 1.17.0
minimodel.hh
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.dev>
5 * Guido Tack <tack@gecode.dev>
6 * Matthias Balzer <matthias.balzer@itwm.fraunhofer.de>
7 * Mikael Zayenz Lagerkvist <lagerkvist@gecode.dev>
8 * Vincent Barichard <Vincent.Barichard@univ-angers.fr>
9 *
10 * Contributing authors:
11 * Alexander Shepil <alexander.shepil@sap.com>
12 *
13 * Copyright:
14 * Christian Schulte, 2004
15 * Fraunhofer ITWM, 2017
16 * Guido Tack, 2004
17 * Mikael Zayenz Lagerkvist, 2005, 2026
18 * Alexander Shepil, 2024
19 * Vincent Barichard, 2012
20 *
21 * This file is part of Gecode, the generic constraint
22 * development environment:
23 * http://www.gecode.dev
24 *
25 * Permission is hereby granted, free of charge, to any person obtaining
26 * a copy of this software and associated documentation files (the
27 * "Software"), to deal in the Software without restriction, including
28 * without limitation the rights to use, copy, modify, merge, publish,
29 * distribute, sublicense, and/or sell copies of the Software, and to
30 * permit persons to whom the Software is furnished to do so, subject to
31 * the following conditions:
32 *
33 * The above copyright notice and this permission notice shall be
34 * included in all copies or substantial portions of the Software.
35 *
36 * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND,
37 * EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF
38 * MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND
39 * NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE
40 * LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION
41 * OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION
42 * WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
43 *
44 */
45
46#ifndef GECODE_MINIMODEL_HH
47#define GECODE_MINIMODEL_HH
48
49#include <gecode/kernel.hh>
50#include <gecode/int.hh>
51#ifdef GECODE_HAS_SET_VARS
52#include <gecode/set.hh>
53#endif
54#ifdef GECODE_HAS_FLOAT_VARS
55#include <gecode/float.hh>
56#endif
57
58#ifdef GECODE_HAS_FAULT_INJECTION
59#include <atomic>
60#endif
61
62#include <iostream>
63
64/*
65 * Support for DLLs under Windows
66 *
67 */
68
69#if !defined(GECODE_STATIC_LIBS) && \
70 (defined(__CYGWIN__) || defined(__MINGW32__) || defined(_MSC_VER))
71
72#ifdef GECODE_BUILD_MINIMODEL
73#define GECODE_MINIMODEL_EXPORT __declspec( dllexport )
74#else
75#define GECODE_MINIMODEL_EXPORT __declspec( dllimport )
76#endif
77
78#else
79
80#ifdef GECODE_GCC_HAS_CLASS_VISIBILITY
81
82#define GECODE_MINIMODEL_EXPORT __attribute__ ((visibility("default")))
83
84#else
85
86#define GECODE_MINIMODEL_EXPORT
87
88#endif
89#endif
90
91// Configure auto-linking
92#ifndef GECODE_BUILD_MINIMODEL
93#define GECODE_LIBRARY_NAME "MiniModel"
95#endif
96
97namespace Gecode {
98
100 namespace MiniModel {}
101
102}
103
105
106namespace Gecode {
107
110 protected:
127 public:
130
132 IntPropLevel linear2(void) const;
136 IntPropLevel linear(void) const;
139
141 IntPropLevel abs(void) const;
144
146 IntPropLevel max2(void) const;
150 IntPropLevel max(void) const;
154 IntPropLevel min2(void) const;
158 IntPropLevel min(void) const;
161
163 IntPropLevel mult(void) const;
167 IntPropLevel div(void) const;
171 IntPropLevel mod(void) const;
174
176 IntPropLevel sqr(void) const;
180 IntPropLevel sqrt(void) const;
183
185 IntPropLevel pow(void) const;
189 IntPropLevel nroot(void) const;
192
194 IntPropLevel element(void) const;
197
199 IntPropLevel ite(void) const;
202
205 static const IntPropLevels def;
206 };
207
208}
209
211
212namespace Gecode {
213
214 class LinIntRel;
215#ifdef GECODE_HAS_SET_VARS
216 class SetExpr;
217#endif
218#ifdef GECODE_HAS_FLOAT_VARS
219 class LinFloatExpr;
220#endif
221
224 public:
226 virtual IntVar post(Home home, IntVar* ret,
227 const IntPropLevels& ipls) const = 0;
229 virtual void post(Home home, IntRelType irt, int c,
230 const IntPropLevels& ipls) const = 0;
232 virtual void post(Home home, IntRelType irt, int c,
233 BoolVar b, const IntPropLevels& ipls) const = 0;
235 virtual ~NonLinIntExpr(void);
237 static IntVar result(Home home, IntVar* x);
239 static IntVar result(Home home, IntVar* x, IntVar y);
241 void* operator new(size_t s);
243 void operator delete(void* p, size_t s);
244 };
245
246}
247
249
250namespace Gecode {
251
252 namespace MiniModel {
253 class ArithNonLinIntExpr;
254 }
255
257 class LinIntExpr {
258 friend class LinIntRel;
259 friend class MiniModel::ArithNonLinIntExpr;
260#ifdef GECODE_HAS_SET_VARS
261 friend class SetExpr;
262#endif
263#ifdef GECODE_HAS_FLOAT_VARS
264 friend class LinFloatExpr;
265#endif
266 public:
279 private:
281 struct NoNode {};
283 class Node;
285 Node* n;
287 LinIntExpr(NoNode);
288 public:
292#ifdef GECODE_HAS_FAULT_INJECTION
294 GECODE_MINIMODEL_EXPORT static void fault_reset_allocations(void);
296 GECODE_MINIMODEL_EXPORT static int fault_live_allocations(void);
297#endif
303 LinIntExpr(const IntVar& x, int a=1);
306 LinIntExpr(const BoolVar& x, int a=1);
309 explicit LinIntExpr(const IntVarArgs& x);
312 LinIntExpr(const IntArgs& a, const IntVarArgs& x);
315 explicit LinIntExpr(const BoolVarArgs& x);
318 LinIntExpr(const IntArgs& a, const BoolVarArgs& x);
321 LinIntExpr(const LinIntExpr& e);
324 LinIntExpr(const LinIntExpr& e0, NodeType t, const LinIntExpr& e1);
327 LinIntExpr(const LinIntExpr& e0, NodeType t, int c);
330 LinIntExpr(int a, const LinIntExpr& e);
336 const LinIntExpr& operator =(const LinIntExpr& e);
339 void post(Home home, IntRelType irt, const IntPropLevels& ipls) const;
342 void post(Home home, IntRelType irt, const BoolVar& b,
343 const IntPropLevels& ipls) const;
346 IntVar post(Home home, const IntPropLevels& ipls) const;
349 NonLinIntExpr* nle(void) const;
353 };
354
355 class BoolExpr;
356
358 class LinIntRel {
359 friend class BoolExpr;
360 private:
362 LinIntExpr e;
364 IntRelType irt;
366 static IntRelType neg(IntRelType irt);
368 LinIntRel(void);
369 public:
371 LinIntRel(const LinIntExpr& l, IntRelType irt, const LinIntExpr& r);
373 LinIntRel(const LinIntExpr& l, IntRelType irt, int r);
375 LinIntRel(int l, IntRelType irt, const LinIntExpr& r);
377 void post(Home home, bool t, const IntPropLevels& ipls) const;
379 void post(Home home, const BoolVar& b, bool t, const IntPropLevels& ipls) const;
380 };
381
398
400
402 operator +(int, const IntVar&);
405 operator +(int, const BoolVar&);
408 operator +(int, const LinIntExpr&);
411 operator +(const IntVar&, int);
414 operator +(const BoolVar&, int);
417 operator +(const LinIntExpr&, int);
420 operator +(const IntVar&, const IntVar&);
423 operator +(const IntVar&, const BoolVar&);
426 operator +(const BoolVar&, const IntVar&);
429 operator +(const BoolVar&, const BoolVar&);
432 operator +(const IntVar&, const LinIntExpr&);
438 operator +(const LinIntExpr&, const IntVar&);
445
448 operator -(int, const IntVar&);
451 operator -(int, const BoolVar&);
454 operator -(int, const LinIntExpr&);
457 operator -(const IntVar&, int);
460 operator -(const BoolVar&, int);
463 operator -(const LinIntExpr&, int);
466 operator -(const IntVar&, const IntVar&);
469 operator -(const IntVar&, const BoolVar&);
472 operator -(const BoolVar&, const IntVar&);
475 operator -(const BoolVar&, const BoolVar&);
478 operator -(const IntVar&, const LinIntExpr&);
484 operator -(const LinIntExpr&, const IntVar&);
491
501
504 operator *(int, const IntVar&);
507 operator *(int, const BoolVar&);
510 operator *(const IntVar&, int);
513 operator *(const BoolVar&, int);
516 operator *(const LinIntExpr&, int);
519 operator *(int, const LinIntExpr&);
520
523 sum(const IntVarArgs& x);
526 sum(const IntArgs& a, const IntVarArgs& x);
529 sum(const BoolVarArgs& x);
532 sum(const IntArgs& a, const BoolVarArgs& x);
535 sum(const IntArgs& args);
536
539 operator ==(int l, const IntVar& r);
542 operator ==(int l, const BoolVar& r);
545 operator ==(int l, const LinIntExpr& r);
548 operator ==(const IntVar& l, int r);
551 operator ==(const BoolVar& l, int r);
554 operator ==(const LinIntExpr& l, int r);
557 operator ==(const IntVar& l, const IntVar& r);
560 operator ==(const IntVar& l, const BoolVar& r);
563 operator ==(const BoolVar& l, const IntVar& r);
566 operator ==(const BoolVar& l, const BoolVar& r);
569 operator ==(const IntVar& l, const LinIntExpr& r);
572 operator ==(const BoolVar& l, const LinIntExpr& r);
575 operator ==(const LinIntExpr& l, const IntVar& r);
578 operator ==(const LinIntExpr& l, const BoolVar& r);
581 operator ==(const LinIntExpr& l, const LinIntExpr& r);
582
585 operator !=(int l, const IntVar& r);
588 operator !=(int l, const BoolVar& r);
591 operator !=(int l, const LinIntExpr& r);
594 operator !=(const IntVar& l, int r);
597 operator !=(const BoolVar& l, int r);
600 operator !=(const LinIntExpr& l, int r);
603 operator !=(const IntVar& l, const IntVar& r);
606 operator !=(const IntVar& l, const BoolVar& r);
609 operator !=(const BoolVar& l, const IntVar& r);
612 operator !=(const BoolVar& l, const BoolVar& r);
615 operator !=(const IntVar& l, const LinIntExpr& r);
618 operator !=(const BoolVar& l, const LinIntExpr& r);
621 operator !=(const LinIntExpr& l, const IntVar& r);
624 operator !=(const LinIntExpr& l, const BoolVar& r);
627 operator !=(const LinIntExpr& l, const LinIntExpr& r);
628
631 operator <(int l, const IntVar& r);
634 operator <(int l, const BoolVar& r);
637 operator <(int l, const LinIntExpr& r);
640 operator <(const IntVar& l, int r);
643 operator <(const BoolVar& l, int r);
646 operator <(const LinIntExpr& l, int r);
649 operator <(const IntVar& l, const IntVar& r);
652 operator <(const IntVar& l, const BoolVar& r);
655 operator <(const BoolVar& l, const IntVar& r);
658 operator <(const BoolVar& l, const BoolVar& r);
661 operator <(const IntVar& l, const LinIntExpr& r);
664 operator <(const BoolVar& l, const LinIntExpr& r);
667 operator <(const LinIntExpr& l, const IntVar& r);
670 operator <(const LinIntExpr& l, const BoolVar& r);
673 operator <(const LinIntExpr& l, const LinIntExpr& r);
674
677 operator <=(int l, const IntVar& r);
680 operator <=(int l, const BoolVar& r);
683 operator <=(int l, const LinIntExpr& r);
686 operator <=(const IntVar& l, int r);
689 operator <=(const BoolVar& l, int r);
692 operator <=(const LinIntExpr& l, int r);
695 operator <=(const IntVar& l, const IntVar& r);
698 operator <=(const IntVar& l, const BoolVar& r);
701 operator <=(const BoolVar& l, const IntVar& r);
704 operator <=(const BoolVar& l, const BoolVar& r);
707 operator <=(const IntVar& l, const LinIntExpr& r);
710 operator <=(const BoolVar& l, const LinIntExpr& r);
713 operator <=(const LinIntExpr& l, const IntVar& r);
716 operator <=(const LinIntExpr& l, const BoolVar& r);
719 operator <=(const LinIntExpr& l, const LinIntExpr& r);
720
723 operator >(int l, const IntVar& r);
726 operator >(int l, const BoolVar& r);
729 operator >(int l, const LinIntExpr& r);
732 operator >(const IntVar& l, int r);
735 operator >(const BoolVar& l, int r);
738 operator >(const LinIntExpr& l, int r);
741 operator >(const IntVar& l, const IntVar& r);
744 operator >(const IntVar& l, const BoolVar& r);
747 operator >(const BoolVar& l, const IntVar& r);
750 operator >(const BoolVar& l, const BoolVar& r);
753 operator >(const IntVar& l, const LinIntExpr& r);
756 operator >(const BoolVar& l, const LinIntExpr& r);
759 operator >(const LinIntExpr& l, const IntVar& r);
762 operator >(const LinIntExpr& l, const BoolVar& r);
765 operator >(const LinIntExpr& l, const LinIntExpr& r);
766
769 operator >=(int l, const IntVar& r);
772 operator >=(int l, const BoolVar& r);
775 operator >=(int l, const LinIntExpr& r);
778 operator >=(const IntVar& l, int r);
781 operator >=(const BoolVar& l, int r);
784 operator >=(const LinIntExpr& l, int r);
787 operator >=(const IntVar& l, const IntVar& r);
790 operator >=(const IntVar& l, const BoolVar& r);
793 operator >=(const BoolVar& l, const IntVar& r);
796 operator >=(const BoolVar& l, const BoolVar& r);
799 operator >=(const IntVar& l, const LinIntExpr& r);
802 operator >=(const BoolVar& l, const LinIntExpr& r);
805 operator >=(const LinIntExpr& l, const IntVar& r);
808 operator >=(const LinIntExpr& l, const BoolVar& r);
811 operator >=(const LinIntExpr& l, const LinIntExpr& r);
813
814#ifdef GECODE_HAS_FLOAT_VARS
815
818 public:
820 virtual FloatVar post(Home home, FloatVar* ret) const = 0;
822 virtual void post(Home home, FloatRelType frt, FloatVal c) const = 0;
824 virtual void post(Home home, FloatRelType frt, FloatVal c,
825 BoolVar b) const = 0;
827 virtual ~NonLinFloatExpr(void);
829 static FloatVar result(Home home, FloatVar* x);
831 static FloatVar result(Home home, FloatVar* x, FloatVar y);
833 void* operator new(size_t s);
835 void operator delete(void* p, size_t s);
836 };
837
838}
839
841
842namespace Gecode {
843
846 friend class LinFloatRel;
847 public:
858 private:
860 class Node;
861 Node* n;
862 public:
877 explicit LinFloatExpr(const FloatVarArgs& x);
901 void post(Home home, FloatRelType frt) const;
904 void post(Home home, FloatRelType frt, const BoolVar& b) const;
907 FloatVar post(Home home) const;
910 NonLinFloatExpr* nlfe(void) const;
914 };
915
916 class BoolExpr;
917
919 class LinFloatRel {
920 friend class BoolExpr;
921 private:
923 LinFloatExpr e;
925 FloatRelType frt;
927 static FloatRelType neg(FloatRelType frt);
929 LinFloatRel(void);
930 public:
932 LinFloatRel(const LinFloatExpr& l, FloatRelType frt, const LinFloatExpr& r);
934 LinFloatRel(const LinFloatExpr& l, FloatRelType frt, FloatVal r);
936 LinFloatRel(FloatVal l, FloatRelType frt, const LinFloatExpr& r);
938 void post(Home home, bool t) const;
940 void post(Home home, const BoolVar& b, bool t) const;
941 };
942
956
958 operator +(const FloatVal&, const FloatVar&);
964 operator +(const FloatVar&, const FloatVal&);
970 operator +(const FloatVar&, const FloatVar&);
980
983 operator -(const FloatVal&, const FloatVar&);
989 operator -(const FloatVar&, const FloatVal&);
995 operator -(const FloatVar&, const FloatVar&);
1005
1012
1025
1031 sum(const FloatValArgs& a, const FloatVarArgs& x);
1032
1035 operator ==(const FloatVal& l, const FloatVar& r);
1038 operator ==(const FloatVal& l, const LinFloatExpr& r);
1041 operator ==(const FloatVar& l, const FloatVal& r);
1044 operator ==(const LinFloatExpr& l, const FloatVal& r);
1047 operator ==(const FloatVar& l, const FloatVar& r);
1050 operator ==(const FloatVar& l, const LinFloatExpr& r);
1053 operator ==(const LinFloatExpr& l, const FloatVar& r);
1057
1060 operator !=(const FloatVal& l, const FloatVar& r);
1063 operator !=(const FloatVal& l, const LinFloatExpr& r);
1066 operator !=(const FloatVar& l, const FloatVal& r);
1069 operator !=(const LinFloatExpr& l, const FloatVal& r);
1072 operator !=(const FloatVar& l, const FloatVar& r);
1075 operator !=(const FloatVar& l, const LinFloatExpr& r);
1078 operator !=(const LinFloatExpr& l, const FloatVar& r);
1082
1085 operator <(const FloatVal& l, const FloatVar& r);
1088 operator <(const FloatVal& l, const LinFloatExpr& r);
1091 operator <(const FloatVar& l, const FloatVal& r);
1094 operator <(const LinFloatExpr& l, const FloatVal& r);
1097 operator <(const FloatVar& l, const FloatVar& r);
1100 operator <(const FloatVar& l, const LinFloatExpr& r);
1103 operator <(const LinFloatExpr& l, const FloatVar& r);
1106 operator <(const LinFloatExpr& l, const LinFloatExpr& r);
1107
1110 operator <=(const FloatVal& l, const FloatVar& r);
1113 operator <=(const FloatVal& l, const LinFloatExpr& r);
1116 operator <=(const FloatVar& l, const FloatVal& r);
1119 operator <=(const LinFloatExpr& l, const FloatVal& r);
1122 operator <=(const FloatVar& l, const FloatVar& r);
1125 operator <=(const FloatVar& l, const LinFloatExpr& r);
1128 operator <=(const LinFloatExpr& l, const FloatVar& r);
1131 operator <=(const LinFloatExpr& l, const LinFloatExpr& r);
1132
1135 operator >(const FloatVal& l, const FloatVar& r);
1138 operator >(const FloatVal& l, const LinFloatExpr& r);
1141 operator >(const FloatVar& l, const FloatVal& r);
1144 operator >(const LinFloatExpr& l, const FloatVal& r);
1147 operator >(const FloatVar& l, const FloatVar& r);
1150 operator >(const FloatVar& l, const LinFloatExpr& r);
1153 operator >(const LinFloatExpr& l, const FloatVar& r);
1157
1160 operator >=(const FloatVal& l, const FloatVar& r);
1163 operator >=(const FloatVal& l, const LinFloatExpr& r);
1166 operator >=(const FloatVar& l, const FloatVal& r);
1169 operator >=(const LinFloatExpr& l, const FloatVal& r);
1172 operator >=(const FloatVar& l, const FloatVar& r);
1175 operator >=(const FloatVar& l, const LinFloatExpr& r);
1178 operator >=(const LinFloatExpr& l, const FloatVar& r);
1183#endif
1184
1185#ifdef GECODE_HAS_SET_VARS
1187 class SetExpr {
1188 public:
1199
1200 class Node;
1201 private:
1203 Node* n;
1204 public:
1206 SetExpr(void);
1209 SetExpr(const SetExpr& e);
1212 SetExpr(const SetExpr& l, NodeType t, const SetExpr& r);
1215 SetExpr(const SetVar& x);
1218 explicit SetExpr(const LinIntExpr& x);
1221 SetExpr(const IntSet& s);
1227 SetVar post(Home home) const;
1230 void post(Home home, SetRelType srt, const SetExpr& e) const;
1233 void post(Home home, BoolVar b, bool t,
1234 SetRelType srt, const SetExpr& e) const;
1237 const SetExpr& operator =(const SetExpr& e);
1241 };
1242
1245 public:
1253 SetCmpRel(const SetExpr& l, SetRelType srt, const SetExpr& r);
1254 };
1255
1257 class SetRel {
1258 private:
1260 SetExpr _e0;
1262 SetRelType _srt;
1264 SetExpr _e1;
1265 public:
1267 SetRel(void);
1269 SetRel(const SetExpr& e0, SetRelType srt, const SetExpr& e1);
1271 SetRel(const SetCmpRel& r);
1273 void post(Home home, bool t) const;
1275 void post(Home home, BoolVar b, bool t) const;
1276 };
1277
1286
1288
1296 operator &(const SetExpr&, const SetExpr&);
1299 operator |(const SetExpr&, const SetExpr&);
1302 operator +(const SetExpr&, const SetExpr&);
1305 operator -(const SetExpr&, const SetExpr&);
1306
1316
1322 min(const SetExpr&);
1325 max(const SetExpr&);
1326
1329 operator ==(const SetExpr&, const SetExpr&);
1332 operator !=(const SetExpr&, const SetExpr&);
1335 operator <=(const SetExpr&, const SetExpr&);
1338 operator <=(const SetCmpRel&, const SetExpr&);
1341 operator >=(const SetExpr&, const SetExpr&);
1347 operator ||(const SetExpr&, const SetExpr&);
1349#endif
1350
1352 class BoolExpr {
1353 public:
1366
1368 public:
1370 Misc(void);
1375 virtual void post(Home home, BoolVar b, bool neg,
1376 const IntPropLevels& ipls) = 0;
1379 };
1380
1381 class Node;
1382 private:
1384 Node* n;
1386 BoolExpr(const BoolExpr& l, NodeType t, const BoolExpr& r,
1387 bool accumulator);
1389 BoolExpr operator &&(const BoolExpr&, const BoolExpr&);
1391 BoolExpr operator ||(const BoolExpr&, const BoolExpr&);
1392 public:
1403 BoolExpr(const BoolExpr& e);
1406 BoolExpr(const BoolExpr& l, NodeType t, const BoolExpr& r);
1412 BoolExpr(const BoolExpr& e, NodeType t);
1416#ifdef GECODE_HAS_FLOAT_VARS
1420#endif
1421#ifdef GECODE_HAS_SET_VARS
1424 BoolExpr(const SetRel& rs);
1428#endif
1431 explicit BoolExpr(Misc* m);
1434 BoolVar expr(Home home, const IntPropLevels& ipls) const;
1437 void rel(Home home, const IntPropLevels& ipls) const;
1440 const BoolExpr& operator =(const BoolExpr& e);
1444 };
1445
1454
1456
1480
1492 operator <<(const BoolExpr&, const BoolExpr&);
1493
1495
1501
1503
1505 dom(const IntVar& x, int n);
1508 dom(const IntVar& x, int l, int m);
1511 dom(const IntVar& x, const IntSet& s);
1512
1513#ifdef GECODE_HAS_SET_VARS
1516 dom(const SetVar& x, SetRelType rt, int i);
1519 dom(const SetVar& x, SetRelType rt, int i, int j);
1522 dom(const SetVar& x, SetRelType rt, const IntSet& s);
1523#endif
1524
1525#ifdef GECODE_HAS_FLOAT_VARS
1528 dom(const FloatVar& x, const FloatVal& n);
1532#endif
1534
1540
1542#ifdef GECODE_HAS_SET_VARS
1545 operator ==(const SetExpr& s, const LinIntExpr& x);
1548 operator ==(const LinIntExpr& x, const SetExpr& s);
1550 BoolExpr
1551 operator ==(const LinIntExpr&, IntSet) = delete;
1553 BoolExpr
1554 operator ==(IntSet, const LinIntExpr&) = delete;
1555
1558 operator !=(const SetExpr& s, const LinIntExpr& x);
1561 operator !=(const LinIntExpr& x, const SetExpr& s);
1563 BoolExpr
1564 operator !=(const LinIntExpr&, IntSet) = delete;
1566 BoolExpr
1567 operator !=(IntSet, const LinIntExpr&) = delete;
1568
1571 operator <=(const SetExpr& s, const LinIntExpr& x);
1574 operator <=(const LinIntExpr& x, const SetExpr& s);
1577 operator <=(const LinIntExpr&, IntSet) = delete;
1580 operator <=(IntSet, const LinIntExpr&) = delete;
1581
1584 operator <(const SetExpr& s, const LinIntExpr& x);
1587 operator <(const LinIntExpr& x, const SetExpr& s);
1590 operator <(const LinIntExpr&, IntSet) = delete;
1593 operator <(IntSet, const LinIntExpr&) = delete;
1594
1597 operator >=(const SetExpr& s, const LinIntExpr& x);
1600 operator >=(const LinIntExpr& x, const SetExpr& s);
1602 BoolExpr
1603 operator >=(const LinIntExpr&, IntSet) = delete;
1605 BoolExpr
1606 operator >=(IntSet, const LinIntExpr&) = delete;
1607
1610 operator >(const SetExpr& s, const LinIntExpr& x);
1613 operator >(const LinIntExpr& x, const SetExpr& s);
1615 BoolExpr
1616 operator >(const LinIntExpr&, IntSet) = delete;
1618 BoolExpr
1619 operator >(IntSet, const LinIntExpr&) = delete;
1620#endif
1622
1629
1631 expr(Home home, const LinIntExpr& e,
1632 const IntPropLevels& ipls=IntPropLevels::def);
1633#ifdef GECODE_HAS_FLOAT_VARS
1636 expr(Home home, const LinFloatExpr& e);
1637#endif
1638#ifdef GECODE_HAS_SET_VARS
1641 expr(Home home, const SetExpr& e);
1642#endif
1645 expr(Home home, const BoolExpr& e,
1646 const IntPropLevels& ipls=IntPropLevels::def);
1649 rel(Home home, const BoolExpr& e,
1650 const IntPropLevels& ipls=IntPropLevels::def);
1652
1653}
1654
1660
1661namespace Gecode {
1662
1663 namespace MiniModel {
1664 class ExpInfo;
1665 }
1666
1673 friend class MiniModel::ExpInfo;
1674 private:
1676 class Exp;
1678 Exp* e;
1680 REG(Exp* e);
1682 std::string toString(void) const;
1683 public:
1685 REG(void);
1687 REG(int s);
1694 REG(const IntArgs& x);
1695
1697 REG(const REG& r);
1699 const REG& operator =(const REG& r);
1700
1702 REG operator +(const REG& r);
1704 REG& operator +=(const REG& r);
1706 REG operator |(const REG& r);
1708 REG& operator |=(const REG& r);
1710 REG operator *(void);
1712 REG operator +(void);
1714 REG operator ()(unsigned int n, unsigned int m);
1716 REG operator ()(unsigned int n);
1718 template<class Char, class Traits>
1719 std::basic_ostream<Char,Traits>&
1720 print(std::basic_ostream<Char,Traits>& os) const;
1722 operator DFA(void);
1724 ~REG(void);
1725 };
1726
1730 template<class Char, class Traits>
1731 std::basic_ostream<Char,Traits>&
1732 operator <<(std::basic_ostream<Char,Traits>& os, const REG& r);
1733
1734}
1735
1736#include <gecode/minimodel/reg.hpp>
1737
1738namespace Gecode {
1739
1746
1747 GECODE_MINIMODEL_EXPORT LinIntExpr
1748 operator *(const LinIntExpr& x, const LinIntExpr& y);
1751 operator /(const LinIntExpr& x, const LinIntExpr& y);
1754 operator %(const LinIntExpr& x, const LinIntExpr& y);
1757 abs(const LinIntExpr& e);
1760 min(const LinIntExpr& x, const LinIntExpr& y);
1763 min(const IntVarArgs& x);
1766 max(const LinIntExpr& x, const LinIntExpr& y);
1769 max(const IntVarArgs& x);
1772 sqr(const LinIntExpr& x);
1775 sqrt(const LinIntExpr& x);
1778 pow(const LinIntExpr& x, int n);
1781 nroot(const LinIntExpr& x, int n);
1784 element(const IntVarArgs& x, const LinIntExpr& y);
1787 element(const BoolVarArgs& x, const LinIntExpr& y);
1790 element(const IntArgs& x, const LinIntExpr& y);
1793 ite(const BoolExpr& b, const LinIntExpr& x, const LinIntExpr& y);
1795
1796#ifdef GECODE_HAS_FLOAT_VARS
1811 min(const LinFloatExpr& x, const LinFloatExpr& y);
1817 max(const LinFloatExpr& x, const LinFloatExpr& y);
1835 pow(const LinFloatExpr& x, int n);
1838 nroot(const LinFloatExpr& x, int n);
1840
1841#ifdef GECODE_HAS_MPFR
1848
1855
1862
1881#endif
1882#endif
1883
1884}
1885
1886namespace Gecode {
1887
1894
1895 BoolVar
1896 channel(Home home, IntVar x, IntPropLevel ipl=IPL_DEF);
1898 IntVar
1899 channel(Home home, BoolVar b, IntPropLevel ipl=IPL_DEF);
1900#ifdef GECODE_HAS_FLOAT_VARS
1902 IntVar
1903 channel(Home home, FloatVar f);
1904#endif
1905#ifdef GECODE_HAS_SET_VARS
1907 SetVar
1908 channel(Home home, const IntVarArgs& x, IntPropLevel ipl=IPL_DEF);
1909#endif
1911
1912}
1913
1915
1916namespace Gecode {
1917
1926
1928
1932 void
1933 atmost(Home home, const IntVarArgs& x, int n, int m,
1934 IntPropLevel ipl=IPL_DEF);
1939 void
1940 atmost(Home home, const IntVarArgs& x, IntVar y, int m,
1941 IntPropLevel ipl=IPL_DEF);
1949 void
1950 atmost(Home home, const IntVarArgs& x, const IntArgs& y, int m,
1951 IntPropLevel ipl=IPL_DEF);
1956 void
1957 atmost(Home home, const IntVarArgs& x, int n, IntVar z,
1958 IntPropLevel ipl=IPL_DEF);
1963 void
1964 atmost(Home home, const IntVarArgs& x, IntVar y, IntVar z,
1965 IntPropLevel ipl=IPL_DEF);
1973 void
1974 atmost(Home home, const IntVarArgs& x, const IntArgs& y, IntVar z,
1975 IntPropLevel ipl=IPL_DEF);
1976
1981 void
1982 atleast(Home home, const IntVarArgs& x, int n, int m,
1983 IntPropLevel ipl=IPL_DEF);
1988 void
1989 atleast(Home home, const IntVarArgs& x, IntVar y, int m,
1990 IntPropLevel ipl=IPL_DEF);
1998 void
1999 atleast(Home home, const IntVarArgs& x, const IntArgs& y, int m,
2000 IntPropLevel ipl=IPL_DEF);
2005 void
2006 atleast(Home home, const IntVarArgs& x, int n, IntVar z,
2007 IntPropLevel ipl=IPL_DEF);
2012 void
2013 atleast(Home home, const IntVarArgs& x, IntVar y, IntVar z,
2014 IntPropLevel ipl=IPL_DEF);
2022 void
2023 atleast(Home home, const IntVarArgs& x, const IntArgs& y, IntVar z,
2024 IntPropLevel ipl=IPL_DEF);
2025
2030 void
2031 exactly(Home home, const IntVarArgs& x, int n, int m,
2032 IntPropLevel ipl=IPL_DEF);
2037 void
2038 exactly(Home home, const IntVarArgs& x, IntVar y, int m,
2039 IntPropLevel ipl=IPL_DEF);
2047 void
2048 exactly(Home home, const IntVarArgs& x, const IntArgs& y, int m,
2049 IntPropLevel ipl=IPL_DEF);
2054 void
2055 exactly(Home home, const IntVarArgs& x, int n, IntVar z,
2056 IntPropLevel ipl=IPL_DEF);
2061 void
2062 exactly(Home home, const IntVarArgs& x, IntVar y, IntVar z,
2063 IntPropLevel ipl=IPL_DEF);
2071 void
2072 exactly(Home home, const IntVarArgs& x, const IntArgs& y, IntVar z,
2073 IntPropLevel ipl=IPL_DEF);
2074
2077 void
2078 lex(Home home, const IntVarArgs& x, IntRelType r, const IntVarArgs& y,
2079 IntPropLevel ipl=IPL_DEF);
2082 void
2083 lex(Home home, const BoolVarArgs& x, IntRelType r, const BoolVarArgs& y,
2084 IntPropLevel ipl=IPL_DEF);
2085
2088 void
2089 values(Home home, const IntVarArgs& x, IntSet y,
2090 IntPropLevel ipl=IPL_DEF);
2092
2093#ifdef GECODE_HAS_SET_VARS
2102
2104
2109 void
2110 channel(Home home, const IntVarArgs& x, SetVar y);
2111
2114 void
2115 range(Home home, const IntVarArgs& x, SetVar y, SetVar z);
2116
2122 void
2123 roots(Home home, const IntVarArgs& x, SetVar y, SetVar z);
2125
2126#endif
2127
2128}
2129
2131
2132namespace Gecode {
2133
2134 template<class> class Matrix;
2135
2143 template<class A>
2144 class Slice {
2145 public:
2148 private:
2149 ArgsType _r;
2150 int _fc,
2151 _tc,
2152 _fr,
2153 _tr;
2154 public:
2156 Slice(const Matrix<A>& a, int fc, int tc, int fr, int tr);
2160 Slice& reverse(void);
2162 operator ArgsType(void);
2164 operator Matrix<ArgsType>(void);
2165
2167 operator const ArgsType(void) const;
2169 operator const Matrix<ArgsType>(void) const;
2170 };
2171
2173 template<class A>
2174 typename Slice<A>::ArgsType
2175 operator+(const Slice<A>& x, const Slice<A>& y);
2176
2178 template<class A>
2179 typename Slice<A>::ArgsType
2180 operator+(const Slice<A>& x, const typename ArrayTraits<A>::ArgsType& y);
2181
2183 template<class A>
2184 typename Slice<A>::ArgsType
2185 operator+(const typename ArrayTraits<A>::ArgsType& x, const Slice<A>& y);
2186
2188 template<class A>
2189 typename Slice<A>::ArgsType
2190 operator+(const Slice<A>& x, const typename ArrayTraits<A>::ValueType& y);
2191
2193 template<class A>
2194 typename Slice<A>::ArgsType
2195 operator+(const typename ArrayTraits<A>::ValueType& x, const Slice<A>& y);
2196
2207 template<class A>
2208 class Matrix {
2209 public:
2214
2215 private:
2217 typedef typename ArrayTraits<A>::StorageType StorageType;
2218 StorageType _a;
2219 int _w;
2220 int _h;
2221
2222 public:
2235 Matrix(A a, int w, int h);
2236
2249 Matrix(A a, int n);
2250
2252 int width(void) const;
2254 int height(void) const;
2256 ArgsType const get_array(void) const;
2257
2263 ValueType& operator ()(int c, int r);
2264
2270 const ValueType& operator ()(int c, int r) const;
2271
2281 Slice<A> slice(int fc, int tc, int fr, int tr) const;
2282
2284 Slice<A> row(int r) const;
2285
2287 Slice<A> col(int c) const;
2288 };
2289
2293 template<class Char, class Traits, class A>
2294 std::basic_ostream<Char,Traits>&
2295 operator <<(std::basic_ostream<Char,Traits>& os, const Matrix<A>& m);
2296
2300 template<class Char, class Traits, class A>
2301 std::basic_ostream<Char,Traits>&
2302 operator <<(std::basic_ostream<Char,Traits>& os, const Slice<A>& s);
2303
2310 void element(Home home, const Matrix<IntArgs>& m, IntVar x, IntVar y,
2311 IntVar z, IntPropLevel ipl=IPL_DEF);
2318 void element(Home home, const Matrix<IntArgs>& m, IntVar x, IntVar y,
2326 void element(Home home, const Matrix<IntVarArgs>& m, IntVar x, IntVar y,
2327 IntVar z, IntPropLevel ipl=IPL_DEF);
2334 void element(Home home, const Matrix<BoolVarArgs>& m, IntVar x, IntVar y,
2335 BoolVar z, IntPropLevel ipln=IPL_DEF);
2336#ifdef GECODE_HAS_SET_VARS
2343 void element(Home home, const Matrix<IntSetArgs>& m, IntVar x, IntVar y,
2344 SetVar z);
2351 void element(Home home, const Matrix<SetVarArgs>& m, IntVar x, IntVar y,
2352 SetVar z);
2353#endif
2354
2358 template<class A>
2363 template<class A>
2368 template<class A>
2373 template<class A>
2380 template<class A>
2382}
2383
2386
2391namespace Gecode {
2392
2394 GECODE_MINIMODEL_EXPORT LinIntExpr
2395 sum(const Slice<IntArgs>& slice);
2398 sum(const Matrix<IntArgs>& matrix);
2399
2400}
2402
2403namespace Gecode {
2404
2413
2419 public:
2421 IntMinimizeSpace(void);
2426 virtual void constrain(const Space& best);
2428 virtual IntVar cost(void) const = 0;
2429 };
2430
2436 public:
2438 IntMaximizeSpace(void);
2443 virtual void constrain(const Space& best);
2445 virtual IntVar cost(void) const = 0;
2446 };
2447
2453 public:
2455 IntLexMinimizeSpace(void);
2460 virtual void constrain(const Space& best);
2462 virtual IntVarArgs cost(void) const = 0;
2463 };
2464
2470 public:
2472 IntLexMaximizeSpace(void);
2477 virtual void constrain(const Space& best);
2479 virtual IntVarArgs cost(void) const = 0;
2480 };
2481
2482#ifdef GECODE_HAS_FLOAT_VARS
2483
2494 protected:
2497 public:
2504 virtual void constrain(const Space& best);
2506 virtual FloatVar cost(void) const = 0;
2507 };
2508
2519 protected:
2522 public:
2529 virtual void constrain(const Space& best);
2531 virtual FloatVar cost(void) const = 0;
2532 };
2533
2534#endif
2535
2536}
2537
2539
2540#endif
2541
2542// IFDEF: GECODE_HAS_INT_VARS
2543// STATISTICS: minimodel-any
Traits of arrays in Gecode.
Definition array.hpp:94
Miscealloneous Boolean expressions.
virtual ~Misc(void)
Destructor.
Misc(void)
Default constructor.
Definition bool-expr.hpp:42
virtual void post(Home home, BoolVar b, bool neg, const IntPropLevels &ipls)=0
Boolean expressions.
BoolExpr(const SetRel &rs)
Construct expression for reified set relation.
BoolExpr(const BoolVar &x)
Construct expression for variable.
BoolExpr(const SetCmpRel &rs)
Construct expression for reified set relation.
BoolExpr(const LinFloatRel &rfl)
Construct expression for reified float relation.
BoolExpr(const BoolExpr &e)
Copy constructor.
BoolExpr(Misc *m)
Construct expression for miscellaneous Boolean expression.
NodeType
Type of Boolean expression.
@ NT_RLINFLOAT
Reified linear relation.
@ NT_AND
Conjunction.
@ NT_EQV
Equivalence.
@ NT_RLIN
Reified linear relation.
@ NT_VAR
Variable.
@ NT_OR
Disjunction.
@ NT_MISC
Other Boolean expression.
@ NT_NOT
Negation.
@ NT_RSET
Reified set relation.
BoolExpr(const BoolExpr &e, NodeType t)
Construct expression for negation.
const BoolExpr & operator=(const BoolExpr &e)
Assignment operator.
BoolExpr(const LinIntRel &rl)
Construct expression for reified linear relation.
BoolExpr(const BoolExpr &l, NodeType t, const BoolExpr &r)
Construct expression for type and subexpresssions.
BoolVar expr(Home home, const IntPropLevels &ipls) const
Post propagators for expression.
~BoolExpr(void)
Destructor.
friend BoolExpr operator&&(const BoolExpr &, const BoolExpr &)
friend BoolExpr operator||(const BoolExpr &, const BoolExpr &)
void rel(Home home, const IntPropLevels &ipls) const
Post propagators for relation.
Passing Boolean variables.
Definition int.hh:738
Boolean integer variables.
Definition int.hh:533
Deterministic finite automaton (DFA).
Definition int.hh:2203
FloatNum step
Step by which a next solution has to have lower cost.
virtual FloatVar cost(void) const =0
Return variable with current cost.
virtual void constrain(const Space &best)
Member function constraining according to cost.
FloatMaximizeSpace(FloatNum s=0.0)
Constructor with step s.
Definition optimize.hpp:80
virtual FloatVar cost(void) const =0
Return variable with current cost.
FloatMinimizeSpace(FloatNum s=0.0)
Constructor with step s.
Definition optimize.hpp:71
FloatNum step
Step by which a next solution has to have lower cost.
virtual void constrain(const Space &best)
Member function constraining according to cost.
Passing float arguments.
Definition float.hh:953
Float value type.
Definition float.hh:334
Passing float variables.
Definition float.hh:982
Float variables.
Definition float.hh:870
Base class for heap allocated objects.
Definition heap.hpp:344
Home class for posting propagators
Definition core.hpp:863
Passing integer arguments.
Definition int.hh:652
virtual IntVarArgs cost(void) const =0
Return variables with current costs.
virtual void constrain(const Space &best)
Member function constraining according to increasing costs.
IntLexMaximizeSpace(void)
Default constructor.
Definition optimize.hpp:61
virtual IntVarArgs cost(void) const =0
Return variables with current costs.
virtual void constrain(const Space &best)
Member function constraining according to decreasing costs.
IntLexMinimizeSpace(void)
Default constructor.
Definition optimize.hpp:53
virtual IntVar cost(void) const =0
Return variable with current cost.
IntMaximizeSpace(void)
Default constructor.
Definition optimize.hpp:45
virtual void constrain(const Space &best)
Member function constraining according to increasing cost.
virtual IntVar cost(void) const =0
Return variable with current cost.
virtual void constrain(const Space &best)
Member function constraining according to decreasing cost.
IntMinimizeSpace(void)
Default constructor.
Definition optimize.hpp:37
Class for specifying integer propagation levels used by minimodel.
Definition minimodel.hh:109
IntPropLevel _linear
For n-ary linear.
Definition minimodel.hh:112
IntPropLevel div(void) const
Return integer propagation level for division constraints.
Definition ipl.hpp:114
IntPropLevel element(void) const
Return integer propagation level for element constraints.
Definition ipl.hpp:164
IntPropLevel _sqr
For square.
Definition minimodel.hh:121
IntPropLevel mod(void) const
Return integer propagation level for modulo constraints.
Definition ipl.hpp:122
IntPropLevel linear(void) const
Return integer propagation level for non-binary linear constraints.
Definition ipl.hpp:55
IntPropLevel max2(void) const
Return integer propagation level for binary maximum constraints.
Definition ipl.hpp:73
IntPropLevel _mult
For multiplication.
Definition minimodel.hh:118
IntPropLevel _mod
For modulo.
Definition minimodel.hh:120
IntPropLevel ite(void) const
Return integer propagation level for if-then-else constraints.
Definition ipl.hpp:173
IntPropLevel mult(void) const
Return integer propagation level for multiplication constraints.
Definition ipl.hpp:106
IntPropLevel min(void) const
Return integer propagation level for non-binary minimum constraints.
Definition ipl.hpp:97
IntPropLevel _sqrt
For square root.
Definition minimodel.hh:122
IntPropLevel _ite
For if-then-else.
Definition minimodel.hh:126
IntPropLevel nroot(void) const
Return integer propagation level for root constraints.
Definition ipl.hpp:155
IntPropLevel abs(void) const
Return integer propagation level for absolute value constraints.
Definition ipl.hpp:64
IntPropLevel _max
For n-ary maximum.
Definition minimodel.hh:115
IntPropLevel _nroot
For root.
Definition minimodel.hh:124
IntPropLevel _pow
For power.
Definition minimodel.hh:123
IntPropLevel _element
For element.
Definition minimodel.hh:125
IntPropLevel _div
For division.
Definition minimodel.hh:119
IntPropLevel _abs
For absolute value.
Definition minimodel.hh:113
IntPropLevel sqrt(void) const
Return integer propagation level for square root constraints.
Definition ipl.hpp:139
IntPropLevels(IntPropLevel ipl=IPL_DEF)
Initialize with default propagation level.
Definition ipl.hpp:37
static const IntPropLevels def
Default propagation levels for all constraints.
Definition minimodel.hh:205
IntPropLevel linear2(void) const
Return integer propagation level for binary linear constraints.
Definition ipl.hpp:47
IntPropLevel min2(void) const
Return integer propagation level for binary minimum constraints.
Definition ipl.hpp:89
IntPropLevel _min2
For binary minimum.
Definition minimodel.hh:116
IntPropLevel pow(void) const
Return integer propagation level for power constraints.
Definition ipl.hpp:147
IntPropLevel _min
For minimum.
Definition minimodel.hh:117
IntPropLevel _linear2
For binary linear.
Definition minimodel.hh:111
IntPropLevel _max2
For binary maximum.
Definition minimodel.hh:114
IntPropLevel max(void) const
Return integer propagation level for non-binary maximum constraints.
Definition ipl.hpp:81
IntPropLevel sqr(void) const
Return integer propagation level for square constraints.
Definition ipl.hpp:131
Integer sets.
Definition int.hh:178
Passing integer variables.
Definition int.hh:680
Integer variables.
Definition int.hh:389
Float expressions
Definition minimodel.hh:845
void post(Home home, FloatRelType frt, const BoolVar &b) const
Post reified propagator.
LinFloatExpr(const LinFloatExpr &e)
Copy constructor.
LinFloatExpr(const FloatVarArgs &x)
Create sum expression.
LinFloatExpr(NonLinFloatExpr *e)
Create non-linear expression.
FloatVar post(Home home) const
Post propagator and return variable for value.
LinFloatExpr(FloatVal a, const LinFloatExpr &e)
Create expression for multiplication.
LinFloatExpr(const FloatVal &c)
Create expression for constant c.
LinFloatExpr(const LinFloatExpr &e0, NodeType t, const FloatVal &c)
Create expression for type and subexpression.
LinFloatExpr(const FloatVar &x, FloatVal a)
Create expression.
friend class LinFloatRel
Definition minimodel.hh:846
LinFloatExpr(const FloatValArgs &a, const FloatVarArgs &x)
Create sum expression.
NonLinFloatExpr * nlfe(void) const
Return non-linear expression inside, or null if not non-linear.
LinFloatExpr(void)
Default constructor.
const LinFloatExpr & operator=(const LinFloatExpr &e)
Assignment operator.
~LinFloatExpr(void)
Destructor.
void post(Home home, FloatRelType frt) const
Post propagator.
LinFloatExpr(const LinFloatExpr &e0, NodeType t, const LinFloatExpr &e1)
Create expression for type and subexpressions.
NodeType
Type of linear expression.
Definition minimodel.hh:849
@ NT_VAR
Linear term with variable.
Definition minimodel.hh:851
@ NT_CONST
Float value constant.
Definition minimodel.hh:850
@ NT_SUM
Sum of float variables.
Definition minimodel.hh:853
@ NT_NONLIN
Non-linear expression.
Definition minimodel.hh:852
@ NT_ADD
Addition of linear terms.
Definition minimodel.hh:854
@ NT_MUL
Multiplication by coefficient.
Definition minimodel.hh:856
@ NT_SUB
Subtraction of linear terms.
Definition minimodel.hh:855
LinFloatExpr(const FloatVar &x)
Create expression.
Linear relations.
Definition minimodel.hh:919
void post(Home home, bool t) const
Post propagator for relation (if t is false for negated relation).
Definition float-rel.hpp:72
friend class BoolExpr
Definition minimodel.hh:920
Linear expressions over integer variables.
Definition minimodel.hh:257
NodeType
Type of linear expression.
Definition minimodel.hh:268
@ NT_CONST
Integer constant.
Definition minimodel.hh:269
@ NT_SUB
Subtraction of linear terms.
Definition minimodel.hh:276
@ NT_SUM_BOOL
Sum of Boolean variables.
Definition minimodel.hh:274
@ NT_ADD
Addition of linear terms.
Definition minimodel.hh:275
@ NT_SUM_INT
Sum of integer variables.
Definition minimodel.hh:273
@ NT_VAR_BOOL
Linear term with Boolean variable.
Definition minimodel.hh:271
@ NT_MUL
Multiplication by coefficient.
Definition minimodel.hh:277
@ NT_NONLIN
Non-linear expression.
Definition minimodel.hh:272
@ NT_VAR_INT
Linear term with integer variable.
Definition minimodel.hh:270
LinIntExpr(const IntArgs &a, const BoolVarArgs &x)
Create sum expression.
LinIntExpr(const BoolVar &x, int a=1)
Create expression.
LinIntExpr(const LinIntExpr &e0, NodeType t, const LinIntExpr &e1)
Create expression for type and subexpressions.
LinIntExpr(void)
Default constructor.
LinIntExpr(const BoolVarArgs &x)
Create sum expression.
LinIntExpr(const IntVarArgs &x)
Create sum expression.
friend class LinFloatExpr
Definition minimodel.hh:264
LinIntExpr(const LinIntExpr &e0, NodeType t, int c)
Create expression for type and subexpression.
LinIntExpr(NonLinIntExpr *e)
Create non-linear expression.
LinIntExpr(const LinIntExpr &e)
Copy constructor.
LinIntExpr(int a, const LinIntExpr &e)
Create expression for multiplication.
LinIntExpr(const IntArgs &a, const IntVarArgs &x)
Create sum expression.
void post(Home home, IntRelType irt, const BoolVar &b, const IntPropLevels &ipls) const
Post reified propagator.
IntVar post(Home home, const IntPropLevels &ipls) const
Post propagator and return variable for value.
~LinIntExpr(void)
Destructor.
void post(Home home, IntRelType irt, const IntPropLevels &ipls) const
Post propagator.
const LinIntExpr & operator=(const LinIntExpr &e)
Assignment operator.
LinIntExpr(int c)
Create expression for constant c.
LinIntExpr(const IntVar &x, int a=1)
Create expression.
NonLinIntExpr * nle(void) const
Return non-linear expression inside, or null if not non-linear.
friend class LinIntRel
Definition minimodel.hh:258
friend class SetExpr
Definition minimodel.hh:261
Linear relations over integer variables.
Definition minimodel.hh:358
void post(Home home, bool t, const IntPropLevels &ipls) const
Post propagator for relation (if t is false for negated relation).
Definition int-rel.hpp:70
friend class BoolExpr
Definition minimodel.hh:359
Matrix-interface for arrays.
int width(void) const
Return the width of the matrix.
Definition matrix.hpp:143
ValueType & operator()(int c, int r)
Access element (c, r) of the matrix.
Definition matrix.hpp:155
Slice< A > slice(int fc, int tc, int fr, int tr) const
Access slice of the matrix.
Definition matrix.hpp:171
Slice< A > col(int c) const
Access column c.
Definition matrix.hpp:183
ArrayTraits< A >::ValueType ValueType
The type of elements of this array.
Slice< A > row(int r) const
Access row r.
Definition matrix.hpp:177
ArgsType const get_array(void) const
Return an Args-array of the contents of the matrix.
Definition matrix.hpp:149
Matrix(A a, int w, int h)
Basic constructor.
Definition matrix.hpp:127
ArrayTraits< A >::ArgsType ArgsType
The type of the Args-array type for ValueType values.
int height(void) const
Return the height of the matrix.
Definition matrix.hpp:146
Base class for non-linear float expressions.
Definition minimodel.hh:817
virtual void post(Home home, FloatRelType frt, FloatVal c) const =0
Post expression to be in relation frt with c.
static FloatVar result(Home home, FloatVar *x)
Return fresh variable if x is null, x otherwise.
virtual ~NonLinFloatExpr(void)
Destructor.
virtual void post(Home home, FloatRelType frt, FloatVal c, BoolVar b) const =0
Post reified expression to be in relation frt with c.
virtual FloatVar post(Home home, FloatVar *ret) const =0
Return variable constrained to be equal to the expression.
Base class for non-linear expressions over integer variables.
Definition minimodel.hh:223
virtual void post(Home home, IntRelType irt, int c, BoolVar b, const IntPropLevels &ipls) const =0
Post reified expression to be in relation irt with c.
static IntVar result(Home home, IntVar *x)
Return fresh variable if x is null, x otherwise.
Definition int-expr.hpp:40
virtual void post(Home home, IntRelType irt, int c, const IntPropLevels &ipls) const =0
Post expression to be in relation irt with c.
virtual IntVar post(Home home, IntVar *ret, const IntPropLevels &ipls) const =0
Return variable constrained to be equal to the expression.
virtual ~NonLinIntExpr(void)
Destructor.
Definition int-expr.hpp:37
Regular expressions over integer values.
REG(const IntArgs &x)
Initialize as alternative of integers.
~REG(void)
Destructor.
REG(int s)
Initialize as single integer s.
REG(const REG &r)
Initialize from regular expression r.
REG(void)
Initialize as empty sequence (epsilon).
Comparison relation (for two-sided comparisons).
SetRelType srt
Which relation.
SetExpr l
Left side of relation.
SetExpr r
Right side of relation.
SetCmpRel(const SetExpr &l, SetRelType srt, const SetExpr &r)
Constructor.
Definition set-rel.hpp:43
Set expressions
SetExpr(void)
Default constructor.
Definition set-expr.hpp:44
SetVar post(Home home) const
Post propagators for expression.
void post(Home home, SetRelType srt, const SetExpr &e) const
Post propagators for relation.
~SetExpr(void)
Destructor.
NodeType
Type of set expression.
@ NT_CMPL
Complement.
@ NT_INTER
Intersection.
@ NT_DUNION
Disjoint union.
@ NT_VAR
Variable.
@ NT_LEXP
Linear expression.
@ NT_CONST
Constant.
const SetExpr & operator=(const SetExpr &e)
Assignment operator.
SetExpr(const SetExpr &e)
Copy constructor.
SetExpr(const IntSet &s)
Construct expression for constant.
SetExpr(const SetVar &x)
Construct expression for variable.
SetExpr(const SetExpr &l, NodeType t, const SetExpr &r)
Construct expression for type and subexpresssions.
void post(Home home, BoolVar b, bool t, SetRelType srt, const SetExpr &e) const
Post propagators for reified relation.
SetExpr(const SetExpr &e, NodeType t)
Construct expression for negation.
SetExpr(const LinIntExpr &x)
Construct expression for integer variable.
Set relations
void post(Home home, bool t) const
Post propagators for relation (or negated relation if t is false).
Definition set-rel.hpp:58
SetRel(void)
Default constructor.
Definition set-rel.hpp:47
Passing set variables.
Definition set.hh:491
Set variables
Definition set.hh:127
A slice of a matrix.
Slice(const Matrix< A > &a, int fc, int tc, int fr, int tr)
Construct slice.
Definition matrix.hpp:43
Slice & reverse(void)
Reverses the contents of the slice, and returns a reference to it.
Definition matrix.hpp:62
ArrayTraits< A >::ArgsType ArgsType
The type of the Args-array type for ValueType values.
A reference-counted pointer to a SymmetryObject.
Definition int.hh:5601
void rel(Home home, FloatVar x0, FloatRelType frt, FloatVar x1)
Post propagator for .
void ite(Home home, BoolVar b, FloatVar x, FloatVar y, FloatVar z)
Post propagator for if-then-else constraint.
double FloatNum
Floating point number base type.
Definition float.hh:106
FloatRelType
Relation types for floats.
Definition float.hh:1075
IntRelType
Relation types for integers.
Definition int.hh:959
IntPropLevel
Propagation levels for integer propagators.
Definition int.hh:1008
@ IPL_BITS_
Number of bits required (internal).
Definition int.hh:1019
@ IPL_DEF
Simple propagation levels.
Definition int.hh:1010
Space(void)
Default constructor.
SetRelType
Common relation types for sets.
Definition set.hh:650
void print(const Search::Statistics &stat, bool restart)
Print statistics.
Definition job-shop.cpp:606
#define GECODE_MINIMODEL_EXPORT
Definition minimodel.hh:86
Minimalistic modeling support.
Definition minimodel.hh:100
Gecode toplevel namespace
FloatVal operator/(const FloatVal &x, const FloatVal &y)
Definition val.hpp:230
void lex(Home home, const IntVarArgs &x, IntRelType r, const IntVarArgs &y, IntPropLevel ipl=IPL_DEF)
Post lexical order between x and y.
Definition aliases.hpp:132
FloatVal operator-(const FloatVal &x)
Definition val.hpp:185
bool operator<=(const FloatVal &x, const FloatVal &y)
Definition val.hpp:260
void sin(Home home, FloatVar x0, FloatVar x1)
Post propagator for .
FloatVal operator+(const FloatVal &x)
Definition val.hpp:181
SymmetryHandle rows_reflect(const Matrix< A > &m)
Reflect rows symmetry specification.
Definition ldsb.hpp:62
void channel(Home home, FloatVar x0, IntVar x1)
Post propagator for channeling a float and an integer variable .
void atmost(Home home, const IntVarArgs &x, int n, int m, IntPropLevel ipl=IPL_DEF)
Post constraint .
Definition aliases.hpp:39
SetRel operator||(const SetExpr &, const SetExpr &)
Disjointness of set expressions.
void sqr(Home home, FloatVar x0, FloatVar x1)
Post propagator for .
IntVar expr(Home home, const LinIntExpr &e, const IntPropLevels &ipls=IntPropLevels::def)
Post linear expression and return its value.
SetExpr operator&(const SetExpr &, const SetExpr &)
Intersection of set expressions.
Archive & operator<<(Archive &e, FloatNumBranch nl)
Definition val-sel.hpp:39
void atleast(Home home, const IntVarArgs &x, int n, int m, IntPropLevel ipl=IPL_DEF)
Post constraint .
Definition aliases.hpp:70
void cos(Home home, FloatVar x0, FloatVar x1)
Post propagator for .
void min(Home home, FloatVar x0, FloatVar x1, FloatVar x2)
Post propagator for .
IntRelType neg(IntRelType irt)
Return negated relation type of irt.
Definition irt.hpp:52
void dom(Home home, FloatVar x, FloatVal n)
Propagates .
void abs(Home home, FloatVar x0, FloatVar x1)
Post propagator for .
bool operator<(const FloatVal &x, const FloatVal &y)
Definition val.hpp:243
void element(Home home, IntSharedArray n, IntVar x0, IntVar x1, IntPropLevel ipl=IPL_DEF)
Post domain consistent propagator for .
SetExpr inter(const SetVarArgs &)
Intersection of set variables.
BoolExpr operator!(const BoolExpr &)
Negated Boolean expression.
BoolExpr operator^(const BoolExpr &, const BoolExpr &)
Exclusive-or of Boolean expressions.
void range(Home home, const IntVarArgs &x, SetVar y, SetVar z)
Post constraint .
Definition aliases.hpp:158
void roots(Home home, const IntVarArgs &x, SetVar y, SetVar z)
Post constraint .
Definition aliases.hpp:163
void sqrt(Home home, FloatVar x0, FloatVar x1)
Post propagator for .
void values(Home home, const IntVarArgs &x, IntSet y, IntPropLevel ipl=IPL_DEF)
Post constraint .
Definition aliases.hpp:143
void acos(Home home, FloatVar x0, FloatVar x1)
Post propagator for .
SymmetryHandle columns_reflect(const Matrix< A > &m)
Reflect columns symmetry specification.
Definition ldsb.hpp:85
bool operator>(const FloatVal &x, const FloatVal &y)
Definition val.hpp:277
BoolExpr operator&&(const BoolExpr &, const BoolExpr &)
void log(Home home, FloatVar x0, FloatVar x1)
Post propagator for .
bool operator>=(const FloatVal &x, const FloatVal &y)
Definition val.hpp:294
SetExpr setdunion(const SetVarArgs &)
Disjoint union of set variables.
SymmetryHandle rows_interchange(const Matrix< A > &m)
Interchangeable rows symmetry specification.
Definition ldsb.hpp:40
LinIntExpr sum(const IntVarArgs &x)
Construct linear expression as sum of integer variables.
void exactly(Home home, const IntVarArgs &x, int n, int m, IntPropLevel ipl=IPL_DEF)
Post constraint .
Definition aliases.hpp:101
SetExpr setunion(const SetVarArgs &)
Union of set variables.
SetExpr singleton(const LinIntExpr &)
Singleton expression.
void exp(Home home, FloatVar x0, FloatVar x1)
Post propagator for .
void atan(Home home, FloatVar x0, FloatVar x1)
Post propagator for .
void max(Home home, FloatVar x0, FloatVar x1, FloatVar x2)
Post propagator for .
Archive & operator>>(Archive &e, FloatNumBranch &nl)
Definition val-sel.hpp:44
void asin(Home home, FloatVar x0, FloatVar x1)
Post propagator for .
SetExpr operator|(const SetExpr &, const SetExpr &)
Union of set expressions.
void pow(Home home, FloatVar x0, int n, FloatVar x1)
Post propagator for for .
LinIntExpr cardinality(const SetExpr &)
Cardinality of set expression.
FloatVal operator*(const FloatVal &x, const FloatVal &y)
Definition val.hpp:217
SymmetryHandle diagonal_reflect(const Matrix< A > &m)
Reflect around main diagonal symmetry specification.
Definition ldsb.hpp:108
void nroot(Home home, FloatVar x0, int n, FloatVar x1)
Post propagator for for .
bool operator==(const FloatVal &x, const FloatVal &y)
Definition val.hpp:311
LinIntExpr operator%(const LinIntExpr &x, const LinIntExpr &y)
Return expression for .
bool operator!=(const FloatVal &x, const FloatVal &y)
Definition val.hpp:334
SymmetryHandle columns_interchange(const Matrix< A > &m)
Interchangeable columns symmetry specification.
Definition ldsb.hpp:51
void tan(Home home, FloatVar x0, FloatVar x1)
Post propagator for .
#define GECODE_VTABLE_EXPORT
Definition support.hh:76