[gecode-users] Integer Variable Randomization
negate273 at gmail.com
negate273 at gmail.com
Mon Apr 21 02:47:00 CEST 2014
Hi, I’m seeing an exponential time increase in the time to just randomize integer variables. My test program is based on “examples/money.cpp” , and I removed the constraints and simply randomize the integer variables by using INT_VAL_RND()
—> branch(*this, le, INT_VAR_SIZE_MIN(), INT_VAL_RND(rnd));
Is the exponential increase in time with the number of integer random variables in Gecode expected ? and if so, why. And can this be improved by modifying the model ?
Thanks..
NVars SolveTime(in Seconds)
10000 0.734
20000 3.267
30000 7.67
40000 18.262
50000 31.274
60000 50.674
70000 73.82
Complete Test program -
#include <gecode/driver.hh>
#include <gecode/int.hh>
#include <gecode/minimodel.hh>
using namespace Gecode;
class Money : public Script {
protected:
/// Number of letters
static const int nl = 70000; // <———— This number corresponds with NVars listed above.
/// Array of letters
IntVarArray le;
public:
/// Model variants
enum {
MODEL_SINGLE, ///< Use single linear equation
MODEL_CARRY ///< Use carries
};
/// Actual model
Money(const Options& opt) : le(*this,nl,0,65535) { // <—————————— BOUNDS for integer variable
Rnd rnd(314) ;
branch(*this, le, INT_VAR_SIZE_MIN(), INT_VAL_RND(rnd)); // <——————— Random numbers to integers.
}
/// Print solution
virtual void
print(std::ostream& os) const {
// os << "\t" << le << std::endl;
}
/// Constructor for cloning \a s
Money(bool share, Money& s) : Script(share,s) {
le.update(*this, share, s.le);
}
/// Copy during cloning
virtual Space*
copy(bool share) {
return new Money(share,*this);
}
};
/** \brief Main-function
* \relates Money
*/
int
main(int argc, char* argv[]) {
Options opt("SEND+?MORE=MONEY");
opt.model(Money::MODEL_SINGLE);
opt.solutions(1);
Script::run<Money,DFS,Options>(opt);
std::cout << "--- \n" ;
return 0;
}
// STATISTICS: example-any
More information about the users
mailing list