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 * Guido Tack <tack@gecode.org> 8 * 9 * Copyright: 10 * Christian Schulte, 2004 11 * Guido Tack, 2004 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 #ifndef GECODE_KERNEL_HH 39 #define GECODE_KERNEL_HH 40 41 #include <cstddef> 42 #include <cstdlib> 43 #include <cstring> 44 #include <cassert> 45 46 #include <cfloat> 47 48 #include <functional> 49 50 #include <gecode/support.hh> 51 52 /* 53 * Configure linking 54 * 55 */ 56 #if !defined(GECODE_STATIC_LIBS) && \ 57 (defined(__CYGWIN__) || defined(__MINGW32__) || defined(_MSC_VER)) 58 59 #ifdef GECODE_BUILD_KERNEL 60 #define GECODE_KERNEL_EXPORT __declspec( dllexport ) 61 #else 62 #define GECODE_KERNEL_EXPORT __declspec( dllimport ) 63 #endif 64 65 #else 66 67 #ifdef GECODE_GCC_HAS_CLASS_VISIBILITY 68 #define GECODE_KERNEL_EXPORT __attribute__ ((visibility("default"))) 69 #else 70 #define GECODE_KERNEL_EXPORT 71 #endif 72 73 #endif 74 75 // Configure auto-linking 76 #ifndef GECODE_BUILD_KERNEL 77 #define GECODE_LIBRARY_NAME "Kernel" 78 #include <gecode/support/auto-link.hpp> 79 #endif 80 81 /** 82 * \namespace Gecode 83 * \brief %Gecode toplevel namespace 84 * 85 * The Gecode namespace contains nested namespaces for 86 * the various submodules (for example Int for the 87 * definition of integer propagator classes). Functionality 88 * that is used for interfacing (search engines, variables, 89 * and so on) or belongs to the %Gecode %Kernel is contained 90 * directly in the Gecode namespace. 91 * 92 */ 93 94 namespace Gecode { 95 96 /// Kernel configuration parameters 97 namespace Kernel { namespace Config { 98 /// Rescale factor for action and afc values 99 const double rescale = 1e-50; 100 /// Rescale action and afc values when larger than this 101 const double rescale_limit = DBL_MAX * rescale; 102 103 /// Initial value for alpha in CHB 104 const double chb_alpha_init = 0.4; 105 /// Limit for decreasing alpha in CHB 106 const double chb_alpha_limit = 0.06; 107 /// Alpha decrement in CHB 108 const double chb_alpha_decrement = 1e-6; 109 /// Initial value for Q-score in CHB 110 const double chb_qscore_init = 0.05; 111 }} 112 113 } 114 115 /* 116 * General exceptions and kernel exceptions 117 * 118 */ 119 120 #include <gecode/kernel/exception.hpp> 121 122 123 124 /* 125 * Basic kernel services and memory management 126 * 127 */ 128 129 #include <gecode/kernel/shared-object.hpp> 130 #include <gecode/kernel/memory/config.hpp> 131 #include <gecode/kernel/memory/manager.hpp> 132 #include <gecode/kernel/memory/region.hpp> 133 134 /* 135 * Macros for checking failure 136 * 137 */ 138 139 #include <gecode/kernel/macros.hpp> 140 141 142 /* 143 * Gecode kernel 144 * 145 */ 146 147 #include <gecode/kernel/archive.hpp> 148 #include <gecode/kernel/gpi.hpp> 149 #include <gecode/kernel/shared-space-data.hpp> 150 #include <gecode/kernel/core.hpp> 151 #include <gecode/kernel/modevent.hpp> 152 #include <gecode/kernel/range-list.hpp> 153 154 155 /* 156 * Variables and testing for shared variables 157 * 158 */ 159 160 #include <gecode/kernel/var.hpp> 161 162 163 /* 164 * Views 165 * 166 */ 167 168 #include <gecode/kernel/view.hpp> 169 170 171 /* 172 * Arrays and other data 173 * 174 */ 175 176 #include <gecode/kernel/data/array.hpp> 177 #include <gecode/kernel/data/shared-array.hpp> 178 #include <gecode/kernel/data/shared-data.hpp> 179 #include <gecode/kernel/data/rnd.hpp> 180 181 182 /* 183 * Common propagator patterns 184 * 185 */ 186 187 #include <gecode/kernel/propagator/pattern.hpp> 188 #include <gecode/kernel/propagator/subscribed.hpp> 189 #include <gecode/kernel/propagator/advisor.hpp> 190 #include <gecode/kernel/propagator/wait.hpp> 191 192 193 /* 194 * Abstractions for branching 195 * 196 */ 197 198 namespace Gecode { 199 200 /** 201 * \defgroup TaskModelBranch Generic branching support 202 * 203 * Support for randomization and tie-breaking that are independent 204 * of a particular variable domain. 205 * 206 * \ingroup TaskModel 207 */ 208 209 /** 210 * \defgroup TaskModelBranchExec Branch with a function 211 * 212 * This does not really branch (it just offers a single alternative) but 213 * executes a single function during branching. A typical 214 * application is to post more constraints after another brancher 215 * has finished. 216 * 217 * \ingroup TaskModelBranch 218 */ 219 //@{ 220 /// Call the function \a f (with the current space as argument) for branching 221 GECODE_KERNEL_EXPORT void 222 branch(Home home, std::function<void(Space& home)> f); 223 //@} 224 225 } 226 227 #include <gecode/kernel/branch/traits.hpp> 228 #include <gecode/kernel/branch/action.hpp> 229 #include <gecode/kernel/branch/afc.hpp> 230 #include <gecode/kernel/branch/chb.hpp> 231 #include <gecode/kernel/branch/var.hpp> 232 #include <gecode/kernel/branch/val.hpp> 233 #include <gecode/kernel/branch/tiebreak.hpp> 234 #include <gecode/kernel/branch/merit.hpp> 235 #include <gecode/kernel/branch/filter.hpp> 236 #include <gecode/kernel/branch/view-sel.hpp> 237 #include <gecode/kernel/branch/print.hpp> 238 #include <gecode/kernel/branch/view.hpp> 239 #include <gecode/kernel/branch/val-sel.hpp> 240 #include <gecode/kernel/branch/val-commit.hpp> 241 #include <gecode/kernel/branch/val-sel-commit.hpp> 242 #include <gecode/kernel/branch/view-val.hpp> 243 244 245 /* 246 * Automatically generated variable implementations 247 * 248 */ 249 250 #include <gecode/kernel/var-imp.hpp> 251 252 253 /* 254 * Trace support 255 * 256 */ 257 258 #include <gecode/kernel/trace/traits.hpp> 259 #include <gecode/kernel/trace/filter.hpp> 260 #include <gecode/kernel/trace/tracer.hpp> 261 #include <gecode/kernel/trace/recorder.hpp> 262 #include <gecode/kernel/trace/print.hpp> 263 264 namespace Gecode { 265 266 /** 267 * \brief Create tracer 268 * \ingroup TaskTrace 269 */ 270 GECODE_KERNEL_EXPORT void 271 trace(Home home, TraceFilter tf, 272 int te = (TE_PROPAGATE | TE_COMMIT | TE_POST), 273 Tracer& t = StdTracer::def); 274 /** 275 * \brief Create tracer 276 * \ingroup TaskTrace 277 */ 278 void 279 trace(Home home, 280 int te = (TE_PROPAGATE | TE_COMMIT | TE_POST), 281 Tracer& t = StdTracer::def); 282 283 } 284 285 #include <gecode/kernel/trace/general.hpp> 286 287 /* 288 * Allocator support 289 * 290 */ 291 292 #include <gecode/kernel/memory/allocators.hpp> 293 294 295 #endif 296 297 // STATISTICS: kernel-other 298