Go to the documentation of this file.00001
00002
00003
00004
00005
00006
00007
00008
00009
00010
00011
00012
00013
00014
00015
00016
00017
00018
00019
00020
00021
00022
00023
00024
00025
00026
00027
00028
00029
00030
00031
00032
00033
00034
00035
00036
00037
00038 #include <gecode/driver.hh>
00039 #include <gecode/int.hh>
00040 #include <gecode/minimodel.hh>
00041
00042 #include <cstdlib>
00043
00044 using namespace Gecode;
00045
00066 class AllInterval : public Script {
00067 private:
00069 IntVarArray x;
00071 IntVarArray d;
00072 public:
00074 AllInterval(const SizeOptions& opt) :
00075 x(*this, opt.size(), 0, opt.size()-1),
00076 d(*this, opt.size()-1, 1, opt.size()-1) {
00077 const int n = x.size();
00078
00079
00080 for (int i=0; i<n-1; i++)
00081 rel(*this, d[i] == abs(x[i+1]-x[i]), opt.icl());
00082
00083 distinct(*this, x, opt.icl());
00084 distinct(*this, d, opt.icl());
00085
00086
00087 rel(*this, x[0], IRT_LE, x[1]);
00088
00089 rel(*this, d[0], IRT_GR, d[n-2]);
00090
00091 branch(*this, x, INT_VAR_SIZE_MIN(), INT_VAL_SPLIT_MIN());
00092 }
00094 AllInterval(bool share, AllInterval& s)
00095 : Script(share, s) {
00096 x.update(*this, share, s.x);
00097 d.update(*this, share, s.d);
00098 }
00100 virtual Space*
00101 copy(bool share) {
00102 return new AllInterval(share, *this);
00103 }
00105 virtual void
00106 print(std::ostream& os) const {
00107 const int n = x.size();
00108 os << "\tx[" << n << "] = {";
00109 for (int i = 0; i < n-1; i++)
00110 os << x[i] << "(" << d[i] << "),";
00111 os << x[n-1] << "}" << std::endl;
00112 }
00113 };
00114
00115
00119 int
00120 main(int argc, char* argv[]){
00121 SizeOptions opt("AllInterval");
00122 opt.size(1000);
00123 opt.iterations(5);
00124 opt.icl(ICL_BND);
00125 opt.parse(argc, argv);
00126 if (opt.size() < 2) {
00127 std::cerr << "size must be at least 2!" << std::endl;
00128 return -1;
00129 }
00130 Script::run<AllInterval,DFS,SizeOptions>(opt);
00131 return 0;
00132 }
00133
00134
00135