gecoder-with-gecode 0.7.1
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- data/CHANGES +81 -0
- data/COPYING +17 -0
- data/LGPL-LICENSE +458 -0
- data/README +45 -0
- data/Rakefile +13 -0
- data/example/example_helper.rb +1 -0
- data/example/magic_sequence.rb +43 -0
- data/example/queens.rb +43 -0
- data/example/raw_bindings.rb +42 -0
- data/example/send_more_money.rb +43 -0
- data/example/send_most_money.rb +58 -0
- data/example/square_tiling.rb +84 -0
- data/example/sudoku-set.rb +110 -0
- data/example/sudoku.rb +61 -0
- data/ext/extconf.rb +29 -0
- data/ext/gecode-1.3.1/LICENSE +34 -0
- data/ext/gecode-1.3.1/Makefile.contribs +71 -0
- data/ext/gecode-1.3.1/Makefile.dep +3928 -0
- data/ext/gecode-1.3.1/Makefile.in +966 -0
- data/ext/gecode-1.3.1/changelog.in +1065 -0
- data/ext/gecode-1.3.1/configure +8590 -0
- data/ext/gecode-1.3.1/configure.ac +179 -0
- data/ext/gecode-1.3.1/configure.ac.in +175 -0
- data/ext/gecode-1.3.1/contribs/README +26 -0
- data/ext/gecode-1.3.1/contribs/graph/INSTALL +53 -0
- data/ext/gecode-1.3.1/contribs/graph/LICENSE +11 -0
- data/ext/gecode-1.3.1/contribs/graph/Makefile +167 -0
- data/ext/gecode-1.3.1/contribs/graph/Makefile.in.in +169 -0
- data/ext/gecode-1.3.1/contribs/graph/TODO +28 -0
- data/ext/gecode-1.3.1/contribs/graph/binarysimple.hh +82 -0
- data/ext/gecode-1.3.1/contribs/graph/binarysimple.icc +186 -0
- data/ext/gecode-1.3.1/contribs/graph/branch/branch.icc +257 -0
- data/ext/gecode-1.3.1/contribs/graph/configure +2160 -0
- data/ext/gecode-1.3.1/contribs/graph/configure.ac +33 -0
- data/ext/gecode-1.3.1/contribs/graph/doxygen.conf +1226 -0
- data/ext/gecode-1.3.1/contribs/graph/doxygen.hh +132 -0
- data/ext/gecode-1.3.1/contribs/graph/examples/cpgraph-basic.cc +94 -0
- data/ext/gecode-1.3.1/contribs/graph/examples/cpgraph-complement.cc +104 -0
- data/ext/gecode-1.3.1/contribs/graph/examples/cpgraph-instUB.cc +105 -0
- data/ext/gecode-1.3.1/contribs/graph/examples/cpgraph-path.cc +92 -0
- data/ext/gecode-1.3.1/contribs/graph/examples/cpgraph-path2.cc +273 -0
- data/ext/gecode-1.3.1/contribs/graph/examples/cpgraph-pathcost.cc +311 -0
- data/ext/gecode-1.3.1/contribs/graph/examples/g1.txt +1 -0
- data/ext/gecode-1.3.1/contribs/graph/examples/g2.txt +1 -0
- data/ext/gecode-1.3.1/contribs/graph/graph.hh +51 -0
- data/ext/gecode-1.3.1/contribs/graph/graphutils.h +46 -0
- data/ext/gecode-1.3.1/contribs/graph/graphutils.icc +140 -0
- data/ext/gecode-1.3.1/contribs/graph/misc/doxygen/footer.html +1 -0
- data/ext/gecode-1.3.1/contribs/graph/path.hh +116 -0
- data/ext/gecode-1.3.1/contribs/graph/path.icc +64 -0
- data/ext/gecode-1.3.1/contribs/graph/path/path.icc +139 -0
- data/ext/gecode-1.3.1/contribs/graph/path/pathdegree.icc +133 -0
- data/ext/gecode-1.3.1/contribs/graph/path/pathgraphs.icc +341 -0
- data/ext/gecode-1.3.1/contribs/graph/shortdesc.ac +1 -0
- data/ext/gecode-1.3.1/contribs/graph/stlutility.icc +105 -0
- data/ext/gecode-1.3.1/contribs/graph/var.icc +106 -0
- data/ext/gecode-1.3.1/contribs/graph/view.icc +373 -0
- data/ext/gecode-1.3.1/contribs/graph/view/arcnode.cc +162 -0
- data/ext/gecode-1.3.1/contribs/graph/view/arcnode.hh +78 -0
- data/ext/gecode-1.3.1/contribs/graph/view/boundsgraphs.icc +349 -0
- data/ext/gecode-1.3.1/contribs/graph/view/constant.icc +148 -0
- data/ext/gecode-1.3.1/contribs/graph/view/iter.icc +337 -0
- data/ext/gecode-1.3.1/contribs/graph/view/nodearcsets.icc +493 -0
- data/ext/gecode-1.3.1/contribs/graph/view/nodeset.icc +60 -0
- data/ext/gecode-1.3.1/contribs/graph/view/outadjsets.icc +600 -0
- data/ext/gecode-1.3.1/contribs/graph/view/prop.icc +135 -0
- data/ext/gecode-1.3.1/contribs/map/COMPILING +68 -0
- data/ext/gecode-1.3.1/contribs/map/LICENSE +11 -0
- data/ext/gecode-1.3.1/contribs/map/Makefile.in.in +173 -0
- data/ext/gecode-1.3.1/contribs/map/configure +2285 -0
- data/ext/gecode-1.3.1/contribs/map/configure.ac +32 -0
- data/ext/gecode-1.3.1/contribs/map/constraints.hh +46 -0
- data/ext/gecode-1.3.1/contribs/map/constraints.icc +84 -0
- data/ext/gecode-1.3.1/contribs/map/doxygen.conf +1229 -0
- data/ext/gecode-1.3.1/contribs/map/doxygen.hh +33 -0
- data/ext/gecode-1.3.1/contribs/map/examples/approximateMatching.cc +199 -0
- data/ext/gecode-1.3.1/contribs/map/examples/g1.txt +1 -0
- data/ext/gecode-1.3.1/contribs/map/examples/g2.txt +1 -0
- data/ext/gecode-1.3.1/contribs/map/examples/graph-examples.tgz +0 -0
- data/ext/gecode-1.3.1/contribs/map/examples/isomorphism.cc +148 -0
- data/ext/gecode-1.3.1/contribs/map/examples/map +0 -0
- data/ext/gecode-1.3.1/contribs/map/examples/map.cc +80 -0
- data/ext/gecode-1.3.1/contribs/map/examples/subgraphmonomorphism.cc +155 -0
- data/ext/gecode-1.3.1/contribs/map/map.hh +65 -0
- data/ext/gecode-1.3.1/contribs/map/matching/mono.hh +235 -0
- data/ext/gecode-1.3.1/contribs/map/matching/mono.icc +771 -0
- data/ext/gecode-1.3.1/contribs/map/shortdesc.ac +2 -0
- data/ext/gecode-1.3.1/contribs/map/var.icc +346 -0
- data/ext/gecode-1.3.1/contribs/map/var/imp.cc +42 -0
- data/ext/gecode-1.3.1/contribs/map/var/imp.icc +436 -0
- data/ext/gecode-1.3.1/doxygen.conf.in +1225 -0
- data/ext/gecode-1.3.1/doxygen.hh.in +877 -0
- data/ext/gecode-1.3.1/examples/all-interval-sort.cc +201 -0
- data/ext/gecode-1.3.1/examples/all-interval.cc +114 -0
- data/ext/gecode-1.3.1/examples/alpha.cc +112 -0
- data/ext/gecode-1.3.1/examples/baseline.cc +71 -0
- data/ext/gecode-1.3.1/examples/bibd.cc +173 -0
- data/ext/gecode-1.3.1/examples/black-hole.cc +281 -0
- data/ext/gecode-1.3.1/examples/cars.cc +165 -0
- data/ext/gecode-1.3.1/examples/crew.cc +220 -0
- data/ext/gecode-1.3.1/examples/crowded-chess.cc +312 -0
- data/ext/gecode-1.3.1/examples/donald.cc +93 -0
- data/ext/gecode-1.3.1/examples/eq20.cc +111 -0
- data/ext/gecode-1.3.1/examples/golf.cc +242 -0
- data/ext/gecode-1.3.1/examples/golomb.cc +141 -0
- data/ext/gecode-1.3.1/examples/graph-color.cc +371 -0
- data/ext/gecode-1.3.1/examples/grocery.cc +107 -0
- data/ext/gecode-1.3.1/examples/hamming.cc +107 -0
- data/ext/gecode-1.3.1/examples/ind-set.cc +130 -0
- data/ext/gecode-1.3.1/examples/knights.cc +146 -0
- data/ext/gecode-1.3.1/examples/langfordnum.cc +244 -0
- data/ext/gecode-1.3.1/examples/magic-sequence-gcc.cc +93 -0
- data/ext/gecode-1.3.1/examples/magic-sequence.cc +108 -0
- data/ext/gecode-1.3.1/examples/magic-square.cc +120 -0
- data/ext/gecode-1.3.1/examples/money.cc +92 -0
- data/ext/gecode-1.3.1/examples/ortho-latin.cc +156 -0
- data/ext/gecode-1.3.1/examples/packing.cc +211 -0
- data/ext/gecode-1.3.1/examples/partition.cc +126 -0
- data/ext/gecode-1.3.1/examples/photo.cc +155 -0
- data/ext/gecode-1.3.1/examples/picture-puzzle.cc +481 -0
- data/ext/gecode-1.3.1/examples/queen-armies.cc +240 -0
- data/ext/gecode-1.3.1/examples/queens.cc +99 -0
- data/ext/gecode-1.3.1/examples/sports-league.cc +454 -0
- data/ext/gecode-1.3.1/examples/steiner.cc +148 -0
- data/ext/gecode-1.3.1/examples/stress-domain.cc +86 -0
- data/ext/gecode-1.3.1/examples/stress-element.cc +95 -0
- data/ext/gecode-1.3.1/examples/stress-exec.cc +74 -0
- data/ext/gecode-1.3.1/examples/stress-min.cc +84 -0
- data/ext/gecode-1.3.1/examples/stress-search.cc +72 -0
- data/ext/gecode-1.3.1/examples/sudoku-mixed.cc +282 -0
- data/ext/gecode-1.3.1/examples/sudoku-set.cc +162 -0
- data/ext/gecode-1.3.1/examples/sudoku.cc +188 -0
- data/ext/gecode-1.3.1/examples/sudoku.icc +703 -0
- data/ext/gecode-1.3.1/examples/support.cc +160 -0
- data/ext/gecode-1.3.1/examples/support.hh +98 -0
- data/ext/gecode-1.3.1/examples/support.icc +187 -0
- data/ext/gecode-1.3.1/examples/timer.cc +47 -0
- data/ext/gecode-1.3.1/examples/timer.hh +72 -0
- data/ext/gecode-1.3.1/examples/warehouses.cc +176 -0
- data/ext/gecode-1.3.1/extconf.rb +8 -0
- data/ext/gecode-1.3.1/gecode.m4 +736 -0
- data/ext/gecode-1.3.1/gecode/config.icc.in +50 -0
- data/ext/gecode-1.3.1/gecode/int.hh +1426 -0
- data/ext/gecode-1.3.1/gecode/int/arithmetic.cc +87 -0
- data/ext/gecode-1.3.1/gecode/int/arithmetic.hh +292 -0
- data/ext/gecode-1.3.1/gecode/int/arithmetic/abs.icc +213 -0
- data/ext/gecode-1.3.1/gecode/int/arithmetic/max.icc +196 -0
- data/ext/gecode-1.3.1/gecode/int/arithmetic/mult.icc +478 -0
- data/ext/gecode-1.3.1/gecode/int/array.cc +61 -0
- data/ext/gecode-1.3.1/gecode/int/array.icc +264 -0
- data/ext/gecode-1.3.1/gecode/int/bool.cc +187 -0
- data/ext/gecode-1.3.1/gecode/int/bool.hh +255 -0
- data/ext/gecode-1.3.1/gecode/int/bool/base.icc +123 -0
- data/ext/gecode-1.3.1/gecode/int/bool/eq.icc +89 -0
- data/ext/gecode-1.3.1/gecode/int/bool/eqv.icc +132 -0
- data/ext/gecode-1.3.1/gecode/int/bool/or.icc +380 -0
- data/ext/gecode-1.3.1/gecode/int/branch.cc +81 -0
- data/ext/gecode-1.3.1/gecode/int/branch.hh +444 -0
- data/ext/gecode-1.3.1/gecode/int/branch/assign.cc +83 -0
- data/ext/gecode-1.3.1/gecode/int/branch/assign.icc +76 -0
- data/ext/gecode-1.3.1/gecode/int/branch/select-val.icc +104 -0
- data/ext/gecode-1.3.1/gecode/int/branch/select-view.icc +219 -0
- data/ext/gecode-1.3.1/gecode/int/channel.cc +62 -0
- data/ext/gecode-1.3.1/gecode/int/channel.hh +144 -0
- data/ext/gecode-1.3.1/gecode/int/channel/base.icc +60 -0
- data/ext/gecode-1.3.1/gecode/int/channel/dom.icc +313 -0
- data/ext/gecode-1.3.1/gecode/int/channel/stack.icc +59 -0
- data/ext/gecode-1.3.1/gecode/int/channel/val.icc +239 -0
- data/ext/gecode-1.3.1/gecode/int/count.cc +174 -0
- data/ext/gecode-1.3.1/gecode/int/count.hh +401 -0
- data/ext/gecode-1.3.1/gecode/int/count/int.icc +495 -0
- data/ext/gecode-1.3.1/gecode/int/count/rel.icc +100 -0
- data/ext/gecode-1.3.1/gecode/int/count/view.icc +332 -0
- data/ext/gecode-1.3.1/gecode/int/cumulatives.cc +210 -0
- data/ext/gecode-1.3.1/gecode/int/cumulatives.hh +118 -0
- data/ext/gecode-1.3.1/gecode/int/cumulatives/val.icc +377 -0
- data/ext/gecode-1.3.1/gecode/int/distinct.cc +77 -0
- data/ext/gecode-1.3.1/gecode/int/distinct.hh +272 -0
- data/ext/gecode-1.3.1/gecode/int/distinct/bilink.icc +73 -0
- data/ext/gecode-1.3.1/gecode/int/distinct/bnd.icc +335 -0
- data/ext/gecode-1.3.1/gecode/int/distinct/combptr.icc +62 -0
- data/ext/gecode-1.3.1/gecode/int/distinct/dom.icc +740 -0
- data/ext/gecode-1.3.1/gecode/int/distinct/edge.icc +96 -0
- data/ext/gecode-1.3.1/gecode/int/distinct/node.icc +107 -0
- data/ext/gecode-1.3.1/gecode/int/distinct/ter-dom.icc +97 -0
- data/ext/gecode-1.3.1/gecode/int/distinct/val.icc +171 -0
- data/ext/gecode-1.3.1/gecode/int/dom.cc +81 -0
- data/ext/gecode-1.3.1/gecode/int/dom.hh +101 -0
- data/ext/gecode-1.3.1/gecode/int/dom/range.icc +85 -0
- data/ext/gecode-1.3.1/gecode/int/dom/spec.icc +85 -0
- data/ext/gecode-1.3.1/gecode/int/element.cc +58 -0
- data/ext/gecode-1.3.1/gecode/int/element.hh +203 -0
- data/ext/gecode-1.3.1/gecode/int/element/int.icc +396 -0
- data/ext/gecode-1.3.1/gecode/int/element/view.icc +443 -0
- data/ext/gecode-1.3.1/gecode/int/exception.icc +137 -0
- data/ext/gecode-1.3.1/gecode/int/gcc.cc +708 -0
- data/ext/gecode-1.3.1/gecode/int/gcc.hh +338 -0
- data/ext/gecode-1.3.1/gecode/int/gcc/bnd.icc +629 -0
- data/ext/gecode-1.3.1/gecode/int/gcc/dom.icc +504 -0
- data/ext/gecode-1.3.1/gecode/int/gcc/gccbndsup.icc +760 -0
- data/ext/gecode-1.3.1/gecode/int/gcc/graphsup.icc +2375 -0
- data/ext/gecode-1.3.1/gecode/int/gcc/lbc.icc +375 -0
- data/ext/gecode-1.3.1/gecode/int/gcc/occur.icc +687 -0
- data/ext/gecode-1.3.1/gecode/int/gcc/ubc.icc +236 -0
- data/ext/gecode-1.3.1/gecode/int/gcc/val.icc +373 -0
- data/ext/gecode-1.3.1/gecode/int/int-set.cc +115 -0
- data/ext/gecode-1.3.1/gecode/int/int-set.icc +151 -0
- data/ext/gecode-1.3.1/gecode/int/linear.cc +247 -0
- data/ext/gecode-1.3.1/gecode/int/linear.hh +1056 -0
- data/ext/gecode-1.3.1/gecode/int/linear/binary.icc +439 -0
- data/ext/gecode-1.3.1/gecode/int/linear/bool-int.icc +422 -0
- data/ext/gecode-1.3.1/gecode/int/linear/bool-view.icc +311 -0
- data/ext/gecode-1.3.1/gecode/int/linear/dom.icc +503 -0
- data/ext/gecode-1.3.1/gecode/int/linear/nary.icc +857 -0
- data/ext/gecode-1.3.1/gecode/int/linear/noview.icc +264 -0
- data/ext/gecode-1.3.1/gecode/int/linear/post.cc +542 -0
- data/ext/gecode-1.3.1/gecode/int/linear/ternary.icc +255 -0
- data/ext/gecode-1.3.1/gecode/int/propagator.icc +194 -0
- data/ext/gecode-1.3.1/gecode/int/regular.cc +40 -0
- data/ext/gecode-1.3.1/gecode/int/regular.hh +83 -0
- data/ext/gecode-1.3.1/gecode/int/regular/dfa.cc +466 -0
- data/ext/gecode-1.3.1/gecode/int/regular/dfa.icc +172 -0
- data/ext/gecode-1.3.1/gecode/int/regular/dom.icc +480 -0
- data/ext/gecode-1.3.1/gecode/int/regular/reg.cc +738 -0
- data/ext/gecode-1.3.1/gecode/int/rel.cc +293 -0
- data/ext/gecode-1.3.1/gecode/int/rel.hh +526 -0
- data/ext/gecode-1.3.1/gecode/int/rel/eq.icc +640 -0
- data/ext/gecode-1.3.1/gecode/int/rel/lex.icc +212 -0
- data/ext/gecode-1.3.1/gecode/int/rel/lq-le.icc +246 -0
- data/ext/gecode-1.3.1/gecode/int/rel/nq.icc +188 -0
- data/ext/gecode-1.3.1/gecode/int/sortedness.cc +124 -0
- data/ext/gecode-1.3.1/gecode/int/sortedness.hh +108 -0
- data/ext/gecode-1.3.1/gecode/int/sortedness/matching.icc +177 -0
- data/ext/gecode-1.3.1/gecode/int/sortedness/narrowing.icc +243 -0
- data/ext/gecode-1.3.1/gecode/int/sortedness/order.icc +232 -0
- data/ext/gecode-1.3.1/gecode/int/sortedness/sortedness.icc +727 -0
- data/ext/gecode-1.3.1/gecode/int/sortedness/sortsup.icc +666 -0
- data/ext/gecode-1.3.1/gecode/int/var-imp.vis +198 -0
- data/ext/gecode-1.3.1/gecode/int/var.icc +590 -0
- data/ext/gecode-1.3.1/gecode/int/var/bool.icc +52 -0
- data/ext/gecode-1.3.1/gecode/int/var/imp-body.icc +65 -0
- data/ext/gecode-1.3.1/gecode/int/var/imp-hdr.icc +191 -0
- data/ext/gecode-1.3.1/gecode/int/var/imp.cc +361 -0
- data/ext/gecode-1.3.1/gecode/int/var/imp.icc +579 -0
- data/ext/gecode-1.3.1/gecode/int/var/int.cc +63 -0
- data/ext/gecode-1.3.1/gecode/int/var/int.icc +135 -0
- data/ext/gecode-1.3.1/gecode/int/view.icc +1219 -0
- data/ext/gecode-1.3.1/gecode/int/view/bool.icc +270 -0
- data/ext/gecode-1.3.1/gecode/int/view/constint.icc +306 -0
- data/ext/gecode-1.3.1/gecode/int/view/int.icc +221 -0
- data/ext/gecode-1.3.1/gecode/int/view/iter.icc +49 -0
- data/ext/gecode-1.3.1/gecode/int/view/minus.icc +285 -0
- data/ext/gecode-1.3.1/gecode/int/view/offset.icc +274 -0
- data/ext/gecode-1.3.1/gecode/int/view/print.cc +109 -0
- data/ext/gecode-1.3.1/gecode/int/view/rtest.icc +215 -0
- data/ext/gecode-1.3.1/gecode/int/view/scale.icc +373 -0
- data/ext/gecode-1.3.1/gecode/iter.hh +65 -0
- data/ext/gecode-1.3.1/gecode/iter/ranges-add.icc +130 -0
- data/ext/gecode-1.3.1/gecode/iter/ranges-append.icc +208 -0
- data/ext/gecode-1.3.1/gecode/iter/ranges-array.icc +123 -0
- data/ext/gecode-1.3.1/gecode/iter/ranges-cache.icc +143 -0
- data/ext/gecode-1.3.1/gecode/iter/ranges-compl.icc +206 -0
- data/ext/gecode-1.3.1/gecode/iter/ranges-diff.icc +127 -0
- data/ext/gecode-1.3.1/gecode/iter/ranges-empty.icc +96 -0
- data/ext/gecode-1.3.1/gecode/iter/ranges-inter.icc +202 -0
- data/ext/gecode-1.3.1/gecode/iter/ranges-minmax.icc +103 -0
- data/ext/gecode-1.3.1/gecode/iter/ranges-minus.icc +138 -0
- data/ext/gecode-1.3.1/gecode/iter/ranges-offset.icc +112 -0
- data/ext/gecode-1.3.1/gecode/iter/ranges-operations.icc +142 -0
- data/ext/gecode-1.3.1/gecode/iter/ranges-scale.icc +224 -0
- data/ext/gecode-1.3.1/gecode/iter/ranges-singleton.icc +71 -0
- data/ext/gecode-1.3.1/gecode/iter/ranges-size.icc +131 -0
- data/ext/gecode-1.3.1/gecode/iter/ranges-union.icc +211 -0
- data/ext/gecode-1.3.1/gecode/iter/ranges-values.icc +125 -0
- data/ext/gecode-1.3.1/gecode/iter/values-ranges.icc +91 -0
- data/ext/gecode-1.3.1/gecode/iter/virtual-ranges-compl.icc +247 -0
- data/ext/gecode-1.3.1/gecode/iter/virtual-ranges-inter.icc +227 -0
- data/ext/gecode-1.3.1/gecode/iter/virtual-ranges-union.icc +236 -0
- data/ext/gecode-1.3.1/gecode/iter/virtual-ranges.icc +126 -0
- data/ext/gecode-1.3.1/gecode/kernel.hh +141 -0
- data/ext/gecode-1.3.1/gecode/kernel/array.icc +954 -0
- data/ext/gecode-1.3.1/gecode/kernel/branching.icc +233 -0
- data/ext/gecode-1.3.1/gecode/kernel/core.cc +417 -0
- data/ext/gecode-1.3.1/gecode/kernel/core.icc +1681 -0
- data/ext/gecode-1.3.1/gecode/kernel/exception.cc +49 -0
- data/ext/gecode-1.3.1/gecode/kernel/exception.icc +104 -0
- data/ext/gecode-1.3.1/gecode/kernel/macros.icc +98 -0
- data/ext/gecode-1.3.1/gecode/kernel/memory-manager.cc +41 -0
- data/ext/gecode-1.3.1/gecode/kernel/memory-manager.icc +438 -0
- data/ext/gecode-1.3.1/gecode/kernel/memory.icc +205 -0
- data/ext/gecode-1.3.1/gecode/kernel/modevent.icc +53 -0
- data/ext/gecode-1.3.1/gecode/kernel/propagator.icc +680 -0
- data/ext/gecode-1.3.1/gecode/kernel/view.icc +583 -0
- data/ext/gecode-1.3.1/gecode/limits.hh +87 -0
- data/ext/gecode-1.3.1/gecode/minimodel.hh +942 -0
- data/ext/gecode-1.3.1/gecode/minimodel/arithmetic.cc +137 -0
- data/ext/gecode-1.3.1/gecode/minimodel/bool-expr.cc +207 -0
- data/ext/gecode-1.3.1/gecode/minimodel/bool-expr.icc +191 -0
- data/ext/gecode-1.3.1/gecode/minimodel/bool-rel.icc +66 -0
- data/ext/gecode-1.3.1/gecode/minimodel/exception.icc +59 -0
- data/ext/gecode-1.3.1/gecode/minimodel/lin-expr.cc +103 -0
- data/ext/gecode-1.3.1/gecode/minimodel/lin-expr.icc +192 -0
- data/ext/gecode-1.3.1/gecode/minimodel/lin-rel.icc +200 -0
- data/ext/gecode-1.3.1/gecode/minimodel/matrix.icc +118 -0
- data/ext/gecode-1.3.1/gecode/minimodel/scheduling.cc +241 -0
- data/ext/gecode-1.3.1/gecode/search.hh +745 -0
- data/ext/gecode-1.3.1/gecode/search/bab.cc +153 -0
- data/ext/gecode-1.3.1/gecode/search/bab.icc +101 -0
- data/ext/gecode-1.3.1/gecode/search/dfs.cc +63 -0
- data/ext/gecode-1.3.1/gecode/search/dfs.icc +144 -0
- data/ext/gecode-1.3.1/gecode/search/engine-ctrl.icc +109 -0
- data/ext/gecode-1.3.1/gecode/search/lds.cc +237 -0
- data/ext/gecode-1.3.1/gecode/search/lds.icc +57 -0
- data/ext/gecode-1.3.1/gecode/search/reco-stack.icc +219 -0
- data/ext/gecode-1.3.1/gecode/search/restart.icc +76 -0
- data/ext/gecode-1.3.1/gecode/search/statistics.icc +30 -0
- data/ext/gecode-1.3.1/gecode/search/stop.cc +58 -0
- data/ext/gecode-1.3.1/gecode/search/stop.icc +100 -0
- data/ext/gecode-1.3.1/gecode/set.hh +419 -0
- data/ext/gecode-1.3.1/gecode/set/array.cc +114 -0
- data/ext/gecode-1.3.1/gecode/set/array.icc +134 -0
- data/ext/gecode-1.3.1/gecode/set/branch.cc +57 -0
- data/ext/gecode-1.3.1/gecode/set/branch.hh +176 -0
- data/ext/gecode-1.3.1/gecode/set/branch/select-val.icc +72 -0
- data/ext/gecode-1.3.1/gecode/set/branch/select-view.icc +112 -0
- data/ext/gecode-1.3.1/gecode/set/cardinality.cc +49 -0
- data/ext/gecode-1.3.1/gecode/set/convex.cc +43 -0
- data/ext/gecode-1.3.1/gecode/set/convex.hh +92 -0
- data/ext/gecode-1.3.1/gecode/set/convex/conv.cc +81 -0
- data/ext/gecode-1.3.1/gecode/set/convex/conv.icc +51 -0
- data/ext/gecode-1.3.1/gecode/set/convex/hull.cc +100 -0
- data/ext/gecode-1.3.1/gecode/set/convex/hull.icc +52 -0
- data/ext/gecode-1.3.1/gecode/set/distinct.cc +48 -0
- data/ext/gecode-1.3.1/gecode/set/distinct.hh +97 -0
- data/ext/gecode-1.3.1/gecode/set/distinct/atmostOne.cc +151 -0
- data/ext/gecode-1.3.1/gecode/set/distinct/atmostOne.icc +50 -0
- data/ext/gecode-1.3.1/gecode/set/distinct/binomial.cc +46 -0
- data/ext/gecode-1.3.1/gecode/set/distinct/binomial.icc +157 -0
- data/ext/gecode-1.3.1/gecode/set/distinct/distinct.cc +124 -0
- data/ext/gecode-1.3.1/gecode/set/distinct/distinct.icc +58 -0
- data/ext/gecode-1.3.1/gecode/set/dom.cc +224 -0
- data/ext/gecode-1.3.1/gecode/set/exception.icc +132 -0
- data/ext/gecode-1.3.1/gecode/set/int.cc +139 -0
- data/ext/gecode-1.3.1/gecode/set/int.hh +226 -0
- data/ext/gecode-1.3.1/gecode/set/int/card.cc +61 -0
- data/ext/gecode-1.3.1/gecode/set/int/card.icc +54 -0
- data/ext/gecode-1.3.1/gecode/set/int/channel.cc +100 -0
- data/ext/gecode-1.3.1/gecode/set/int/channel.icc +75 -0
- data/ext/gecode-1.3.1/gecode/set/int/match.cc +148 -0
- data/ext/gecode-1.3.1/gecode/set/int/match.icc +67 -0
- data/ext/gecode-1.3.1/gecode/set/int/minmax.cc +109 -0
- data/ext/gecode-1.3.1/gecode/set/int/minmax.icc +63 -0
- data/ext/gecode-1.3.1/gecode/set/int/weights.cc +182 -0
- data/ext/gecode-1.3.1/gecode/set/int/weights.icc +174 -0
- data/ext/gecode-1.3.1/gecode/set/projectors-compiler.hh +148 -0
- data/ext/gecode-1.3.1/gecode/set/projectors.cc +109 -0
- data/ext/gecode-1.3.1/gecode/set/projectors.hh +319 -0
- data/ext/gecode-1.3.1/gecode/set/projectors/compiler.cc +841 -0
- data/ext/gecode-1.3.1/gecode/set/projectors/projector-set.cc +69 -0
- data/ext/gecode-1.3.1/gecode/set/projectors/projector-set.icc +66 -0
- data/ext/gecode-1.3.1/gecode/set/projectors/projector.cc +125 -0
- data/ext/gecode-1.3.1/gecode/set/projectors/projector.icc +79 -0
- data/ext/gecode-1.3.1/gecode/set/projectors/propagator.hh +127 -0
- data/ext/gecode-1.3.1/gecode/set/projectors/propagator/card.icc +96 -0
- data/ext/gecode-1.3.1/gecode/set/projectors/propagator/nary.icc +106 -0
- data/ext/gecode-1.3.1/gecode/set/projectors/propagator/re-nary.cc +76 -0
- data/ext/gecode-1.3.1/gecode/set/projectors/propagator/re-nary.icc +53 -0
- data/ext/gecode-1.3.1/gecode/set/projectors/set-expr.cc +306 -0
- data/ext/gecode-1.3.1/gecode/set/projectors/set-expr.icc +192 -0
- data/ext/gecode-1.3.1/gecode/set/propagator.icc +96 -0
- data/ext/gecode-1.3.1/gecode/set/rel-op-const.cc +233 -0
- data/ext/gecode-1.3.1/gecode/set/rel-op.cc +96 -0
- data/ext/gecode-1.3.1/gecode/set/rel-op.hh +267 -0
- data/ext/gecode-1.3.1/gecode/set/rel-op/common.icc +528 -0
- data/ext/gecode-1.3.1/gecode/set/rel-op/inter.icc +312 -0
- data/ext/gecode-1.3.1/gecode/set/rel-op/partition.icc +131 -0
- data/ext/gecode-1.3.1/gecode/set/rel-op/post.icc +198 -0
- data/ext/gecode-1.3.1/gecode/set/rel-op/subofunion.icc +150 -0
- data/ext/gecode-1.3.1/gecode/set/rel-op/superofinter.icc +151 -0
- data/ext/gecode-1.3.1/gecode/set/rel-op/union.icc +292 -0
- data/ext/gecode-1.3.1/gecode/set/rel.cc +201 -0
- data/ext/gecode-1.3.1/gecode/set/rel.hh +250 -0
- data/ext/gecode-1.3.1/gecode/set/rel/common.icc +109 -0
- data/ext/gecode-1.3.1/gecode/set/rel/eq.icc +101 -0
- data/ext/gecode-1.3.1/gecode/set/rel/nosubset.icc +88 -0
- data/ext/gecode-1.3.1/gecode/set/rel/nq.icc +132 -0
- data/ext/gecode-1.3.1/gecode/set/rel/re-eq.icc +142 -0
- data/ext/gecode-1.3.1/gecode/set/rel/re-subset.icc +121 -0
- data/ext/gecode-1.3.1/gecode/set/rel/subset.icc +80 -0
- data/ext/gecode-1.3.1/gecode/set/select.cc +88 -0
- data/ext/gecode-1.3.1/gecode/set/select.hh +113 -0
- data/ext/gecode-1.3.1/gecode/set/select/disjoint.cc +267 -0
- data/ext/gecode-1.3.1/gecode/set/select/disjoint.icc +59 -0
- data/ext/gecode-1.3.1/gecode/set/select/idxarray.hh +91 -0
- data/ext/gecode-1.3.1/gecode/set/select/idxarray.icc +112 -0
- data/ext/gecode-1.3.1/gecode/set/select/inter.icc +300 -0
- data/ext/gecode-1.3.1/gecode/set/sequence.cc +48 -0
- data/ext/gecode-1.3.1/gecode/set/sequence.hh +97 -0
- data/ext/gecode-1.3.1/gecode/set/sequence/common.icc +79 -0
- data/ext/gecode-1.3.1/gecode/set/sequence/seq-u.cc +83 -0
- data/ext/gecode-1.3.1/gecode/set/sequence/seq-u.icc +63 -0
- data/ext/gecode-1.3.1/gecode/set/sequence/seq.cc +61 -0
- data/ext/gecode-1.3.1/gecode/set/sequence/seq.icc +53 -0
- data/ext/gecode-1.3.1/gecode/set/var-imp.vis +205 -0
- data/ext/gecode-1.3.1/gecode/set/var.icc +1090 -0
- data/ext/gecode-1.3.1/gecode/set/var/imp-body.icc +192 -0
- data/ext/gecode-1.3.1/gecode/set/var/imp-hdr.icc +235 -0
- data/ext/gecode-1.3.1/gecode/set/var/imp.cc +127 -0
- data/ext/gecode-1.3.1/gecode/set/var/imp.icc +356 -0
- data/ext/gecode-1.3.1/gecode/set/var/integerset.cc +256 -0
- data/ext/gecode-1.3.1/gecode/set/var/integerset.icc +512 -0
- data/ext/gecode-1.3.1/gecode/set/var/iter.icc +47 -0
- data/ext/gecode-1.3.1/gecode/set/var/set.cc +99 -0
- data/ext/gecode-1.3.1/gecode/set/var/set.icc +282 -0
- data/ext/gecode-1.3.1/gecode/set/view.icc +1075 -0
- data/ext/gecode-1.3.1/gecode/set/view/complement.icc +525 -0
- data/ext/gecode-1.3.1/gecode/set/view/const.icc +651 -0
- data/ext/gecode-1.3.1/gecode/set/view/print.cc +120 -0
- data/ext/gecode-1.3.1/gecode/set/view/set.icc +217 -0
- data/ext/gecode-1.3.1/gecode/set/view/singleton.icc +348 -0
- data/ext/gecode-1.3.1/gecode/support/block-allocator.hh +152 -0
- data/ext/gecode-1.3.1/gecode/support/dynamic-array.hh +131 -0
- data/ext/gecode-1.3.1/gecode/support/dynamic-stack.hh +157 -0
- data/ext/gecode-1.3.1/gecode/support/random.hh +100 -0
- data/ext/gecode-1.3.1/gecode/support/shared-array.hh +255 -0
- data/ext/gecode-1.3.1/gecode/support/sort.hh +193 -0
- data/ext/gecode-1.3.1/gecode/support/static-pqueue.hh +240 -0
- data/ext/gecode-1.3.1/gecode/support/static-stack.hh +117 -0
- data/ext/gecode-1.3.1/install-sh +323 -0
- data/ext/gecode-1.3.1/misc/debian/Makefile.am +8 -0
- data/ext/gecode-1.3.1/misc/debian/changelog +6 -0
- data/ext/gecode-1.3.1/misc/debian/control +11 -0
- data/ext/gecode-1.3.1/misc/debian/copyright +44 -0
- data/ext/gecode-1.3.1/misc/debian/gecode.info +9 -0
- data/ext/gecode-1.3.1/misc/debian/gecode.install +2 -0
- data/ext/gecode-1.3.1/misc/debian/gecode.spec +58 -0
- data/ext/gecode-1.3.1/misc/debian/rules +81 -0
- data/ext/gecode-1.3.1/misc/doxygen/back.png +0 -0
- data/ext/gecode-1.3.1/misc/doxygen/footer.html +3 -0
- data/ext/gecode-1.3.1/misc/doxygen/gecode-logo-100.png +0 -0
- data/ext/gecode-1.3.1/misc/doxygen/header.html +46 -0
- data/ext/gecode-1.3.1/misc/doxygen/stylesheet.css +460 -0
- data/ext/gecode-1.3.1/misc/fixproperties.sh +32 -0
- data/ext/gecode-1.3.1/misc/gecode-minimodel.pc.in +12 -0
- data/ext/gecode-1.3.1/misc/gecode-search.pc.in +12 -0
- data/ext/gecode-1.3.1/misc/gecode.pc.in +12 -0
- data/ext/gecode-1.3.1/misc/genchangelog.perl +190 -0
- data/ext/gecode-1.3.1/misc/genlicense.perl +113 -0
- data/ext/gecode-1.3.1/misc/genstatistics.perl +155 -0
- data/ext/gecode-1.3.1/misc/gentxtchangelog.perl +170 -0
- data/ext/gecode-1.3.1/misc/genvarimp.perl +666 -0
- data/ext/gecode-1.3.1/misc/getrevision.perl +32 -0
- data/ext/gecode-1.3.1/misc/makedepend.perl +66 -0
- data/ext/gecode-1.3.1/test/int.cc +497 -0
- data/ext/gecode-1.3.1/test/int.hh +119 -0
- data/ext/gecode-1.3.1/test/int/arithmetic.cc +262 -0
- data/ext/gecode-1.3.1/test/int/basic.cc +42 -0
- data/ext/gecode-1.3.1/test/int/bool.cc +189 -0
- data/ext/gecode-1.3.1/test/int/channel.cc +79 -0
- data/ext/gecode-1.3.1/test/int/count.cc +264 -0
- data/ext/gecode-1.3.1/test/int/distinct.cc +121 -0
- data/ext/gecode-1.3.1/test/int/dom.cc +69 -0
- data/ext/gecode-1.3.1/test/int/element.cc +132 -0
- data/ext/gecode-1.3.1/test/int/gcc.cc +592 -0
- data/ext/gecode-1.3.1/test/int/linear.cc +315 -0
- data/ext/gecode-1.3.1/test/int/minimodel.cc +451 -0
- data/ext/gecode-1.3.1/test/int/regular.cc +105 -0
- data/ext/gecode-1.3.1/test/int/rel.cc +283 -0
- data/ext/gecode-1.3.1/test/int/scheduling.cc +259 -0
- data/ext/gecode-1.3.1/test/int/sortedness.cc +272 -0
- data/ext/gecode-1.3.1/test/intset.cc +40 -0
- data/ext/gecode-1.3.1/test/log.cc +515 -0
- data/ext/gecode-1.3.1/test/log.hh +68 -0
- data/ext/gecode-1.3.1/test/set.cc +542 -0
- data/ext/gecode-1.3.1/test/set.hh +152 -0
- data/ext/gecode-1.3.1/test/set/convex.cc +94 -0
- data/ext/gecode-1.3.1/test/set/distinct.cc +148 -0
- data/ext/gecode-1.3.1/test/set/dom.cc +67 -0
- data/ext/gecode-1.3.1/test/set/int.cc +249 -0
- data/ext/gecode-1.3.1/test/set/projection.cc +333 -0
- data/ext/gecode-1.3.1/test/set/rel-op.cc +662 -0
- data/ext/gecode-1.3.1/test/set/rel.cc +198 -0
- data/ext/gecode-1.3.1/test/set/select.cc +108 -0
- data/ext/gecode-1.3.1/test/set/sequence.cc +83 -0
- data/ext/gecode-1.3.1/test/stress.cc +93 -0
- data/ext/gecode-1.3.1/test/stress.hh +74 -0
- data/ext/gecode-1.3.1/test/stress/distinct.cc +70 -0
- data/ext/gecode-1.3.1/test/stress/domain.cc +69 -0
- data/ext/gecode-1.3.1/test/stress/exec.cc +60 -0
- data/ext/gecode-1.3.1/test/stress/minsort.cc +63 -0
- data/ext/gecode-1.3.1/test/stress/regular.cc +112 -0
- data/ext/gecode-1.3.1/test/test.cc +215 -0
- data/ext/gecode-1.3.1/test/test.hh +107 -0
- data/ext/missing.cpp +328 -0
- data/ext/missing.h +120 -0
- data/ext/vararray.cpp +330 -0
- data/ext/vararray.h +149 -0
- data/lib/gecoder.rb +5 -0
- data/lib/gecoder/bindings.rb +34 -0
- data/lib/gecoder/bindings/bindings.rb +2209 -0
- data/lib/gecoder/interface.rb +8 -0
- data/lib/gecoder/interface/binding_changes.rb +313 -0
- data/lib/gecoder/interface/branch.rb +152 -0
- data/lib/gecoder/interface/constraints.rb +397 -0
- data/lib/gecoder/interface/constraints/bool/boolean.rb +246 -0
- data/lib/gecoder/interface/constraints/bool/linear.rb +29 -0
- data/lib/gecoder/interface/constraints/bool_enum/boolean.rb +84 -0
- data/lib/gecoder/interface/constraints/bool_enum_constraints.rb +8 -0
- data/lib/gecoder/interface/constraints/bool_var_constraints.rb +75 -0
- data/lib/gecoder/interface/constraints/int/arithmetic.rb +71 -0
- data/lib/gecoder/interface/constraints/int/domain.rb +78 -0
- data/lib/gecoder/interface/constraints/int/linear.rb +295 -0
- data/lib/gecoder/interface/constraints/int_enum/arithmetic.rb +72 -0
- data/lib/gecoder/interface/constraints/int_enum/channel.rb +100 -0
- data/lib/gecoder/interface/constraints/int_enum/count.rb +92 -0
- data/lib/gecoder/interface/constraints/int_enum/distinct.rb +69 -0
- data/lib/gecoder/interface/constraints/int_enum/element.rb +82 -0
- data/lib/gecoder/interface/constraints/int_enum/equality.rb +38 -0
- data/lib/gecoder/interface/constraints/int_enum/sort.rb +126 -0
- data/lib/gecoder/interface/constraints/int_enum_constraints.rb +37 -0
- data/lib/gecoder/interface/constraints/int_var_constraints.rb +58 -0
- data/lib/gecoder/interface/constraints/reifiable_constraints.rb +78 -0
- data/lib/gecoder/interface/constraints/set/cardinality.rb +75 -0
- data/lib/gecoder/interface/constraints/set/connection.rb +193 -0
- data/lib/gecoder/interface/constraints/set/domain.rb +109 -0
- data/lib/gecoder/interface/constraints/set/operation.rb +132 -0
- data/lib/gecoder/interface/constraints/set/relation.rb +178 -0
- data/lib/gecoder/interface/constraints/set_enum/channel.rb +18 -0
- data/lib/gecoder/interface/constraints/set_enum/distinct.rb +80 -0
- data/lib/gecoder/interface/constraints/set_enum/operation.rb +60 -0
- data/lib/gecoder/interface/constraints/set_enum/selection.rb +217 -0
- data/lib/gecoder/interface/constraints/set_enum_constraints.rb +34 -0
- data/lib/gecoder/interface/constraints/set_var_constraints.rb +72 -0
- data/lib/gecoder/interface/enum_matrix.rb +64 -0
- data/lib/gecoder/interface/enum_wrapper.rb +153 -0
- data/lib/gecoder/interface/model.rb +251 -0
- data/lib/gecoder/interface/search.rb +123 -0
- data/lib/gecoder/interface/variables.rb +254 -0
- data/lib/gecoder/version.rb +4 -0
- data/specs/binding_changes.rb +76 -0
- data/specs/bool_var.rb +74 -0
- data/specs/branch.rb +170 -0
- data/specs/constraints/arithmetic.rb +266 -0
- data/specs/constraints/bool_enum.rb +140 -0
- data/specs/constraints/boolean.rb +232 -0
- data/specs/constraints/cardinality.rb +154 -0
- data/specs/constraints/channel.rb +126 -0
- data/specs/constraints/connection.rb +373 -0
- data/specs/constraints/constraint_helper.rb +180 -0
- data/specs/constraints/constraints.rb +74 -0
- data/specs/constraints/count.rb +139 -0
- data/specs/constraints/distinct.rb +218 -0
- data/specs/constraints/element.rb +106 -0
- data/specs/constraints/equality.rb +31 -0
- data/specs/constraints/int_domain.rb +69 -0
- data/specs/constraints/int_relation.rb +78 -0
- data/specs/constraints/linear.rb +332 -0
- data/specs/constraints/reification_sugar.rb +96 -0
- data/specs/constraints/selection.rb +292 -0
- data/specs/constraints/set_domain.rb +181 -0
- data/specs/constraints/set_operation.rb +285 -0
- data/specs/constraints/set_relation.rb +201 -0
- data/specs/constraints/sort.rb +175 -0
- data/specs/enum_matrix.rb +43 -0
- data/specs/enum_wrapper.rb +122 -0
- data/specs/int_var.rb +144 -0
- data/specs/logging.rb +24 -0
- data/specs/model.rb +190 -0
- data/specs/search.rb +246 -0
- data/specs/set_var.rb +68 -0
- data/specs/spec_helper.rb +93 -0
- data/tasks/all_tasks.rb +1 -0
- data/tasks/distribution.rake +129 -0
- data/tasks/rcov.rake +17 -0
- data/tasks/specs.rake +15 -0
- data/tasks/svn.rake +11 -0
- data/tasks/website.rake +51 -0
- data/vendor/rust/README +28 -0
- data/vendor/rust/bin/cxxgenerator.rb +93 -0
- data/vendor/rust/include/rust_checks.hh +115 -0
- data/vendor/rust/include/rust_conversions.hh +102 -0
- data/vendor/rust/rust.rb +67 -0
- data/vendor/rust/rust/attribute.rb +51 -0
- data/vendor/rust/rust/bindings.rb +172 -0
- data/vendor/rust/rust/class.rb +339 -0
- data/vendor/rust/rust/constants.rb +48 -0
- data/vendor/rust/rust/container.rb +110 -0
- data/vendor/rust/rust/cppifaceparser.rb +129 -0
- data/vendor/rust/rust/cwrapper.rb +72 -0
- data/vendor/rust/rust/cxxclass.rb +98 -0
- data/vendor/rust/rust/element.rb +81 -0
- data/vendor/rust/rust/enum.rb +63 -0
- data/vendor/rust/rust/function.rb +407 -0
- data/vendor/rust/rust/namespace.rb +61 -0
- data/vendor/rust/rust/templates/AttributeDefinition.rusttpl +17 -0
- data/vendor/rust/rust/templates/AttributeInitBinding.rusttpl +9 -0
- data/vendor/rust/rust/templates/BindingsHeader.rusttpl +24 -0
- data/vendor/rust/rust/templates/BindingsUnit.rusttpl +46 -0
- data/vendor/rust/rust/templates/CWrapperClassDefinitions.rusttpl +64 -0
- data/vendor/rust/rust/templates/ClassDeclarations.rusttpl +7 -0
- data/vendor/rust/rust/templates/ClassInitialize.rusttpl +6 -0
- data/vendor/rust/rust/templates/ConstructorStub.rusttpl +21 -0
- data/vendor/rust/rust/templates/CxxClassDefinitions.rusttpl +91 -0
- data/vendor/rust/rust/templates/CxxMethodStub.rusttpl +12 -0
- data/vendor/rust/rust/templates/CxxStandaloneClassDefinitions.rusttpl +26 -0
- data/vendor/rust/rust/templates/EnumDeclarations.rusttpl +3 -0
- data/vendor/rust/rust/templates/EnumDefinitions.rusttpl +29 -0
- data/vendor/rust/rust/templates/FunctionDefinition.rusttpl +9 -0
- data/vendor/rust/rust/templates/FunctionInitAlias.rusttpl +5 -0
- data/vendor/rust/rust/templates/FunctionInitBinding.rusttpl +9 -0
- data/vendor/rust/rust/templates/MethodInitBinding.rusttpl +9 -0
- data/vendor/rust/rust/templates/ModuleDeclarations.rusttpl +3 -0
- data/vendor/rust/rust/templates/ModuleDefinitions.rusttpl +3 -0
- data/vendor/rust/rust/templates/StandaloneClassDeclarations.rusttpl +7 -0
- data/vendor/rust/rust/templates/VariableFunctionCall.rusttpl +14 -0
- data/vendor/rust/rust/type.rb +98 -0
- data/vendor/rust/test/Makefile +4 -0
- data/vendor/rust/test/constants.rb +36 -0
- data/vendor/rust/test/cppclass.cc +45 -0
- data/vendor/rust/test/cppclass.hh +67 -0
- data/vendor/rust/test/cppclass.rb +59 -0
- data/vendor/rust/test/cwrapper.c +74 -0
- data/vendor/rust/test/cwrapper.h +41 -0
- data/vendor/rust/test/cwrapper.rb +56 -0
- data/vendor/rust/test/dummyclass.hh +31 -0
- data/vendor/rust/test/lib/extension-test.rb +98 -0
- data/vendor/rust/test/operators.cc +41 -0
- data/vendor/rust/test/operators.hh +39 -0
- data/vendor/rust/test/operators.rb +39 -0
- data/vendor/rust/test/test-constants.rb +43 -0
- data/vendor/rust/test/test-cppclass.rb +82 -0
- data/vendor/rust/test/test-cwrapper.rb +80 -0
- data/vendor/rust/test/test-operators.rb +42 -0
- metadata +826 -0
@@ -0,0 +1,118 @@
|
|
1
|
+
/*
|
2
|
+
* Main authors:
|
3
|
+
* Mikael Lagerkvist <lagerkvist@gecode.org>
|
4
|
+
*
|
5
|
+
* Copyright:
|
6
|
+
* Mikael Lagerkvist, 2005
|
7
|
+
*
|
8
|
+
* Bugfixes provided by:
|
9
|
+
* Olof Sivertsson <olof@olofsivertsson.com>
|
10
|
+
*
|
11
|
+
* Last modified:
|
12
|
+
* $Date: 2006-08-04 16:05:26 +0200 (Fri, 04 Aug 2006) $ by $Author: schulte $
|
13
|
+
* $Revision: 3513 $
|
14
|
+
*
|
15
|
+
* This file is part of Gecode, the generic constraint
|
16
|
+
* development environment:
|
17
|
+
* http://www.gecode.org
|
18
|
+
*
|
19
|
+
* See the file "LICENSE" for information on usage and
|
20
|
+
* redistribution of this file, and for a
|
21
|
+
* DISCLAIMER OF ALL WARRANTIES.
|
22
|
+
*
|
23
|
+
*/
|
24
|
+
|
25
|
+
namespace Gecode { namespace MiniModel {
|
26
|
+
|
27
|
+
template <class A>
|
28
|
+
inline
|
29
|
+
Matrix<A>::Slice::Slice(Matrix<A>& a,
|
30
|
+
unsigned int fc, unsigned int tc,
|
31
|
+
unsigned int fr, unsigned int tr)
|
32
|
+
: _r(0), _fc(fc), _tc(tc), _fr(fr), _tr(tr) {
|
33
|
+
if (tc > a.width() || tr > a.height())
|
34
|
+
throw ArgumentOutOfRange("MiniModel::Matrix::Slice::Slice");
|
35
|
+
if (fc >= tc || fr >= tr)
|
36
|
+
throw ArgumentOutOfRange("MiniModel::Matrix::Slice::Slice");
|
37
|
+
|
38
|
+
_r = args_type((tc-fc)*(tr-fr));
|
39
|
+
|
40
|
+
int i = 0;
|
41
|
+
for (unsigned int h = fr; h < tr; ++h) {
|
42
|
+
for (unsigned int w = fc; w < tc; ++w) {
|
43
|
+
_r[i++] = a(w, h);
|
44
|
+
}
|
45
|
+
}
|
46
|
+
}
|
47
|
+
|
48
|
+
template <class A>
|
49
|
+
inline
|
50
|
+
Matrix<A>::Slice::operator typename Matrix<A>::args_type(void) {
|
51
|
+
return _r;
|
52
|
+
}
|
53
|
+
template <class A>
|
54
|
+
inline
|
55
|
+
Matrix<A>::Slice::operator Matrix<typename Matrix<A>::args_type>(void) {
|
56
|
+
return Matrix<args_type>(_r, _tc-_fc, _tr-_fr);
|
57
|
+
}
|
58
|
+
|
59
|
+
|
60
|
+
template <class A>
|
61
|
+
inline
|
62
|
+
Matrix<A>::Matrix(A a, unsigned int w, unsigned int h)
|
63
|
+
: _a(a), _w(w), _h(h) {
|
64
|
+
if (_w * _h != static_cast<unsigned int>(_a.size()))
|
65
|
+
throw ArgumentSizeMismatch("MiniModel::Matrix::Matrix(A, w, h)");
|
66
|
+
}
|
67
|
+
|
68
|
+
template <class A>
|
69
|
+
inline
|
70
|
+
Matrix<A>::Matrix(A a, unsigned int n)
|
71
|
+
: _a(a), _w(n), _h(n) {
|
72
|
+
if (n*n != static_cast<unsigned int>(_a.size()))
|
73
|
+
throw ArgumentSizeMismatch("MiniModel::Matrix::Matrix(A, n)");
|
74
|
+
}
|
75
|
+
|
76
|
+
template <class A>
|
77
|
+
inline unsigned int
|
78
|
+
Matrix<A>::width(void) const { return _w; }
|
79
|
+
template <class A>
|
80
|
+
inline unsigned int
|
81
|
+
Matrix<A>::height(void) const { return _h; }
|
82
|
+
template <class A>
|
83
|
+
inline typename Matrix<A>::args_type const
|
84
|
+
Matrix<A>::get_array(void) {
|
85
|
+
return args_type(_a);
|
86
|
+
}
|
87
|
+
|
88
|
+
template <class A>
|
89
|
+
inline typename Matrix<A>::value_type&
|
90
|
+
Matrix<A>::operator()(unsigned int c, unsigned int r) {
|
91
|
+
if (c >= _w || r >= _h)
|
92
|
+
throw ArgumentOutOfRange("MiniModel::Matrix::operator()");
|
93
|
+
|
94
|
+
return _a[r*_w + c];
|
95
|
+
}
|
96
|
+
|
97
|
+
template <class A>
|
98
|
+
inline typename Matrix<A>::Slice
|
99
|
+
Matrix<A>::slice(unsigned int fc, unsigned int tc,
|
100
|
+
unsigned int fr, unsigned int tr) {
|
101
|
+
return Slice(*this, fc, tc, fr, tr);
|
102
|
+
}
|
103
|
+
|
104
|
+
template <class A>
|
105
|
+
inline typename Matrix<A>::args_type
|
106
|
+
Matrix<A>::row(int r) {
|
107
|
+
return slice(0, width(), r, r+1);
|
108
|
+
}
|
109
|
+
|
110
|
+
template <class A>
|
111
|
+
inline typename Matrix<A>::args_type
|
112
|
+
Matrix<A>::col(int c) {
|
113
|
+
return slice(c, c+1, 0, height());
|
114
|
+
}
|
115
|
+
|
116
|
+
}}
|
117
|
+
|
118
|
+
// STATISTICS: minimodel-any
|
@@ -0,0 +1,241 @@
|
|
1
|
+
/*
|
2
|
+
* Main authors:
|
3
|
+
* Mikael Lagerkvist <lagerkvist@gecode.org>
|
4
|
+
*
|
5
|
+
* Copyright:
|
6
|
+
* Mikael Lagerkvist, 2005
|
7
|
+
*
|
8
|
+
* Last modified:
|
9
|
+
* $Date: 2006-09-04 14:13:40 +0200 (Mon, 04 Sep 2006) $ by $Author: zayenz $
|
10
|
+
* $Revision: 3584 $
|
11
|
+
*
|
12
|
+
* This file is part of Gecode, the generic constraint
|
13
|
+
* development environment:
|
14
|
+
* http://www.gecode.org
|
15
|
+
*
|
16
|
+
* See the file "LICENSE" for information on usage and
|
17
|
+
* redistribution of this file, and for a
|
18
|
+
* DISCLAIMER OF ALL WARRANTIES.
|
19
|
+
*
|
20
|
+
*/
|
21
|
+
|
22
|
+
#include "gecode/minimodel.hh"
|
23
|
+
|
24
|
+
#include <algorithm>
|
25
|
+
|
26
|
+
namespace Gecode {
|
27
|
+
|
28
|
+
using namespace Int;
|
29
|
+
|
30
|
+
void
|
31
|
+
producer_consumer(Space *home,
|
32
|
+
const IntVarArgs& produce_date, const IntArgs& produce_amount,
|
33
|
+
const IntVarArgs& consume_date, const IntArgs& consume_amount,
|
34
|
+
int initial, IntConLevel cl)
|
35
|
+
{
|
36
|
+
if (produce_date.size() != produce_amount.size() ||
|
37
|
+
consume_date.size() != consume_amount.size())
|
38
|
+
throw new ArgumentSizeMismatch("Minimodel::producer_consumer");
|
39
|
+
|
40
|
+
int ntasks = produce_date.size() + consume_date.size();
|
41
|
+
|
42
|
+
IntArgs machine(ntasks), height(ntasks), limit(1);
|
43
|
+
IntVarArgs start(ntasks), duration(ntasks), end(ntasks);
|
44
|
+
|
45
|
+
int i = 0;
|
46
|
+
int sum_height = initial;
|
47
|
+
if (initial < Limits::Int::int_min ||
|
48
|
+
initial > Limits::Int::int_max)
|
49
|
+
throw new NumericalOverflow("MiniModel::producer_consumer");
|
50
|
+
|
51
|
+
int maxval = 0;
|
52
|
+
for (int j = produce_date.size(); j--; )
|
53
|
+
maxval = std::max(produce_date[i].max(), maxval);
|
54
|
+
for (int j = consume_date.size(); j--; )
|
55
|
+
maxval = std::max(consume_date[j].max(), maxval);
|
56
|
+
++maxval;
|
57
|
+
|
58
|
+
IntVar minvar = IntVar(home, 0, 0);
|
59
|
+
IntVar maxvar = IntVar(home, maxval, maxval);
|
60
|
+
|
61
|
+
|
62
|
+
// Construct producer tasks
|
63
|
+
for (int k = produce_date.size(); k--; ++i) {
|
64
|
+
sum_height += produce_amount[k];
|
65
|
+
machine[i] = 0;
|
66
|
+
|
67
|
+
start[i] = minvar;
|
68
|
+
end[i] = produce_date[k];
|
69
|
+
duration[i] = IntVar(home, end[i].min(), end[i].max());
|
70
|
+
height[i] = produce_amount[k];
|
71
|
+
if (height[i] < Limits::Int::int_min ||
|
72
|
+
height[i] > Limits::Int::int_max)
|
73
|
+
throw new NumericalOverflow("MiniModel::producer_consumer");
|
74
|
+
}
|
75
|
+
|
76
|
+
// Construct consumer tasks
|
77
|
+
for (int k = consume_date.size(); k--; ++i) {
|
78
|
+
machine[i] = 0;
|
79
|
+
|
80
|
+
start[i] = consume_date[k];
|
81
|
+
end[i] = maxvar;
|
82
|
+
duration[i] = IntVar(home, maxval - start[i].max(),
|
83
|
+
maxval - start[i].min());
|
84
|
+
height[i] = consume_amount[k];
|
85
|
+
if (height[i] < Limits::Int::int_min ||
|
86
|
+
height[i] > Limits::Int::int_max)
|
87
|
+
throw new NumericalOverflow("MiniModel::producer_consumer");
|
88
|
+
}
|
89
|
+
|
90
|
+
limit[0] = sum_height;
|
91
|
+
|
92
|
+
cumulatives(home, machine, start, duration, end, height, limit, true, cl);
|
93
|
+
}
|
94
|
+
|
95
|
+
|
96
|
+
namespace {
|
97
|
+
/// Delayed optimized construction of constant value.
|
98
|
+
class ConstVar {
|
99
|
+
Space *home_;
|
100
|
+
int val_;
|
101
|
+
public:
|
102
|
+
ConstVar(Space *home, int val) : home_(home), val_(val) {}
|
103
|
+
|
104
|
+
operator int() { return val_; }
|
105
|
+
operator IntVar() { return IntVar(home_, val_, val_); }
|
106
|
+
};
|
107
|
+
|
108
|
+
/// Return an IntVar representing the constant value \a val
|
109
|
+
IntVar make_intvar(Space *home, int val)
|
110
|
+
{
|
111
|
+
return IntVar(home, val, val);
|
112
|
+
}
|
113
|
+
|
114
|
+
/// Return the IntVar \a iv directly
|
115
|
+
IntVar make_intvar(Space *home, IntVar iv)
|
116
|
+
{
|
117
|
+
return iv;
|
118
|
+
}
|
119
|
+
|
120
|
+
template<class Duration, class Height>
|
121
|
+
void
|
122
|
+
post_cumulative(Space *home, const IntVarArgs& start, const Duration& duration,
|
123
|
+
const Height& height, int limit, bool at_most, IntConLevel cl)
|
124
|
+
{
|
125
|
+
if (start.size() != duration.size() ||
|
126
|
+
duration.size() != height.size())
|
127
|
+
throw new ArgumentSizeMismatch("MiniModel::cumulative");
|
128
|
+
|
129
|
+
if (limit < Limits::Int::int_min ||
|
130
|
+
limit > Limits::Int::int_max)
|
131
|
+
throw new NumericalOverflow("MiniModel::cumulative");
|
132
|
+
|
133
|
+
int n = start.size() + !at_most;
|
134
|
+
IntArgs m(n), l(1, limit);
|
135
|
+
IntVarArgs s(n), d(n), e(n);
|
136
|
+
Height h(n);
|
137
|
+
|
138
|
+
if (!at_most) {
|
139
|
+
int smin = Limits::Int::int_max,
|
140
|
+
smax = Limits::Int::int_min,
|
141
|
+
emin = Limits::Int::int_max,
|
142
|
+
emax = Limits::Int::int_min;
|
143
|
+
IntVarArgs end(n-1);
|
144
|
+
for (int i = start.size(); i--; ) {
|
145
|
+
m[i] = 0;
|
146
|
+
s[i] = start[i];
|
147
|
+
smin = std::min(s[i].min(), smin);
|
148
|
+
smax = std::max(s[i].max(), smax);
|
149
|
+
d[i] = make_intvar(home, duration[i]);
|
150
|
+
e[i] = IntVar(home, Limits::Int::int_min, Limits::Int::int_max);
|
151
|
+
end[i] = e[i];
|
152
|
+
emin = std::min(e[i].min(), emin);
|
153
|
+
emax = std::max(e[i].max(), emax);
|
154
|
+
h[i] = height[i];
|
155
|
+
}
|
156
|
+
m[n-1] = 0;
|
157
|
+
s[n-1] = IntVar(home, smin, smax);
|
158
|
+
d[n-1] = IntVar(home, 0, emax - smin);
|
159
|
+
e[n-1] = IntVar(home, emin, emax);
|
160
|
+
h[n-1] = ConstVar(home, 0);
|
161
|
+
|
162
|
+
min(home, start, s[n-1]);
|
163
|
+
max(home, end, e[n-1]);
|
164
|
+
} else {
|
165
|
+
for (int i = start.size(); i--; ) {
|
166
|
+
m[i] = 0;
|
167
|
+
s[i] = start[i];
|
168
|
+
d[i] = make_intvar(home, duration[i]);
|
169
|
+
e[i] = IntVar(home, s[i].min()+d[i].min(), s[i].max()+d[i].max());
|
170
|
+
h[i] = height[i];
|
171
|
+
}
|
172
|
+
}
|
173
|
+
|
174
|
+
cumulatives(home, m, s, d, e, h, l, at_most, cl);
|
175
|
+
}
|
176
|
+
|
177
|
+
}
|
178
|
+
|
179
|
+
void
|
180
|
+
cumulative(Space *home, const IntVarArgs& start, const IntVarArgs& duration,
|
181
|
+
const IntVarArgs& height, int limit, bool at_most, IntConLevel cl)
|
182
|
+
{
|
183
|
+
post_cumulative(home, start, duration, height, limit, at_most, cl);
|
184
|
+
}
|
185
|
+
|
186
|
+
void
|
187
|
+
cumulative(Space *home, const IntVarArgs& start, const IntArgs& duration,
|
188
|
+
const IntVarArgs& height, int limit, bool at_most, IntConLevel cl)
|
189
|
+
{
|
190
|
+
post_cumulative(home, start, duration, height, limit, at_most, cl);
|
191
|
+
}
|
192
|
+
|
193
|
+
void
|
194
|
+
cumulative(Space *home, const IntVarArgs& start, const IntVarArgs& duration,
|
195
|
+
const IntArgs& height, int limit, bool at_most, IntConLevel cl)
|
196
|
+
{
|
197
|
+
post_cumulative(home, start, duration, height, limit, at_most, cl);
|
198
|
+
}
|
199
|
+
|
200
|
+
void
|
201
|
+
cumulative(Space *home, const IntVarArgs& start, const IntArgs& duration,
|
202
|
+
const IntArgs& height, int limit, bool at_most, IntConLevel cl)
|
203
|
+
{
|
204
|
+
post_cumulative(home, start, duration, height, limit, at_most, cl);
|
205
|
+
}
|
206
|
+
|
207
|
+
|
208
|
+
namespace {
|
209
|
+
template <class Duration>
|
210
|
+
void
|
211
|
+
post_serialized(Space *home, const IntVarArgs& start, const Duration& duration,
|
212
|
+
IntConLevel cl)
|
213
|
+
{
|
214
|
+
if (start.size() != duration.size())
|
215
|
+
throw new ArgumentSizeMismatch("MiniModel::serialized");
|
216
|
+
|
217
|
+
IntArgs height(start.size());
|
218
|
+
for (int i = start.size(); i--; ) height[i] = 1;
|
219
|
+
|
220
|
+
post_cumulative(home, start, duration, height, 1, true, cl);
|
221
|
+
}
|
222
|
+
}
|
223
|
+
|
224
|
+
void
|
225
|
+
serialized(Space *home, const IntVarArgs& start, const IntVarArgs& duration,
|
226
|
+
IntConLevel cl)
|
227
|
+
{
|
228
|
+
post_serialized(home, start, duration, cl);
|
229
|
+
}
|
230
|
+
|
231
|
+
|
232
|
+
void
|
233
|
+
serialized(Space *home, const IntVarArgs& start, const IntArgs& duration,
|
234
|
+
IntConLevel cl)
|
235
|
+
{
|
236
|
+
post_serialized(home, start, duration, cl);
|
237
|
+
}
|
238
|
+
|
239
|
+
}
|
240
|
+
|
241
|
+
// STATISTICS: minimodel-any
|
@@ -0,0 +1,745 @@
|
|
1
|
+
/*
|
2
|
+
* Main authors:
|
3
|
+
* Christian Schulte <schulte@gecode.org>
|
4
|
+
* Guido Tack <tack@gecode.org>
|
5
|
+
*
|
6
|
+
* Copyright:
|
7
|
+
* Christian Schulte, 2002
|
8
|
+
* Guido Tack, 2004
|
9
|
+
*
|
10
|
+
* Last modified:
|
11
|
+
* $Date: 2006-08-04 16:06:38 +0200 (Fri, 04 Aug 2006) $ by $Author: schulte $
|
12
|
+
* $Revision: 3516 $
|
13
|
+
*
|
14
|
+
* This file is part of Gecode, the generic constraint
|
15
|
+
* development environment:
|
16
|
+
* http://www.gecode.org
|
17
|
+
*
|
18
|
+
* See the file "LICENSE" for information on usage and
|
19
|
+
* redistribution of this file, and for a
|
20
|
+
* DISCLAIMER OF ALL WARRANTIES.
|
21
|
+
*
|
22
|
+
*/
|
23
|
+
|
24
|
+
#ifndef __GECODE_SEARCH_HH__
|
25
|
+
#define __GECODE_SEARCH_HH__
|
26
|
+
|
27
|
+
#include <ctime>
|
28
|
+
|
29
|
+
#include "gecode/kernel.hh"
|
30
|
+
|
31
|
+
/*
|
32
|
+
* Support for DLLs under Windows
|
33
|
+
*
|
34
|
+
*/
|
35
|
+
|
36
|
+
#if !defined(GECODE_STATIC_LIBS) && \
|
37
|
+
(defined(__CYGWIN__) || defined(__MINGW32__) || defined(_MSC_VER))
|
38
|
+
|
39
|
+
#ifdef GECODE_BUILD_SEARCH
|
40
|
+
#define GECODE_SEARCH_EXPORT __declspec( dllexport )
|
41
|
+
#else
|
42
|
+
#define GECODE_SEARCH_EXPORT __declspec( dllimport )
|
43
|
+
#endif
|
44
|
+
|
45
|
+
#else
|
46
|
+
|
47
|
+
#ifdef GCC_HASCLASSVISIBILITY
|
48
|
+
|
49
|
+
#define GECODE_SEARCH_EXPORT __attribute__ ((visibility("default")))
|
50
|
+
|
51
|
+
#else
|
52
|
+
|
53
|
+
#define GECODE_SEARCH_EXPORT
|
54
|
+
|
55
|
+
#endif
|
56
|
+
#endif
|
57
|
+
|
58
|
+
#include "gecode/support/dynamic-stack.hh"
|
59
|
+
|
60
|
+
namespace Gecode {
|
61
|
+
|
62
|
+
/// %Search engines
|
63
|
+
namespace Search {
|
64
|
+
|
65
|
+
/**
|
66
|
+
* \brief %Search configuration
|
67
|
+
*
|
68
|
+
* \ingroup TaskIntSearch
|
69
|
+
*/
|
70
|
+
namespace Config {
|
71
|
+
/// Create a clone after every \a c_d commits
|
72
|
+
const unsigned int c_d = 8;
|
73
|
+
/// Create a clone during recomputation if distance is greater than \a a_d
|
74
|
+
const unsigned int a_d = 2;
|
75
|
+
}
|
76
|
+
|
77
|
+
/**
|
78
|
+
* \brief %Search engine statistics
|
79
|
+
* \ingroup TaskIntSearch
|
80
|
+
*/
|
81
|
+
class Statistics {
|
82
|
+
public:
|
83
|
+
/// Number of propagation steps
|
84
|
+
unsigned long int propagate;
|
85
|
+
/// Number of failed nodes in search tree
|
86
|
+
unsigned long int fail;
|
87
|
+
/// Number of clones created
|
88
|
+
unsigned long int clone;
|
89
|
+
/// Number of commit operations performed
|
90
|
+
unsigned long int commit;
|
91
|
+
/// Peak memory allocated
|
92
|
+
size_t memory;
|
93
|
+
/// Initialize with all numbers zero
|
94
|
+
Statistics(void);
|
95
|
+
};
|
96
|
+
|
97
|
+
|
98
|
+
/**
|
99
|
+
* \defgroup TaskIntSearchStop Stop-objects for stopping search
|
100
|
+
* \ingroup TaskIntSearch
|
101
|
+
*
|
102
|
+
* Allows to specify various criteria when a search engine should
|
103
|
+
* stop exploration. Only exploration but neither recomputation
|
104
|
+
* nor propagation will be interrupted.
|
105
|
+
*
|
106
|
+
*/
|
107
|
+
|
108
|
+
/**
|
109
|
+
* \brief Base-class for %Stop-object
|
110
|
+
* \ingroup TaskIntSearchStop
|
111
|
+
*/
|
112
|
+
class GECODE_SEARCH_EXPORT Stop {
|
113
|
+
public:
|
114
|
+
/// Default constructor
|
115
|
+
Stop(void);
|
116
|
+
/// Stop search, if returns true (can be based on statistics \a s)
|
117
|
+
virtual bool stop(const Statistics& s) = 0;
|
118
|
+
/// Destructor
|
119
|
+
virtual ~Stop(void);
|
120
|
+
};
|
121
|
+
|
122
|
+
/**
|
123
|
+
* \brief %Stop-object based on memory consumption
|
124
|
+
*
|
125
|
+
* \ingroup TaskIntSearchStop
|
126
|
+
*/
|
127
|
+
class GECODE_SEARCH_EXPORT MemoryStop : public Stop {
|
128
|
+
protected:
|
129
|
+
/// Size limit
|
130
|
+
size_t l;
|
131
|
+
public:
|
132
|
+
/// Stop if memory limit \a l (in bytes) is exceeded
|
133
|
+
MemoryStop(size_t l);
|
134
|
+
/// Return current limit
|
135
|
+
size_t limit(void) const;
|
136
|
+
/// Set current limit to \a l (in bytes)
|
137
|
+
void limit(size_t l);
|
138
|
+
/// Return true if memory limit is exceeded
|
139
|
+
virtual bool stop(const Statistics& s);
|
140
|
+
};
|
141
|
+
|
142
|
+
/**
|
143
|
+
* \brief %Stop-object based on number of failures
|
144
|
+
*
|
145
|
+
* The number of failures reported (by the statistics) is the
|
146
|
+
* number since the engine started exploration. It is not the
|
147
|
+
* number since the last stop!
|
148
|
+
* \ingroup TaskIntSearchStop
|
149
|
+
*/
|
150
|
+
class GECODE_SEARCH_EXPORT FailStop : public Stop {
|
151
|
+
protected:
|
152
|
+
/// Failure limit
|
153
|
+
unsigned long int l;
|
154
|
+
public:
|
155
|
+
/// Stop if failure limit \a l is exceeded
|
156
|
+
FailStop(unsigned long int l);
|
157
|
+
/// Return current limit
|
158
|
+
unsigned long int limit(void) const;
|
159
|
+
/// Set current limit to \a l failures
|
160
|
+
void limit(unsigned long int l);
|
161
|
+
/// Return true if failure limit is exceeded
|
162
|
+
virtual bool stop(const Statistics& s);
|
163
|
+
};
|
164
|
+
|
165
|
+
/**
|
166
|
+
* \brief %Stop-object based on time
|
167
|
+
* \ingroup TaskIntSearchStop
|
168
|
+
*/
|
169
|
+
class GECODE_SEARCH_EXPORT TimeStop : public Stop {
|
170
|
+
protected:
|
171
|
+
/// Clock when execution should stop
|
172
|
+
clock_t s;
|
173
|
+
/// Current limit in milliseconds
|
174
|
+
unsigned long int l;
|
175
|
+
public:
|
176
|
+
/// Stop if search exceeds \a l milliseconds (from creation of this object)
|
177
|
+
TimeStop(unsigned long int l);
|
178
|
+
/// Return current limit in milliseconds
|
179
|
+
unsigned long int limit(void) const;
|
180
|
+
/// Set current limit to \a l milliseconds
|
181
|
+
void limit(unsigned long int l);
|
182
|
+
/// Reset time to zero
|
183
|
+
void reset(void);
|
184
|
+
/// Return true if time limit is exceeded
|
185
|
+
virtual bool stop(const Statistics& s);
|
186
|
+
};
|
187
|
+
|
188
|
+
|
189
|
+
/**
|
190
|
+
* \brief %Search engine control including memory information
|
191
|
+
*/
|
192
|
+
class EngineCtrl : public Statistics {
|
193
|
+
protected:
|
194
|
+
/// %Stop-object to be used
|
195
|
+
Stop* st;
|
196
|
+
/// Whether engine has been stopped
|
197
|
+
bool _stopped;
|
198
|
+
/// Memory required for a single space
|
199
|
+
size_t mem_space;
|
200
|
+
/// Memory for the current space (including memory for caching)
|
201
|
+
size_t mem_cur;
|
202
|
+
/// Current total memory
|
203
|
+
size_t mem_total;
|
204
|
+
public:
|
205
|
+
/// Initialize with stop-object \a st and space size \a sz
|
206
|
+
EngineCtrl(Stop* st, size_t sz);
|
207
|
+
/// Reset stop information
|
208
|
+
void start(void);
|
209
|
+
/// Check whether engine must be stopped (with additional stackspace \a sz)
|
210
|
+
bool stop(size_t sz);
|
211
|
+
/// Check whether engine has been stopped
|
212
|
+
bool stopped(void) const;
|
213
|
+
/// New space \a s and branching description \a d get pushed on stack
|
214
|
+
void push(const Space* s, const BranchingDesc* d);
|
215
|
+
/// Space \a s1 is replaced by space \a s2 due to constraining
|
216
|
+
void constrained(const Space* s1, const Space* s2);
|
217
|
+
/// New space \a s is added for adaptive recomputation
|
218
|
+
void adapt(const Space* s);
|
219
|
+
/// Space \a s and branching description \a d get popped from stack
|
220
|
+
void pop(const Space* s, const BranchingDesc* d);
|
221
|
+
/// Space \a s gets used for LAO (removed from stack)
|
222
|
+
void lao(const Space* s);
|
223
|
+
/// Space \a s becomes current space (\a s = NULL: current space deleted)
|
224
|
+
void current(const Space* s);
|
225
|
+
/// Reset statistics for space \a s
|
226
|
+
void reset(const Space* s);
|
227
|
+
};
|
228
|
+
|
229
|
+
/**
|
230
|
+
* \brief %Search tree node for recomputation
|
231
|
+
*
|
232
|
+
*/
|
233
|
+
class ReCoNode {
|
234
|
+
protected:
|
235
|
+
/// Space corresponding to this node (might be NULL)
|
236
|
+
Space* _space;
|
237
|
+
/// Current alternative
|
238
|
+
unsigned int _alt;
|
239
|
+
/// Braching description
|
240
|
+
const BranchingDesc* _desc;
|
241
|
+
public:
|
242
|
+
/// Node for space \a s with clone \a c (possibly NULL)
|
243
|
+
ReCoNode(Space* s, Space* c);
|
244
|
+
|
245
|
+
/// Return space for node
|
246
|
+
Space* space(void) const;
|
247
|
+
/// Set space to \a s
|
248
|
+
void space(Space* s);
|
249
|
+
|
250
|
+
/// Return branching description
|
251
|
+
const BranchingDesc* desc(void) const;
|
252
|
+
|
253
|
+
/// Return number for alternatives
|
254
|
+
unsigned int alt(void) const;
|
255
|
+
/// Test whether current alternative is rightmost
|
256
|
+
bool rightmost(void) const;
|
257
|
+
/// Move to next alternative
|
258
|
+
void next(void);
|
259
|
+
|
260
|
+
/// Free memory for node
|
261
|
+
void dispose(void);
|
262
|
+
};
|
263
|
+
|
264
|
+
|
265
|
+
/**
|
266
|
+
* \brief Stack of nodes supporting recomputation
|
267
|
+
*
|
268
|
+
* Maintains the invariant that it contains
|
269
|
+
* the path of the node being currently explored. This
|
270
|
+
* is required to support recomputation, of course.
|
271
|
+
*
|
272
|
+
* The stack supports adaptive recomputation controlled
|
273
|
+
* by the value of a_d: only if the recomputation
|
274
|
+
* distance is at least this large, an additional
|
275
|
+
* clone is created.
|
276
|
+
*
|
277
|
+
*/
|
278
|
+
class ReCoStack {
|
279
|
+
private:
|
280
|
+
/// Stack to store node information
|
281
|
+
Support::DynamicStack<ReCoNode> ds;
|
282
|
+
/// Adaptive recomputation distance
|
283
|
+
const unsigned int a_d;
|
284
|
+
public:
|
285
|
+
/// Initialize with adaptive recomputation distance \a a_d
|
286
|
+
ReCoStack(unsigned int a_d);
|
287
|
+
/// Push space \a c (a clone of \a s or NULL)
|
288
|
+
const BranchingDesc* push(Space* s, Space* c);
|
289
|
+
/// Generate path for next node and return whether a next node exists
|
290
|
+
bool next(EngineCtrl& s);
|
291
|
+
/// Return position on stack of last copy
|
292
|
+
int lc(Space*& s) const;
|
293
|
+
/// Unwind the stack up to position \a l (after failure)
|
294
|
+
void unwind(int l);
|
295
|
+
/// Commit space \a s as described by stack entry at position \a i
|
296
|
+
void commit(Space* s, int i) const;
|
297
|
+
/**
|
298
|
+
* \brief Recompute space according to path with copying distance \a d
|
299
|
+
*
|
300
|
+
* The template parameter \a constrained describes whether the stack
|
301
|
+
* might contain spaces not propagated (from constraining during
|
302
|
+
* branch-and-bound).
|
303
|
+
*/
|
304
|
+
template <bool constrained>
|
305
|
+
Space* recompute(unsigned int& d, EngineCtrl& s);
|
306
|
+
/// Return number of entries on stack
|
307
|
+
int entries(void) const;
|
308
|
+
/// Return stack size used
|
309
|
+
size_t stacksize(void) const;
|
310
|
+
/// Reset stack
|
311
|
+
void reset(void);
|
312
|
+
};
|
313
|
+
|
314
|
+
/**
|
315
|
+
* \brief Depth-first search engine implementation
|
316
|
+
*
|
317
|
+
*/
|
318
|
+
class DfsEngine : public EngineCtrl {
|
319
|
+
private:
|
320
|
+
/// Recomputation stack of nodes
|
321
|
+
ReCoStack rcs;
|
322
|
+
/// Current space being explored
|
323
|
+
Space* cur;
|
324
|
+
/// Copying recomputation distance
|
325
|
+
const unsigned int c_d;
|
326
|
+
/// Distance until next clone
|
327
|
+
unsigned int d;
|
328
|
+
public:
|
329
|
+
/**
|
330
|
+
* \brief Initialize engine
|
331
|
+
* \param c_d minimal recomputation distance
|
332
|
+
* \param a_d adaptive recomputation distance
|
333
|
+
* \param st %Stop-object
|
334
|
+
* \param sz size of one space
|
335
|
+
*/
|
336
|
+
DfsEngine(unsigned int c_d, unsigned int a_d, Stop* st, size_t sz);
|
337
|
+
/// Initialize engine to start at space \a s
|
338
|
+
void init(Space* s);
|
339
|
+
/// Reset engine to restart at space \a s
|
340
|
+
void reset(Space* s);
|
341
|
+
/// %Search for next solution
|
342
|
+
Space* explore(void);
|
343
|
+
/// Return stack size used by engine
|
344
|
+
size_t stacksize(void) const;
|
345
|
+
/// Destructor
|
346
|
+
~DfsEngine(void);
|
347
|
+
};
|
348
|
+
|
349
|
+
/**
|
350
|
+
* \brief Depth-first search engine
|
351
|
+
*
|
352
|
+
* This class implements depth-first exploration for spaces. In order to
|
353
|
+
* use depth-first search on subclasses of Space, additional
|
354
|
+
* functionality providing the necessary typecasts is available
|
355
|
+
* in Gecode::DFS.
|
356
|
+
*/
|
357
|
+
class GECODE_SEARCH_EXPORT DFS {
|
358
|
+
protected:
|
359
|
+
/// Engine used for exploration
|
360
|
+
DfsEngine e;
|
361
|
+
public:
|
362
|
+
/**
|
363
|
+
* \brief Initialize search engine
|
364
|
+
* \param s root node (subclass of Space)
|
365
|
+
* \param c_d minimal recomputation distance
|
366
|
+
* \param a_d adaptive recomputation distance
|
367
|
+
* \param st %Stop-object
|
368
|
+
* \param sz size of one space
|
369
|
+
*/
|
370
|
+
DFS(Space* s, unsigned int c_d, unsigned int a_d, Stop* st, size_t sz);
|
371
|
+
/// Return next solution (NULL, if none exists or search has been stopped)
|
372
|
+
Space* next(void);
|
373
|
+
/// Return statistics
|
374
|
+
Statistics statistics(void) const;
|
375
|
+
/// Check whether engine has been stopped
|
376
|
+
bool stopped(void) const;
|
377
|
+
};
|
378
|
+
|
379
|
+
}
|
380
|
+
|
381
|
+
/**
|
382
|
+
* \brief Depth-first search engine
|
383
|
+
*
|
384
|
+
* This class supports depth-first search for subclasses \a T of
|
385
|
+
* Space.
|
386
|
+
* \ingroup TaskIntSearch
|
387
|
+
*/
|
388
|
+
template <class T>
|
389
|
+
class DFS : public Search::DFS {
|
390
|
+
public:
|
391
|
+
/**
|
392
|
+
* \brief Initialize search engine
|
393
|
+
* \param s root node (subclass of Space)
|
394
|
+
* \param c_d minimal recomputation distance
|
395
|
+
* \param a_d adaptive recomputation distance
|
396
|
+
* \param st %Stop-object
|
397
|
+
*/
|
398
|
+
DFS(T* s,
|
399
|
+
unsigned int c_d=Search::Config::c_d,
|
400
|
+
unsigned int a_d=Search::Config::a_d,
|
401
|
+
Search::Stop* st=NULL);
|
402
|
+
/// Return next solution (NULL, if none exists or search has been stopped)
|
403
|
+
T* next(void);
|
404
|
+
};
|
405
|
+
|
406
|
+
/**
|
407
|
+
* \brief Invoke depth-first search engine
|
408
|
+
* \param s root node (subclass \a T of Space)
|
409
|
+
* \param c_d minimal recomputation distance
|
410
|
+
* \param a_d adaptive recomputation distance
|
411
|
+
* \param st %Stop-object
|
412
|
+
* \ingroup TaskIntSearch
|
413
|
+
*/
|
414
|
+
template <class T>
|
415
|
+
T* dfs(T* s,
|
416
|
+
unsigned int c_d=Search::Config::c_d,
|
417
|
+
unsigned int a_d=Search::Config::a_d,
|
418
|
+
Search::Stop* st=NULL);
|
419
|
+
|
420
|
+
|
421
|
+
|
422
|
+
namespace Search {
|
423
|
+
|
424
|
+
/**
|
425
|
+
* \brief Probing engine for %LDS
|
426
|
+
*
|
427
|
+
*/
|
428
|
+
class ProbeEngine : public EngineCtrl {
|
429
|
+
protected:
|
430
|
+
/// %Node in the search tree for %LDS
|
431
|
+
class ProbeNode {
|
432
|
+
private:
|
433
|
+
/// %Space of current node
|
434
|
+
Space* _space;
|
435
|
+
/// Branching description
|
436
|
+
const BranchingDesc* _desc;
|
437
|
+
/// Next alternative to try
|
438
|
+
unsigned int _alt;
|
439
|
+
public:
|
440
|
+
/// Initialize with node \a s, description \a d, and alternative \a a
|
441
|
+
ProbeNode(Space* s, const BranchingDesc* d, unsigned int a);
|
442
|
+
/// Return space
|
443
|
+
Space* space(void) const;
|
444
|
+
/// Return branching description
|
445
|
+
const BranchingDesc* desc(void) const;
|
446
|
+
/// Return next alternative
|
447
|
+
unsigned int alt(void) const;
|
448
|
+
/// %Set next alternative
|
449
|
+
void next(void);
|
450
|
+
};
|
451
|
+
/// %Stack storing current path in search tree
|
452
|
+
Support::DynamicStack<ProbeNode> ds;
|
453
|
+
/// Current space
|
454
|
+
Space* cur;
|
455
|
+
/// Current discrepancy
|
456
|
+
unsigned int d;
|
457
|
+
public:
|
458
|
+
/// Initialize for spaces of size \a s
|
459
|
+
ProbeEngine(Stop* st, size_t s);
|
460
|
+
/// Initialize with space \a s and discrepancy \a d
|
461
|
+
void init(Space* s, unsigned int d);
|
462
|
+
/// Reset with space \a s and discrepancy \a d
|
463
|
+
void reset(Space* s, unsigned int d);
|
464
|
+
/// Return stack size used by engine
|
465
|
+
size_t stacksize(void) const;
|
466
|
+
/// Destructor
|
467
|
+
~ProbeEngine(void);
|
468
|
+
/// %Search for next solution
|
469
|
+
Space* explore(void);
|
470
|
+
};
|
471
|
+
|
472
|
+
/**
|
473
|
+
* \brief Limited discrepancy search engine
|
474
|
+
*/
|
475
|
+
class GECODE_SEARCH_EXPORT LDS {
|
476
|
+
protected:
|
477
|
+
Space* root; ///< Root node for problem
|
478
|
+
unsigned int d_cur; ///< Current discrepancy
|
479
|
+
unsigned int d_max; ///< Maximal discrepancy
|
480
|
+
bool no_solution; ///< Solution found for current discrepancy
|
481
|
+
ProbeEngine e; ///< The probe engine
|
482
|
+
public:
|
483
|
+
/** Initialize engine
|
484
|
+
* \param s root node
|
485
|
+
* \param d maximal discrepancy
|
486
|
+
* \param st %Stop-object
|
487
|
+
* \param sz size of space
|
488
|
+
*/
|
489
|
+
LDS(Space* s, unsigned int d, Stop* st, size_t sz);
|
490
|
+
/// Return next solution (NULL, if none exists or search has been stopped)
|
491
|
+
Space* next(void);
|
492
|
+
/// Return statistics
|
493
|
+
Statistics statistics(void) const;
|
494
|
+
/// Check whether engine has been stopped
|
495
|
+
bool stopped(void) const;
|
496
|
+
/// Destructor
|
497
|
+
~LDS(void);
|
498
|
+
};
|
499
|
+
|
500
|
+
}
|
501
|
+
|
502
|
+
/**
|
503
|
+
* \brief Limited discrepancy search engine
|
504
|
+
* \ingroup TaskIntSearch
|
505
|
+
*/
|
506
|
+
template <class T>
|
507
|
+
class LDS : public Search::LDS {
|
508
|
+
public:
|
509
|
+
/** \brief Initialize engine
|
510
|
+
* \param s root node (subclass \a T of Space)
|
511
|
+
* \param d maximal discrepancy
|
512
|
+
* \param st %Stop-object
|
513
|
+
*/
|
514
|
+
LDS(T* s, unsigned int d, Search::Stop* st=NULL);
|
515
|
+
/// Return next solution (NULL, if none exists or search has been stopped)
|
516
|
+
T* next(void);
|
517
|
+
};
|
518
|
+
|
519
|
+
/**
|
520
|
+
* \brief Invoke limited-discrepancy search
|
521
|
+
* \param s root node (subclass \a T of Space)
|
522
|
+
* \param d maximum number of discrepancies
|
523
|
+
* \param st %Stop-object
|
524
|
+
* \ingroup TaskIntSearch
|
525
|
+
*/
|
526
|
+
template <class T>
|
527
|
+
T* lds(T* s,unsigned int d, Search::Stop* st=NULL);
|
528
|
+
|
529
|
+
|
530
|
+
|
531
|
+
|
532
|
+
|
533
|
+
/*
|
534
|
+
* Best solution search engines
|
535
|
+
*
|
536
|
+
*/
|
537
|
+
|
538
|
+
namespace Search {
|
539
|
+
|
540
|
+
/**
|
541
|
+
* \brief Implementation of depth-first branch-and-bound search engines
|
542
|
+
*/
|
543
|
+
class BabEngine : public EngineCtrl {
|
544
|
+
public:
|
545
|
+
/// Status of the explore function
|
546
|
+
enum ExploreStatus {
|
547
|
+
ES_SOLUTION,
|
548
|
+
ES_CONSTRAIN
|
549
|
+
};
|
550
|
+
private:
|
551
|
+
/// Recomputation stack of nodes
|
552
|
+
ReCoStack rcs;
|
553
|
+
/// Current space being explored
|
554
|
+
Space* cur;
|
555
|
+
/// Number of entries not yet constrained to be better
|
556
|
+
int mark;
|
557
|
+
/// Record which current operation is in progress
|
558
|
+
ExploreStatus es;
|
559
|
+
/// Best solution found so far
|
560
|
+
Space* best;
|
561
|
+
/// Copying recomputation distance
|
562
|
+
const unsigned int c_d;
|
563
|
+
/// Distance until next clone
|
564
|
+
unsigned int d;
|
565
|
+
public:
|
566
|
+
/**
|
567
|
+
* \brief Initialize engine
|
568
|
+
* \param c_d minimal recomputation distance
|
569
|
+
* \param a_d adaptive recomputation distance
|
570
|
+
* \param st %Stop-object
|
571
|
+
* \param sz size of one space
|
572
|
+
*/
|
573
|
+
BabEngine(unsigned int c_d, unsigned int a_d, Stop* st, size_t sz);
|
574
|
+
/// Initialize engine to start at space \a s
|
575
|
+
void init(Space* s);
|
576
|
+
/**
|
577
|
+
* \brief %Search for next better solution
|
578
|
+
*
|
579
|
+
* If \c ES_SOLUTION is returned, a next better solution has been found.
|
580
|
+
* This solution is available from \a s1.
|
581
|
+
*
|
582
|
+
* If \c ES_CONSTRAIN is returned, the engine requires that the
|
583
|
+
* space \a s1 is constrained to be better by the so-far best
|
584
|
+
* solution \a s2.
|
585
|
+
*
|
586
|
+
*/
|
587
|
+
GECODE_SEARCH_EXPORT
|
588
|
+
ExploreStatus explore(Space*& s1, Space*& s2);
|
589
|
+
/// Return stack size used by engine
|
590
|
+
size_t stacksize(void) const;
|
591
|
+
/// Destructor
|
592
|
+
~BabEngine(void);
|
593
|
+
};
|
594
|
+
|
595
|
+
/**
|
596
|
+
* \brief Depth-first branch-and-bound search engine
|
597
|
+
*
|
598
|
+
* This class implements depth-first branch-and-bound exploration
|
599
|
+
* for spaces. In order to use it on subclasses of Space, additional
|
600
|
+
* functionality providing the necessary typecasts is available
|
601
|
+
* in Gecode::BAB:
|
602
|
+
*
|
603
|
+
*/
|
604
|
+
class GECODE_SEARCH_EXPORT BAB {
|
605
|
+
protected:
|
606
|
+
/// Engine used for exploration
|
607
|
+
BabEngine e;
|
608
|
+
public:
|
609
|
+
/**
|
610
|
+
* \brief Initialize engine
|
611
|
+
* \param s root node
|
612
|
+
* \param c_d minimal recomputation distance
|
613
|
+
* \param a_d adaptive recomputation distance
|
614
|
+
* \param st %Stop-object
|
615
|
+
* \param sz size of one space
|
616
|
+
*/
|
617
|
+
BAB(Space* s, unsigned int c_d, unsigned int a_d, Stop* st, size_t sz);
|
618
|
+
/// Check whether engine has been stopped
|
619
|
+
bool stopped(void) const;
|
620
|
+
/// Return statistics
|
621
|
+
Statistics statistics(void) const;
|
622
|
+
};
|
623
|
+
|
624
|
+
}
|
625
|
+
|
626
|
+
/**
|
627
|
+
* \brief Depth-first branch-and-bound search engine
|
628
|
+
* \ingroup TaskIntSearch
|
629
|
+
*/
|
630
|
+
template <class T>
|
631
|
+
class BAB : public Search::BAB {
|
632
|
+
public:
|
633
|
+
/**
|
634
|
+
* \brief Initialize engine
|
635
|
+
* \param s Root node (subclass \a T of Space).
|
636
|
+
* Additionally, \a s must implement
|
637
|
+
* a member function \code void constrain(T* t) \endcode
|
638
|
+
* Whenever exploration requires to add a constraint
|
639
|
+
* to the space \a c currently being explored, the engine
|
640
|
+
* executes \c c->constrain(t) where \a t is the so-far
|
641
|
+
* best solution.
|
642
|
+
* \param c_d Minimal recomputation distance
|
643
|
+
* \param a_d Adaptive recomputation distance
|
644
|
+
* \param st %Stop-object
|
645
|
+
*/
|
646
|
+
BAB(T* s,
|
647
|
+
unsigned int c_d=Search::Config::c_d,
|
648
|
+
unsigned int a_d=Search::Config::a_d,
|
649
|
+
Search::Stop* st=NULL);
|
650
|
+
/// Return next better solution (NULL, if none exists or search has been stopped)
|
651
|
+
T* next(void);
|
652
|
+
};
|
653
|
+
|
654
|
+
/**
|
655
|
+
* \brief Perform depth-first branch-and-bound search
|
656
|
+
* \param s root node (subclass \a T of Space).
|
657
|
+
* Additionally, \a s must implement
|
658
|
+
* a member function \code void constrain(T* t) \endcode
|
659
|
+
* Whenever exploration requires to add a constraint
|
660
|
+
* to the space \a c currently being explored, the engine
|
661
|
+
* executes \c c->constrain(t) where \a t is the so-far
|
662
|
+
* best solution.
|
663
|
+
* \param c_d minimal recomputation distance
|
664
|
+
* \param a_d adaptive recomputation distance
|
665
|
+
* \param st %Stop-object
|
666
|
+
* \ingroup TaskIntSearch
|
667
|
+
*/
|
668
|
+
template <class T>
|
669
|
+
T* bab(T* s,
|
670
|
+
unsigned int c_d=Search::Config::c_d,
|
671
|
+
unsigned int a_d=Search::Config::a_d,
|
672
|
+
Search::Stop* st=NULL);
|
673
|
+
|
674
|
+
|
675
|
+
|
676
|
+
/**
|
677
|
+
* \brief Depth-first restart best solution search engine
|
678
|
+
* \ingroup TaskIntSearch
|
679
|
+
*/
|
680
|
+
template <class T>
|
681
|
+
class Restart : public DFS<T> {
|
682
|
+
protected:
|
683
|
+
/// Root node
|
684
|
+
Space* root;
|
685
|
+
/// So-far best solution
|
686
|
+
Space* best;
|
687
|
+
public:
|
688
|
+
/**
|
689
|
+
* \brief Initialize engine
|
690
|
+
* \param s root node (subclass \a T of Space).
|
691
|
+
* Additionally, \a s must implement
|
692
|
+
* a member function \code void constrain(T* t) \endcode
|
693
|
+
* Whenever exploration requires to add a constraint
|
694
|
+
* to the space \a c currently being explored, the engine
|
695
|
+
* executes \c c->constrain(t) where \a t is the so-far
|
696
|
+
* best solution.
|
697
|
+
* \param c_d minimal recomputation distance
|
698
|
+
* \param a_d adaptive recomputation distance
|
699
|
+
* \param st %Stop-object
|
700
|
+
*/
|
701
|
+
Restart(T* s,
|
702
|
+
unsigned int c_d=Search::Config::c_d,
|
703
|
+
unsigned int a_d=Search::Config::a_d,
|
704
|
+
Search::Stop* st=NULL);
|
705
|
+
/// Destructor
|
706
|
+
~Restart(void);
|
707
|
+
/// Return next better solution (NULL, if none exists or search has been stopped)
|
708
|
+
T* next(void);
|
709
|
+
};
|
710
|
+
|
711
|
+
/**
|
712
|
+
* \brief Perform depth-first restart best solution search
|
713
|
+
* \param s root node (subclass \a T of Space).
|
714
|
+
* Additionally, \a s must implement
|
715
|
+
* a member function \code void constrain(T* t) \endcode
|
716
|
+
* Whenever exploration requires to add a constraint
|
717
|
+
* to the space \a c currently being explored, the engine
|
718
|
+
* executes \c c->constrain(t) where \a t is the so-far
|
719
|
+
* best solution.
|
720
|
+
* \param c_d minimal recomputation distance
|
721
|
+
* \param a_d adaptive recomputation distance
|
722
|
+
* \param st %Stop-object
|
723
|
+
*/
|
724
|
+
template <class T>
|
725
|
+
T* restart(T* s,
|
726
|
+
unsigned int c_d=Search::Config::c_d,
|
727
|
+
unsigned int a_d=Search::Config::a_d,
|
728
|
+
Search::Stop* st=NULL);
|
729
|
+
|
730
|
+
}
|
731
|
+
|
732
|
+
#include "gecode/search/statistics.icc"
|
733
|
+
#include "gecode/search/stop.icc"
|
734
|
+
#include "gecode/search/engine-ctrl.icc"
|
735
|
+
|
736
|
+
#include "gecode/search/reco-stack.icc"
|
737
|
+
|
738
|
+
#include "gecode/search/dfs.icc"
|
739
|
+
#include "gecode/search/lds.icc"
|
740
|
+
#include "gecode/search/bab.icc"
|
741
|
+
#include "gecode/search/restart.icc"
|
742
|
+
|
743
|
+
#endif
|
744
|
+
|
745
|
+
// STATISTICS: search-any
|