[gecode-users] help--Question about Channel constraints

Kayler Yao risoay at gmail.com
Mon Aug 10 11:08:26 CEST 2009


OMG, I checked the code for a long time before, but with no result. It was a
logistic error.Thank you for reminding me.

Now the program runs Ok!

Thanks again!

Kayler
2009/8/10 Christian Schulte <cschulte at kth.se>

>  Your copy constructor is wrong: the second update should update from
> s.mun and not from s.num.
>
>
>
> Christian
>
>
>
> --
>
> Christian Schulte, www.ict.kth.se/~cschulte/
>
>
>
> *From:* users-bounces at gecode.org [mailto:users-bounces at gecode.org] *On
> Behalf Of *Kayler Yao
> *Sent:* Monday, August 10, 2009 10:33 AM
> *To:* users at gecode.org
> *Subject:* [gecode-users] help--Question about Channel constraints
>
>
>
> hi,
>
>
>
>      A question came out when i used Channel constraints. One type of
> Channel constrains is for two integer variable arrays x and y of same size,
> for example
>
>   "
>
>    channel(home, x, y);
>
>     posts the constraint
>                       Xi   = j  <==>  Yj  = i    for 0 ≤ i, j < |x|
>
> "
>
>  When i made a test , the result was not what it should to be.
>
>  My tools are VS2008,Gecode 3.1.0. My test is
>
>
>
>  "
>
> #include <gecode/driver.hh>
> #include <gecode/int.hh>
>
> using namespace Gecode;
>
>
>
> class Fournum : public Script
> {
> protected:
>
>   IntVarArray num;
>   IntVarArray mun;
>
>
> public:
>  Fournum(const Options& opt) : num(*this,3,0,2),mun(*this,3,0,2)
>  {
>
>
>   channel(*this,num,mun);
>   branch(*this, num, INT_VAR_NONE, INT_VAL_MIN);
>
>   branch(*this,mun, INT_VAR_NONE, INT_VAL_MIN);
>  }
>
>  virtual void
>  print(std::ostream& os) const
>  {
>     os << "\t" << num<<"-------"<<mun<<std::endl;
>  }
>
>   Fournum(bool share, Fournum& s) : Script(share,s)
>  {
>        num.update(*this, share, s.num);
>        mun.update(*this,share,s.num);
>     }
>
>   virtual Space*  copy(bool share)
>  {
>    return new Fournum(share,*this);
>  }
>
>
> };
>
>
>
> int main()
> {
>  Options opt("\tJust for test");
>  opt.solutions(0);
>  opt.iterations(20000);
>  Script::run<Fournum,DFS,Options>(opt);
>  system("pause");
>  return 0;
> }
>
> "
>
>   The result is
>
>        {0, 1, 2}-------{0, 1, 2}
>        {0, 2, 1}-------{0, 2, 1}
>        {1, 0, 2}-------{1, 0, 2}
>        {1, 2, 0}-------{1, 2, 0}
>        {2, 0, 1}-------{2, 0, 1}
>        {2, 1, 0}-------{2, 1, 0}
>
> You can see that the fourth and the fifth are not right . Who can tell me
> why ?
>
>
>
> Look forward to your reply!
>
>
>
> Kayler.
>
-------------- next part --------------
An HTML attachment was scrubbed...
URL: <http://www.ps.uni-sb.de/pipermail/users/attachments/20090810/92594f63/attachment.htm>


More information about the gecode-users mailing list