Generated on Thu Jan 16 2025 00:00:00 for Gecode by doxygen 1.14.0
optimize.cpp
Go to the documentation of this file.
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
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
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
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
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
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().val()-step);
93 }
94
95
96 void
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().val()+step);
103 }
104
105#endif
106
107}
108
109// STATISTICS: minimodel-search
110
int size(void) const
Return size of array (number of elements)
Definition array.hpp:1613
Exception: dynamic cast failed
Definition exception.hpp:69
virtual void constrain(const Space &best)
Member function constraining according to cost.
Definition optimize.cpp:97
FloatNum step
Step by which a next solution has to have lower cost.
virtual FloatVar cost(void) const =0
Return variable with current 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.
virtual void constrain(const Space &best)
Member function constraining according to cost.
Definition optimize.cpp:87
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.
FloatVal val(void) const
Return assigned value.
Definition float.hpp:53
Passing integer arguments.
Definition int.hh:634
virtual IntVarArgs cost(void) const =0
Return variables with current costs.
IntLexMaximizeSpace(void)
Default constructor.
Definition optimize.hpp:61
virtual void constrain(const Space &best)
Member function constraining according to increasing costs.
Definition optimize.cpp:72
virtual IntVarArgs cost(void) const =0
Return variables with current costs.
virtual void constrain(const Space &best)
Member function constraining according to decreasing costs.
Definition optimize.cpp:59
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.
Definition optimize.cpp:49
virtual IntVar cost(void) const =0
Return variable with current cost.
IntMinimizeSpace(void)
Default constructor.
Definition optimize.hpp:37
virtual void constrain(const Space &best)
Member function constraining according to decreasing cost.
Definition optimize.cpp:39
Passing integer variables.
Definition int.hh:662
int val(void) const
Return assigned value.
Definition int.hpp:56
void rel(Home home, FloatVar x0, FloatRelType frt, FloatVar x1)
Post propagator for .
Definition rel.cpp:68
@ FRT_GR
Greater ( )
Definition float.hh:1080
@ FRT_LE
Less ( )
Definition float.hh:1078
@ IRT_LE
Less ( )
Definition int.hh:944
@ IRT_GR
Greater ( )
Definition int.hh:946
Space(void)
Default constructor.
Definition core.cpp:115
Gecode toplevel namespace