this repo has no description
1/* -*- mode: C++; c-basic-offset: 2; indent-tabs-mode: nil -*- */
2/*
3 * Main author:
4 * Christian Schulte <schulte@gecode.org>
5 *
6 * Copyright:
7 * Christian Schulte, 2008
8 *
9 * This file is part of Gecode, the generic constraint
10 * development environment:
11 * http://www.gecode.org
12 *
13 * Permission is hereby granted, free of charge, to any person obtaining
14 * a copy of this software and associated documentation files (the
15 * "Software"), to deal in the Software without restriction, including
16 * without limitation the rights to use, copy, modify, merge, publish,
17 * distribute, sublicense, and/or sell copies of the Software, and to
18 * permit persons to whom the Software is furnished to do so, subject to
19 * the following conditions:
20 *
21 * The above copyright notice and this permission notice shall be
22 * included in all copies or substantial portions of the Software.
23 *
24 * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND,
25 * EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF
26 * MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND
27 * NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE
28 * LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION
29 * OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION
30 * WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
31 *
32 */
33
34#include <gecode/minimodel.hh>
35
36namespace Gecode {
37
38 void
39 IntMinimizeSpace::constrain(const Space& _best) {
40 const IntMinimizeSpace* best =
41 dynamic_cast<const IntMinimizeSpace*>(&_best);
42 if (best == nullptr)
43 throw DynamicCastFailed("IntMinimizeSpace::constrain");
44 rel(*this, cost(), IRT_LE, best->cost().val());
45 }
46
47
48 void
49 IntMaximizeSpace::constrain(const Space& _best) {
50 const IntMaximizeSpace* best =
51 dynamic_cast<const IntMaximizeSpace*>(&_best);
52 if (best == nullptr)
53 throw DynamicCastFailed("IntMaximizeSpace::constrain");
54 rel(*this, cost(), IRT_GR, best->cost().val());
55 }
56
57
58 void
59 IntLexMinimizeSpace::constrain(const Space& _best) {
60 const IntLexMinimizeSpace* best =
61 dynamic_cast<const IntLexMinimizeSpace*>(&_best);
62 if (best == nullptr)
63 throw DynamicCastFailed("IntLexMinimizeSpace::constrain");
64 IntVarArgs cx(cost()), bx(best->cost());
65 IntArgs bn(bx.size());
66 for (int i=bn.size(); i--; )
67 bn[i] = bx[i].val();
68 rel(*this, cx, IRT_LE, bn);
69 }
70
71 void
72 IntLexMaximizeSpace::constrain(const Space& _best) {
73 const IntLexMaximizeSpace* best =
74 dynamic_cast<const IntLexMaximizeSpace*>(&_best);
75 if (best == nullptr)
76 throw DynamicCastFailed("IntLexMaximizeSpace::constrain");
77 IntVarArgs cx(cost()), bx(best->cost());
78 IntArgs bn(bx.size());
79 for (int i=bn.size(); i--; )
80 bn[i] = bx[i].val();
81 rel(*this, cx, IRT_GR, bn);
82 }
83
84#ifdef GECODE_HAS_FLOAT_VARS
85
86 void
87 FloatMinimizeSpace::constrain(const Space& _best) {
88 const FloatMinimizeSpace* best =
89 dynamic_cast<const FloatMinimizeSpace*>(&_best);
90 if (best == nullptr)
91 throw DynamicCastFailed("FloatMinimizeSpace::constrain");
92 rel(*this, cost(), FRT_LE, best->cost().max()-step);
93 }
94
95
96 void
97 FloatMaximizeSpace::constrain(const Space& _best) {
98 const FloatMaximizeSpace* best =
99 dynamic_cast<const FloatMaximizeSpace*>(&_best);
100 if (best == nullptr)
101 throw DynamicCastFailed("FloatMaximizeSpace::constrain");
102 rel(*this, cost(), FRT_GR, best->cost().min()+step);
103 }
104
105#endif
106
107}
108
109// STATISTICS: minimodel-search
110