Generated on Tue Feb 11 2025 17:33:26 for Gecode by doxygen 1.12.0
val-commit.hpp
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 * Contributing authors:
7 * Vincent Barichard <Vincent.Barichard@univ-angers.fr>
8 *
9 * Copyright:
10 * Christian Schulte, 2012
11 * Vincent Barichard, 2012
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
38namespace Gecode { namespace Float { namespace Branch {
39
47 ValCommitLqGq::commit(Space& home, unsigned int a, FloatView x, int,
48 FloatNumBranch nl) {
49 // Should we try the smaller half first?
50 if ((a == 0) == nl.l) {
51 if ((x.min() == nl.n) || (x.max() == nl.n))
52 return x.eq(home,x.min());
53 else
54 return x.lq(home,nl.n);
55 } else {
56 if ((x.min() == nl.n) || (x.max() == nl.n))
57 return x.eq(home,x.max());
58 else
59 return x.gq(home,nl.n);
60 }
61 }
64 return NULL;
65 }
66 forceinline void
67 ValCommitLqGq::print(const Space&, unsigned int a, FloatView, int i,
69 std::ostream& o) const {
70 o << "var[" << i << "] "
71 << (((a == 0) == nl.l) ? "<=" : ">=") << "(" << nl.n << ")";
72 }
73
74}}}
75
76// STATISTICS: float-branch
77
struct Gecode::@603::NNF::@65::@67 a
For atomic nodes.
Value description class for branching.
Definition float.hh:1462
bool l
Whether to try the lower or upper half first.
Definition float.hh:1467
FloatNum n
The middle value for branching.
Definition float.hh:1465
Float value type.
Definition float.hh:334
Value commit class for less or equal or greater or equal.
Definition branch.hh:298
NGL * ngl(Space &home, unsigned int a, FloatView x, FloatNumBranch n) const
Create no-good literal for alternative a.
ModEvent commit(Space &home, unsigned int a, FloatView x, int i, FloatNumBranch n)
Commit view x at position i to value n for alternative a.
void print(const Space &home, unsigned int a, FloatView x, int i, FloatNumBranch n, std::ostream &o) const
Print on o the alternative with view x at position i and value n.
ValCommitLqGq(Space &home, const ValBranch< Var > &vb)
Constructor for initialization.
Float view for float variables.
Definition view.hpp:52
No-good literal recorded during search.
Definition core.hpp:1340
Computation spaces.
Definition core.hpp:1742
Value branching information.
Definition val.hpp:41
Base class for value commit.
Gecode toplevel namespace
Post propagator for SetVar x
Definition set.hh:767
int ModEvent
Type for modification events.
Definition core.hpp:62
#define forceinline
Definition config.hpp:187