[gecode-users] Integer Variable Randomization
Christian Schulte
cschulte at kth.se
Mon Apr 21 13:12:54 CEST 2014
Just check the number of search steps needed, it can tell you something more
important than time.
Then (I am guessing here), given that your model is based on money it has
lost of linear constraints in it, right? There you will only get propagation
if by branching either the lower or upper bound of the values for a variable
changes. If you just randomize you are likely to choose an inner value which
might not give that much propagation.
Best
Christian
--
Christian Schulte, KTH, web.it.kth.se/~cschulte/
-----Original Message-----
From: users-bounces at gecode.org [mailto:users-bounces at gecode.org] On Behalf
Of negate273 at gmail.com
Sent: Monday, April 21, 2014 02:47 AM
To: users at gecode.org
Subject: [gecode-users] Integer Variable Randomization
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
_______________________________________________
Gecode users mailing list
users at gecode.org
https://www.gecode.org/mailman/listinfo/gecode-users
More information about the users
mailing list