[gecode-users] Integer Variable Randomization
negate273 at gmail.com
negate273 at gmail.com
Wed Apr 23 17:58:11 CEST 2014
The statistics reveal that the “Peak depth” and “Nodes” are the same as the number of variables. Where can I get the number of “Search steps” ?
My model did not have *any* constraints (model is copied below).I modified the bounds of the variables to see if the bounds made a difference in the solution time, but it did not.
MODEL -
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;
}
On Apr 21, 2014, at 4:12 AM, Christian Schulte <cschulte at kth.se> wrote:
> 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