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,273 @@
|
|
|
1
|
+
|
|
2
|
+
/*
|
|
3
|
+
* Main authors:
|
|
4
|
+
* Gr�goire Dooms <dooms@info.ucl.ac.be>
|
|
5
|
+
*
|
|
6
|
+
* Copyright:
|
|
7
|
+
* Gr�goire Dooms (Universit� catholique de Louvain), 2005
|
|
8
|
+
*
|
|
9
|
+
* Last modified:
|
|
10
|
+
* $Date: 2006-04-28 19:54:52 +0200 (Fri, 28 Apr 2006) $
|
|
11
|
+
* $Revision: 449 $
|
|
12
|
+
*
|
|
13
|
+
* This file is part of CP(Graph)
|
|
14
|
+
*
|
|
15
|
+
* See the file "contribs/graph/LICENSE" for information on usage and
|
|
16
|
+
* redistribution of this file, and for a
|
|
17
|
+
* DISCLAIMER OF ALL WARRANTIES.
|
|
18
|
+
*
|
|
19
|
+
*/
|
|
20
|
+
|
|
21
|
+
#include "examples/support.hh"
|
|
22
|
+
#include "graphutils.icc"
|
|
23
|
+
#include "graph.hh"
|
|
24
|
+
#include "stlutility.icc"
|
|
25
|
+
|
|
26
|
+
#undef TRACE
|
|
27
|
+
// no debug
|
|
28
|
+
#define TRACE(A)
|
|
29
|
+
#define TRACE_CHOICE(A) A
|
|
30
|
+
using namespace Gecode::Graph;
|
|
31
|
+
typedef Gecode::Graph::Graph GG;
|
|
32
|
+
|
|
33
|
+
typedef GraphBDSingle<pair<int,int> > GBD;
|
|
34
|
+
|
|
35
|
+
/** \brief GraphBounds class used for branching on a constrained path problem.
|
|
36
|
+
*
|
|
37
|
+
* The heuristic is adapted from:
|
|
38
|
+
* Sparse heuristic from Pesant G, Gengreau M, Potvin J-Y and Rousseau J-M,
|
|
39
|
+
* "An Exact Constraint Logic Programming Algorithm for the Traveling Salesman
|
|
40
|
+
* Problem with Time Windows", Transportation Science 32, 12-29 (1998). page 17.
|
|
41
|
+
* \relates CPGraphSimplePathHeur CPGraphSimplePathHeur2var
|
|
42
|
+
* \ingroup Examples
|
|
43
|
+
* \ingroup TaskModelBranch
|
|
44
|
+
*/
|
|
45
|
+
template <class GView>
|
|
46
|
+
struct PathHeurBoundsG : public BoundsGraphs<GView> {
|
|
47
|
+
typedef GBD GraphBD; //< a Graph Branching must define the branching description used
|
|
48
|
+
using BoundsGraphs<GView>::g; //< for debugging only
|
|
49
|
+
using BoundsGraphs<GView>::UB; //< Upper bound graph
|
|
50
|
+
using BoundsGraphs<GView>::UB_v;//< Upper bound node descriptors by internal id
|
|
51
|
+
using BoundsGraphs<GView>::LB;//< Lower bound graph
|
|
52
|
+
using BoundsGraphs<GView>::LB_v;//< Lower bound node descriptors by internal id
|
|
53
|
+
|
|
54
|
+
/// The real branch method
|
|
55
|
+
PathHeurBoundsG(GView &g): BoundsGraphs<GView>(g) {}
|
|
56
|
+
pair<bool,GBD*> branch(Branching *b){
|
|
57
|
+
// We use an heuristic inspired from the following:
|
|
58
|
+
// Sparse heuristic from Pesant G, Gengreau M, Potvin J-Y and Rousseau J-M,
|
|
59
|
+
// "An Exact Constraint Logic Programming Algorithm for the Traveling Salesman
|
|
60
|
+
// Problem with Time Windows", Transportation Science 32, 12-29 (1998). page 17.
|
|
61
|
+
|
|
62
|
+
// find nodes V of minimum out-degree s,
|
|
63
|
+
// if s==1 pick any in V
|
|
64
|
+
// else
|
|
65
|
+
// for all nodes e in Union{outneigh(v)|v\in v},
|
|
66
|
+
// compute e# = #{v\in V | e\in outneigh(v)}
|
|
67
|
+
// choose the v which maximizes the \sum_{e\in outneigh(v)} e#
|
|
68
|
+
//
|
|
69
|
+
// Do the same in symetrical in/out choose among them on the value of the sum.
|
|
70
|
+
//
|
|
71
|
+
// Once the node is chosen branch on all out/in arcs by order of cost
|
|
72
|
+
// (depending if the node was chosen based on out/in going arcs).
|
|
73
|
+
//
|
|
74
|
+
// Our heuristic is based on a similar technique:
|
|
75
|
+
// to count the number of prunings made by arc->node and degree constraints
|
|
76
|
+
// we want to maximize that number of prunings.
|
|
77
|
+
//
|
|
78
|
+
// we can add or remove an arc.
|
|
79
|
+
// 1) addition the addition of an arc will remove all other outgoing arcs and incoming arcs:
|
|
80
|
+
// add (a,b) -> outdegree(a)+indegree(b)-2
|
|
81
|
+
// 2) removal of an arc might remove the nodes
|
|
82
|
+
// remove (a,b) -> if indegree(b) == 1 : outdegree(b)
|
|
83
|
+
// if outdegree(a) == 1 : indegree(a)
|
|
84
|
+
// might also trigger inclusion of arcs: at most 2 so ignored
|
|
85
|
+
//
|
|
86
|
+
|
|
87
|
+
|
|
88
|
+
|
|
89
|
+
//compute the in and out degree of all nodes
|
|
90
|
+
vector<int> od(num_vertices(UB));
|
|
91
|
+
vector<int> id(num_vertices(UB));
|
|
92
|
+
BGL_FORALL_EDGES(e, UB, GG){
|
|
93
|
+
int s,t;
|
|
94
|
+
t = UB[target(e,UB)].index;
|
|
95
|
+
s = UB[source(e,UB)].index;
|
|
96
|
+
od[s]++; id[t]++;
|
|
97
|
+
}
|
|
98
|
+
int bestscore = 0;
|
|
99
|
+
bool inc=true; //< inc ? include : exclude
|
|
100
|
+
pair<int,int> bestedge = make_pair(-1,-1); // pair of id of nodes
|
|
101
|
+
|
|
102
|
+
//search the unknown edges for a best score
|
|
103
|
+
BGL_FORALL_EDGES(e, UB, GG){
|
|
104
|
+
//check for the presence of this edge in the lower bound
|
|
105
|
+
// id is used
|
|
106
|
+
int sid = UB[source(e,UB)].id;
|
|
107
|
+
int tid = UB[target(e,UB)].id;
|
|
108
|
+
TRACE(cout << "sid:"<<sid << " tid:" << tid << " e:" << e<<endl);
|
|
109
|
+
if (LB_v[sid] && LB_v[tid] && edge(LB_v[sid],LB_v[tid],LB).second){
|
|
110
|
+
TRACE(cout << "skip" << endl);
|
|
111
|
+
continue;
|
|
112
|
+
}
|
|
113
|
+
int s,t;
|
|
114
|
+
t = UB[target(e,UB)].index;
|
|
115
|
+
s = UB[source(e,UB)].index;
|
|
116
|
+
TRACE(cout << "s:"<<s << " t:" << t <<endl);
|
|
117
|
+
int sc; //score
|
|
118
|
+
// include
|
|
119
|
+
sc = od[s]+id[t]-2;
|
|
120
|
+
if (sc > bestscore){
|
|
121
|
+
bestscore = sc;
|
|
122
|
+
inc = true;
|
|
123
|
+
bestedge = make_pair(sid,tid); // id is used
|
|
124
|
+
}
|
|
125
|
+
// exclude
|
|
126
|
+
sc = 0;
|
|
127
|
+
sc += od[s]==1 ? id[s] : 0;
|
|
128
|
+
sc += id[t]==1 ? od[t] : 0;
|
|
129
|
+
if (sc > bestscore){
|
|
130
|
+
bestscore = sc;
|
|
131
|
+
inc = false;
|
|
132
|
+
bestedge = make_pair(sid,tid); // id is used
|
|
133
|
+
}
|
|
134
|
+
TRACE(cout << "best:"<<bestedge.first << " " << bestedge.second <<endl);
|
|
135
|
+
}
|
|
136
|
+
TRACE_CHOICE(cout << g<< endl);
|
|
137
|
+
if (bestedge == make_pair(-1,-1)){
|
|
138
|
+
TRACE_CHOICE(cout << "end of branching" << endl ;)
|
|
139
|
+
return make_pair(false,(GBD*)NULL);
|
|
140
|
+
}
|
|
141
|
+
TRACE_CHOICE(cout << "best:"<<bestedge.first << " " << bestedge.second << ", score:" << bestscore <<endl);
|
|
142
|
+
return make_pair(true,new GBD(b,bestedge,inc));
|
|
143
|
+
}
|
|
144
|
+
|
|
145
|
+
/// as an example here is the code for something closer to the original heuristic (for outneighbours)
|
|
146
|
+
void pesant_et_al()
|
|
147
|
+
{
|
|
148
|
+
int vi_out, vi_out_score ; // the best node for the outneighbors
|
|
149
|
+
// find out degrees
|
|
150
|
+
vector<int> od(num_vertices(UB));
|
|
151
|
+
BGL_FORALL_VERTICES(v, UB, GG){
|
|
152
|
+
od[UB[v].index] = out_degree(v,UB);
|
|
153
|
+
};
|
|
154
|
+
// get min val
|
|
155
|
+
int min = minimum(od.begin(),od.end());
|
|
156
|
+
// find the indexes with the min val
|
|
157
|
+
vector<int> V;
|
|
158
|
+
for(vector<int>::iterator cur=find(od.begin(), od.end(), min); cur!=od.end(); cur=find(cur, od.end(), min)){
|
|
159
|
+
V.push_back(cur-od.begin());
|
|
160
|
+
}
|
|
161
|
+
if (min==1) return *V.begin();
|
|
162
|
+
|
|
163
|
+
// compute E the set of outneigh of nodes of V
|
|
164
|
+
set<int> E;
|
|
165
|
+
for(vector<int>::iterator i=V.begin(); i!=V.end(); ++i){
|
|
166
|
+
int vi = *i;
|
|
167
|
+
BGL_FORALL_OUTEDGES(UB_v[vi], e, UB, GG){
|
|
168
|
+
E.insert(UB[target(e,UB)].index);
|
|
169
|
+
}
|
|
170
|
+
}
|
|
171
|
+
|
|
172
|
+
// compute e_sharp for all e in E
|
|
173
|
+
map<int,int> e_sharp;
|
|
174
|
+
for(set<int>::iterator i=E.begin(); i!=E.end(); i++){
|
|
175
|
+
int ei = *i;
|
|
176
|
+
// local functions are not allowed by C++
|
|
177
|
+
struct _has_e_in_neigh {
|
|
178
|
+
int ei;
|
|
179
|
+
_has_e_in_neigh(int ei): ei(ei) {}
|
|
180
|
+
bool operator()(int vi){
|
|
181
|
+
return edge(UB_v[vi], UB_v[ei], UB).second;
|
|
182
|
+
}
|
|
183
|
+
} has_e_in_neigh(ei);
|
|
184
|
+
e_sharp[ei] = count_if(V.begin(), V.end(), has_e_in_neigh);
|
|
185
|
+
}
|
|
186
|
+
|
|
187
|
+
//compute the sum of e_sharp for every v
|
|
188
|
+
vector<int> sum_e_sharp;
|
|
189
|
+
for(vector<int>::iterator i=V.begin(); i!=V.end(); ++i){
|
|
190
|
+
int vi = *i;
|
|
191
|
+
int s = 0;
|
|
192
|
+
BGL_FORALL_OUTEDGES(UB_v[vi], e, UB, GG){
|
|
193
|
+
int ei = UB[target(e,UB)].index;
|
|
194
|
+
s += e_sharp[ei];
|
|
195
|
+
}
|
|
196
|
+
sum_e_sharp.push_back(s);
|
|
197
|
+
}
|
|
198
|
+
|
|
199
|
+
unsigned int min_index = minimum_index(sum_e_sharp.begin(), sum_e_sharp.end());
|
|
200
|
+
|
|
201
|
+
// the best node for outneighbors is:
|
|
202
|
+
vi_out = V[min_index];
|
|
203
|
+
vi_out_score = sum_e_sharp[min_index];
|
|
204
|
+
}
|
|
205
|
+
};
|
|
206
|
+
|
|
207
|
+
/** \brief Example to test the branchings with OutAdjSetsGraphView
|
|
208
|
+
* \ingroup Examples
|
|
209
|
+
* */
|
|
210
|
+
class CPGraphSimplePathHeur: public Example {
|
|
211
|
+
private:
|
|
212
|
+
OutAdjSetsGraphView g1;
|
|
213
|
+
public:
|
|
214
|
+
/// Constructor with unused options
|
|
215
|
+
CPGraphSimplePathHeur(const Options& opt): g1(this,loadGraph("g2.txt")){
|
|
216
|
+
path(this,g1,0,5);
|
|
217
|
+
branch<OutAdjSetsGraphView, PathHeurBoundsG<OutAdjSetsGraphView> >(this,g1);
|
|
218
|
+
}
|
|
219
|
+
/// Constructor for cloning \a s
|
|
220
|
+
CPGraphSimplePathHeur(bool share, CPGraphSimplePathHeur& s) : Example(share,s){
|
|
221
|
+
g1.update(this, share, s.g1);
|
|
222
|
+
}
|
|
223
|
+
/// Copying during cloning
|
|
224
|
+
virtual Space*
|
|
225
|
+
copy(bool share) {
|
|
226
|
+
return new CPGraphSimplePathHeur(share,*this);
|
|
227
|
+
}
|
|
228
|
+
/// Print the solution
|
|
229
|
+
virtual void
|
|
230
|
+
print(void) {
|
|
231
|
+
std::cout << "\tg1 = " << g1 << std::endl;
|
|
232
|
+
}
|
|
233
|
+
};
|
|
234
|
+
/** \brief Example to test the branchings with NodeArcSetsGraphView
|
|
235
|
+
* \ingroup Examples
|
|
236
|
+
* */
|
|
237
|
+
class CPGraphSimplePathHeur2vars: public Example {
|
|
238
|
+
private:
|
|
239
|
+
NodeArcSetsGraphView g1;
|
|
240
|
+
public:
|
|
241
|
+
/// Constructor with unused options
|
|
242
|
+
CPGraphSimplePathHeur2vars(const Options& opt): g1(this,new ArcNode(loadGraph("g2.txt").second),loadGraph("g2.txt")){
|
|
243
|
+
path(this,g1,0,5);
|
|
244
|
+
g1.distrib(this);
|
|
245
|
+
}
|
|
246
|
+
/// Constructor for cloning \a s
|
|
247
|
+
CPGraphSimplePathHeur2vars(bool share, CPGraphSimplePathHeur2vars& s) : Example(share,s){
|
|
248
|
+
g1.update(this, share, s.g1);
|
|
249
|
+
}
|
|
250
|
+
/// Copying during cloning
|
|
251
|
+
virtual Space*
|
|
252
|
+
copy(bool share) {
|
|
253
|
+
return new CPGraphSimplePathHeur2vars(share,*this);
|
|
254
|
+
}
|
|
255
|
+
/// Print the solution
|
|
256
|
+
virtual void
|
|
257
|
+
print(void) {
|
|
258
|
+
std::cout << "Solution \tg1 = " <<std::endl<< g1 << std::endl;
|
|
259
|
+
}
|
|
260
|
+
};
|
|
261
|
+
int
|
|
262
|
+
main(int argc, char** argv) {
|
|
263
|
+
Options opt("CPGraphSimplePathHeur");
|
|
264
|
+
opt.icl = ICL_DOM;
|
|
265
|
+
opt.solutions = 0;
|
|
266
|
+
opt.parse(argc,argv);
|
|
267
|
+
if (opt.size == 2){
|
|
268
|
+
Example::run<CPGraphSimplePathHeur2vars,DFS>(opt);
|
|
269
|
+
}else{
|
|
270
|
+
Example::run<CPGraphSimplePathHeur,DFS>(opt);
|
|
271
|
+
}
|
|
272
|
+
return 0;
|
|
273
|
+
}
|
|
@@ -0,0 +1,311 @@
|
|
|
1
|
+
|
|
2
|
+
/*
|
|
3
|
+
* Main authors:
|
|
4
|
+
* Gr�goire Dooms <dooms@info.ucl.ac.be>
|
|
5
|
+
*
|
|
6
|
+
* Copyright:
|
|
7
|
+
* Gr�goire Dooms (Universit� catholique de Louvain), 2005
|
|
8
|
+
*
|
|
9
|
+
* Last modified:
|
|
10
|
+
* $Date: 2005-11-29 21:11:13 +0100 (Tue, 29 Nov 2005) $
|
|
11
|
+
* $Revision: 279 $
|
|
12
|
+
*
|
|
13
|
+
* This file is part of CP(Graph)
|
|
14
|
+
*
|
|
15
|
+
* See the file "contribs/graph/LICENSE" for information on usage and
|
|
16
|
+
* redistribution of this file, and for a
|
|
17
|
+
* DISCLAIMER OF ALL WARRANTIES.
|
|
18
|
+
*
|
|
19
|
+
*/
|
|
20
|
+
|
|
21
|
+
#include "examples/support.hh"
|
|
22
|
+
#include "graphutils.icc"
|
|
23
|
+
#include "graph.hh"
|
|
24
|
+
#include "stlutility.icc"
|
|
25
|
+
#include "boost/tuple/tuple.hpp"
|
|
26
|
+
|
|
27
|
+
#undef TRACE
|
|
28
|
+
// no debug
|
|
29
|
+
#define TRACE(A)
|
|
30
|
+
//#define TRACE_CHOICE(A) A
|
|
31
|
+
#define TRACE_CHOICE(A)
|
|
32
|
+
using namespace Gecode::Graph;
|
|
33
|
+
using namespace std;
|
|
34
|
+
using namespace boost;
|
|
35
|
+
typedef Gecode::Graph::Graph GG;
|
|
36
|
+
|
|
37
|
+
typedef GraphBDSingle<pair<int,int> > GBD;
|
|
38
|
+
|
|
39
|
+
/** \brief GraphBounds class used for branching on a constrained path problem.
|
|
40
|
+
*
|
|
41
|
+
* The heuristic is adapted from:
|
|
42
|
+
* Sparse heuristic from Pesant G, Gengreau M, Potvin J-Y and Rousseau J-M,
|
|
43
|
+
* "An Exact Constraint Logic Programming Algorithm for the Traveling Salesman
|
|
44
|
+
* Problem with Time Windows", Transportation Science 32, 12-29 (1998). page 17.
|
|
45
|
+
* \relates CPGraphPathCostHeur CPGraphPathCostHeur2var
|
|
46
|
+
* \ingroup Examples
|
|
47
|
+
* \ingroup TaskModelBranch
|
|
48
|
+
*/
|
|
49
|
+
template <class GView>
|
|
50
|
+
struct PathHeurBoundsG : public BoundsGraphs<GView> {
|
|
51
|
+
typedef GBD GraphBD; //< a Graph Branching must define the branching description used
|
|
52
|
+
using BoundsGraphs<GView>::g; //< for debugging only
|
|
53
|
+
using BoundsGraphs<GView>::UB; //< Upper bound graph
|
|
54
|
+
using BoundsGraphs<GView>::UB_v;//< Upper bound node descriptors by internal id
|
|
55
|
+
using BoundsGraphs<GView>::LB;//< Lower bound graph
|
|
56
|
+
using BoundsGraphs<GView>::LB_v;//< Lower bound node descriptors by internal id
|
|
57
|
+
|
|
58
|
+
/// The real branch method
|
|
59
|
+
PathHeurBoundsG(GView &g): BoundsGraphs<GView>(g) {}
|
|
60
|
+
pair<bool,GBD*> branch(Branching *b){
|
|
61
|
+
// We use an heuristic inspired from the following:
|
|
62
|
+
// Sparse heuristic from Pesant G, Gengreau M, Potvin J-Y and Rousseau J-M,
|
|
63
|
+
// "An Exact Constraint Logic Programming Algorithm for the Traveling Salesman
|
|
64
|
+
// Problem with Time Windows", Transportation Science 32, 12-29 (1998). page 17.
|
|
65
|
+
|
|
66
|
+
// find nodes V of minimum out-degree s,
|
|
67
|
+
// if s==1 pick any in V
|
|
68
|
+
// else
|
|
69
|
+
// for all nodes e in Union{outneigh(v)|v\in v},
|
|
70
|
+
// compute e# = #{v\in V | e\in outneigh(v)}
|
|
71
|
+
// choose the v which maximizes the \sum_{e\in outneigh(v)} e#
|
|
72
|
+
//
|
|
73
|
+
// Do the same in symetrical in/out choose among them on the value of the sum.
|
|
74
|
+
//
|
|
75
|
+
// Once the node is chosen branch on all out/in arcs by order of cost
|
|
76
|
+
// (depending if the node was chosen based on out/in going arcs).
|
|
77
|
+
//
|
|
78
|
+
// Our heuristic is based on a similar technique:
|
|
79
|
+
// to count the number of prunings made by arc->node and degree constraints
|
|
80
|
+
// we want to maximize that number of prunings.
|
|
81
|
+
//
|
|
82
|
+
// we can add or remove an arc.
|
|
83
|
+
// 1) addition the addition of an arc will remove all other outgoing arcs and incoming arcs:
|
|
84
|
+
// add (a,b) -> outdegree(a)+indegree(b)-2
|
|
85
|
+
// 2) removal of an arc might remove the nodes
|
|
86
|
+
// remove (a,b) -> if indegree(b) == 1 : outdegree(b)
|
|
87
|
+
// if outdegree(a) == 1 : indegree(a)
|
|
88
|
+
// might also trigger inclusion of arcs: at most 2 so ignored
|
|
89
|
+
//
|
|
90
|
+
|
|
91
|
+
|
|
92
|
+
|
|
93
|
+
//compute the in and out degree of all nodes
|
|
94
|
+
vector<int> od(num_vertices(UB));
|
|
95
|
+
vector<int> id(num_vertices(UB));
|
|
96
|
+
BGL_FORALL_EDGES(e, UB, GG){
|
|
97
|
+
int s,t;
|
|
98
|
+
t = UB[target(e,UB)].index;
|
|
99
|
+
s = UB[source(e,UB)].index;
|
|
100
|
+
od[s]++; id[t]++;
|
|
101
|
+
}
|
|
102
|
+
int bestscore = 0;
|
|
103
|
+
bool inc=true; //< inc ? include : exclude
|
|
104
|
+
pair<int,int> bestedge = make_pair(-1,-1); // pair of id of nodes
|
|
105
|
+
|
|
106
|
+
//search the unknown edges for a best score
|
|
107
|
+
BGL_FORALL_EDGES(e, UB, GG){
|
|
108
|
+
//check for the presence of this edge in the lower bound
|
|
109
|
+
// id is used
|
|
110
|
+
int sid = UB[source(e,UB)].id;
|
|
111
|
+
int tid = UB[target(e,UB)].id;
|
|
112
|
+
TRACE(cout << "sid:"<<sid << " tid:" << tid << " e:" << e<<endl);
|
|
113
|
+
if (LB_v[sid] && LB_v[tid] && edge(LB_v[sid],LB_v[tid],LB).second){
|
|
114
|
+
TRACE(cout << "skip" << endl);
|
|
115
|
+
continue;
|
|
116
|
+
}
|
|
117
|
+
int s,t;
|
|
118
|
+
t = UB[target(e,UB)].index;
|
|
119
|
+
s = UB[source(e,UB)].index;
|
|
120
|
+
TRACE(cout << "s:"<<s << " t:" << t <<endl);
|
|
121
|
+
int sc; //score
|
|
122
|
+
// include
|
|
123
|
+
sc = od[s]+id[t]-2;
|
|
124
|
+
if (sc > bestscore){
|
|
125
|
+
bestscore = sc;
|
|
126
|
+
inc = true;
|
|
127
|
+
bestedge = make_pair(sid,tid); // id is used
|
|
128
|
+
}
|
|
129
|
+
// exclude
|
|
130
|
+
sc = 0;
|
|
131
|
+
sc += od[s]==1 ? id[s] : 0;
|
|
132
|
+
sc += id[t]==1 ? od[t] : 0;
|
|
133
|
+
if (sc > bestscore){
|
|
134
|
+
bestscore = sc;
|
|
135
|
+
inc = false;
|
|
136
|
+
bestedge = make_pair(sid,tid); // id is used
|
|
137
|
+
}
|
|
138
|
+
TRACE(cout << "best:"<<bestedge.first << " " << bestedge.second <<endl);
|
|
139
|
+
}
|
|
140
|
+
TRACE_CHOICE(cout << g<< endl);
|
|
141
|
+
if (bestedge == make_pair(-1,-1)){
|
|
142
|
+
TRACE_CHOICE(cout << "end of bracnhing" << endl ;)
|
|
143
|
+
return make_pair(false,(GBD*)NULL);
|
|
144
|
+
}
|
|
145
|
+
TRACE_CHOICE(cout << "best:"<<bestedge.first << " " << bestedge.second << ", score:" << bestscore <<endl);
|
|
146
|
+
return make_pair(true,new GBD(b,bestedge,inc));
|
|
147
|
+
}
|
|
148
|
+
|
|
149
|
+
};
|
|
150
|
+
|
|
151
|
+
class PathCostOptions : public Options {
|
|
152
|
+
public:
|
|
153
|
+
PathCostOptions(const char* s) : Options(s) {}
|
|
154
|
+
int start;
|
|
155
|
+
int end;
|
|
156
|
+
pair<vector<int>,vector<pair<int,int> > > graph;
|
|
157
|
+
vector<int> arc_costs;
|
|
158
|
+
vector<int> interns;
|
|
159
|
+
};
|
|
160
|
+
|
|
161
|
+
PathCostOptions* loadParams(string filename, int start, int end, const char* name, int* interns=NULL, int numInterns=0){
|
|
162
|
+
PathCostOptions * res = new PathCostOptions(name);
|
|
163
|
+
res->start = start;
|
|
164
|
+
res->end = end;
|
|
165
|
+
vector<int> nodes;
|
|
166
|
+
for (int i=0; i<numInterns; i++){
|
|
167
|
+
res->interns.push_back(interns[i]);
|
|
168
|
+
}
|
|
169
|
+
typedef vector<tuple<int,int,int> > V3;
|
|
170
|
+
V3 arcs;
|
|
171
|
+
tie(nodes,arcs) = loadGraphWeights(filename);
|
|
172
|
+
res->graph.first = nodes;
|
|
173
|
+
for (V3::iterator i=arcs.begin(); i!=arcs.end(); i++){
|
|
174
|
+
res->graph.second.push_back(make_pair(get<0>(*i), get<1>(*i)));
|
|
175
|
+
res->arc_costs.push_back(get<2>(*i));
|
|
176
|
+
}
|
|
177
|
+
return res;
|
|
178
|
+
}
|
|
179
|
+
|
|
180
|
+
/** \brief Example to test the branchings with OutAdjSetsGraphView
|
|
181
|
+
* \ingroup Examples
|
|
182
|
+
* */
|
|
183
|
+
class CPGraphPathCostHeur: public Example {
|
|
184
|
+
private:
|
|
185
|
+
OutAdjSetsGraphView g1;
|
|
186
|
+
IntVar w;
|
|
187
|
+
int start; int end;
|
|
188
|
+
public:
|
|
189
|
+
/// Constructor taking PathCostOptions
|
|
190
|
+
CPGraphPathCostHeur(const Options& opt): g1(this,(reinterpret_cast<const PathCostOptions *>(&opt))->graph), w(this,0,Limits::Int::int_max){
|
|
191
|
+
const PathCostOptions * o = reinterpret_cast<const PathCostOptions *>(&opt);
|
|
192
|
+
std::map<pair<int,int>,int> arc_costs;
|
|
193
|
+
for (unsigned int i=0; i<o->graph.second.size(); i++){
|
|
194
|
+
arc_costs[o->graph.second[i]] = o->arc_costs[i];
|
|
195
|
+
}
|
|
196
|
+
for (vector<int>::const_iterator i = o->interns.begin(); i!=o->interns.end(); i++){
|
|
197
|
+
GECODE_ME_FAIL(this,g1._nodeIn(this,*i));
|
|
198
|
+
}
|
|
199
|
+
start = o->start;
|
|
200
|
+
end = o->end;
|
|
201
|
+
path(this, g1, o->start, o->end, arc_costs, w);
|
|
202
|
+
branch<OutAdjSetsGraphView, PathHeurBoundsG<OutAdjSetsGraphView> >(this,g1);
|
|
203
|
+
}
|
|
204
|
+
/// Constructor for cloning \a s
|
|
205
|
+
CPGraphPathCostHeur(bool share, CPGraphPathCostHeur& s) : Example(share,s){
|
|
206
|
+
g1.update(this, share, s.g1);
|
|
207
|
+
w.update(this, share, s.w);
|
|
208
|
+
start = s.start;
|
|
209
|
+
end = s.end;
|
|
210
|
+
}
|
|
211
|
+
/// Copying during cloning
|
|
212
|
+
virtual Space*
|
|
213
|
+
copy(bool share) {
|
|
214
|
+
return new CPGraphPathCostHeur(share,*this);
|
|
215
|
+
}
|
|
216
|
+
/// Print the solution
|
|
217
|
+
virtual void
|
|
218
|
+
print(void) {
|
|
219
|
+
const vector<int> & path = get_path();
|
|
220
|
+
std::cout << "path cost = " << w << std::endl;
|
|
221
|
+
std::cout << "g1 = " << path << std::endl;
|
|
222
|
+
}
|
|
223
|
+
/// Constrain the space further for Branch and Bound
|
|
224
|
+
virtual void
|
|
225
|
+
constrain(Space * s) {
|
|
226
|
+
rel(this, w, IRT_LE, static_cast<CPGraphPathCostHeur*>(s)->w.val());
|
|
227
|
+
}
|
|
228
|
+
/// return the path as an order vector of node id
|
|
229
|
+
virtual vector<int>
|
|
230
|
+
get_path() {
|
|
231
|
+
vector<int> path;
|
|
232
|
+
int cur=start;
|
|
233
|
+
path.push_back(start);
|
|
234
|
+
do {
|
|
235
|
+
vector<int> nei;
|
|
236
|
+
g1.outNeighboursUB(cur,nei);
|
|
237
|
+
assert(nei.size()==1);
|
|
238
|
+
cur=nei[0];
|
|
239
|
+
vector<int>::const_iterator f = find(path.begin(),path.end(),cur);
|
|
240
|
+
vector<int>::const_iterator not_found = path.end();
|
|
241
|
+
path.push_back(cur);
|
|
242
|
+
if (f!=not_found){
|
|
243
|
+
cerr << "Error: there is a cycle :" << path << " " << cur << endl;
|
|
244
|
+
break; // cur was already present --> cycle
|
|
245
|
+
}
|
|
246
|
+
} while(cur != end );
|
|
247
|
+
return path;
|
|
248
|
+
}
|
|
249
|
+
|
|
250
|
+
|
|
251
|
+
};
|
|
252
|
+
|
|
253
|
+
class CPGraphPathCostHeur2vars: public Example {
|
|
254
|
+
private:
|
|
255
|
+
NodeArcSetsGraphView g1;
|
|
256
|
+
IntVar w;
|
|
257
|
+
public:
|
|
258
|
+
/// Constructor taking PathCostOptions
|
|
259
|
+
CPGraphPathCostHeur2vars(const Options& opt): g1(this,new ArcNode(reinterpret_cast<const PathCostOptions *>(&opt)->graph.second), reinterpret_cast<const PathCostOptions *>(&opt)->graph ), w(this,0,Limits::Int::int_max){
|
|
260
|
+
const PathCostOptions * o = reinterpret_cast<const PathCostOptions *>(&opt);
|
|
261
|
+
std::map<pair<int,int>,int> arc_costs;
|
|
262
|
+
for (unsigned int i=0; i<o->graph.second.size(); i++){
|
|
263
|
+
arc_costs[o->graph.second[i]] = o->arc_costs[i];
|
|
264
|
+
}
|
|
265
|
+
path(this, g1, o->start, o->end, arc_costs, w);
|
|
266
|
+
branch<NodeArcSetsGraphView, PathHeurBoundsG<NodeArcSetsGraphView> >(this,g1);
|
|
267
|
+
}
|
|
268
|
+
/// Constructor for cloning \a s
|
|
269
|
+
CPGraphPathCostHeur2vars(bool share, CPGraphPathCostHeur2vars& s) : Example(share,s){
|
|
270
|
+
g1.update(this, share, s.g1);
|
|
271
|
+
w.update(this, share, s.w);
|
|
272
|
+
}
|
|
273
|
+
/// Copying during cloning
|
|
274
|
+
virtual Space*
|
|
275
|
+
copy(bool share) {
|
|
276
|
+
return new CPGraphPathCostHeur2vars(share,*this);
|
|
277
|
+
}
|
|
278
|
+
/// Print the solution
|
|
279
|
+
virtual void
|
|
280
|
+
print(void) {
|
|
281
|
+
std::cout << "path cost = " << w << std::endl;
|
|
282
|
+
std::cout << "g1 = " << g1 << std::endl;
|
|
283
|
+
}
|
|
284
|
+
/// Constrain the space further for Branch and Bound
|
|
285
|
+
virtual void
|
|
286
|
+
constrain(Space * s) {
|
|
287
|
+
rel(this, w, IRT_LE, static_cast<CPGraphPathCostHeur2vars*>(s)->w.val());
|
|
288
|
+
}
|
|
289
|
+
};
|
|
290
|
+
int
|
|
291
|
+
main(int argc, char** argv) {
|
|
292
|
+
if (argc < 3) {
|
|
293
|
+
std::cerr << "specify parameters start end and wheightedgraphfilename implem\n";
|
|
294
|
+
std::cerr << "usage is: " << argv[0] << " start end wheightedgraphfilename {1,2} [gecode options] \n";
|
|
295
|
+
return -1;
|
|
296
|
+
}
|
|
297
|
+
PathCostOptions * opt = loadParams(argv[3], atoi(argv[1]), atoi(argv[2]), "CPGraphPathCostHeur");
|
|
298
|
+
argv[3] = argv[0];
|
|
299
|
+
opt->icl = ICL_DOM;
|
|
300
|
+
opt->solutions = 0;
|
|
301
|
+
argc -= 3;
|
|
302
|
+
argv += 3;
|
|
303
|
+
opt->parse(argc,argv);
|
|
304
|
+
if (opt->size == 2){
|
|
305
|
+
Example::run<CPGraphPathCostHeur2vars,BAB>(*opt);
|
|
306
|
+
}else{
|
|
307
|
+
Example::run<CPGraphPathCostHeur,BAB>(*opt);
|
|
308
|
+
}
|
|
309
|
+
return 0;
|
|
310
|
+
}
|
|
311
|
+
|