[gecode-users] Propagation condition and cloning
Vincent Barichard
Vincent.Barichard at univ-angers.fr
Mon Dec 14 20:09:46 CET 2009
Of course, you are right ! I confused with the b0 and b1 names used in the BinOrTrue (and others) propagator.
I spent the whole Week-end on it without noticing it. Thank you very much, it works now :D
I can now go forward and continue my work :)
Cheers,
Vincent
Le 14 déc. 2009 à 11:35, Christian Schulte a écrit :
> Hmmm,
>
> the first five lines in the patch look already fishy:
>
> --- gecode/int/bool/clause.hpp 2009-10-14 12:19:49.000000000 +0200
> +++ gecode/int/bool/clause.hpp 2009-12-13 23:46:53.000000000 +0100
> @@ -50,6 +50,8 @@
> (home,x0[x0.size()-1],y0[y0.size()-1]), x(x0), y(y0) {
> assert((x.size() > 0) && (y.size() > 0));
> x.size(x.size()-1); y.size(y.size()-1);
> + x0.subscribe(home,*this,PC_BOOL_SAME,false);
> + x1.subscribe(home,*this,PC_BOOL_SAME,false);
> }
>
> Here x0 in x0.subscribe refers to the argument passed to the constructor.
> You assume it refers to the member, right?
>
> Yep ;-)
> Christian
>
> --
> Christian Schulte, www.ict.kth.se/~cschulte/
>
>
> -----Original Message-----
> From: users-bounces at gecode.org [mailto:users-bounces at gecode.org] On Behalf
> Of Vincent Barichard
> Sent: Monday, December 14, 2009 12:33 AM
> To: gecode list
> Subject: [gecode-users] Propagation condition and cloning
>
> Hi Everyone,
>
> I would like to put another Propagation Condition in BoolVarImp. You gave me
> good advice on how to process. For a first step, I just wanted to make some
> test. So I first modified bool.vis and add this new Propagation Condition.
> Then I tried to make existing propagators subscribe to this new propagation
> condition (without scheduling propagators and sending the corresponding
> events). Unfortunately, I failed to achieved this first step. Indeed, some
> problems occur during cloning.
>
> I first thought that It was a problem with the rewriting of propagator
> during cloning. Indeed, I didn't update all propagators, so it can't be
> possible to change a propagator by another one which doesn't subscribe to
> the same propagation conditions than the original one.
> I disabled the rewrite of a propagator by another propagator from a
> different class during cloning. But I still have problems. I tried many
> things, without success and now I have no more ideas.
>
> For now, I just want to understand why I can't make it work. For this
> purpose, I designed an example to make gecode crash. I used the "sat"
> example given with Gecode, and only deal with this example (no matter if the
> other examples don't work anymore).
> My problem is reproducible by applying the patch attached in this mail to
> Gecode 3.2.2. Then, I configured and compiled Gecode with the following
> commands:
>
> ./configure --enable-debug --enable-audit make
>
> The test problem can be launched by copying the test2.cnf file (attached in
> the mail) in the gecode directory and executing the command:
> ./examples/sat test2.cnf
>
> If I use a debugger I get:
>
> Program received signal EXC_BAD_ACCESS, Could not access memory.
> Reason: KERN_INVALID_ADDRESS at address: 0x000000020000001b
> 0x000000010146d908 in Gecode::ActorLink::prev (this=0x200000013) at
> core.hpp:2328
> 2328 return _prev;
> (gdb) bt
> #0 0x000000010146d908 in Gecode::ActorLink::prev (this=0x200000013) at
> core.hpp:2328
> #1 0x000000010146e0be in
> Gecode::VarImp<Gecode::Int::BoolVarImpConf>::update (this=0x101896350,
> x=0x101877698, sub=@0x7fff5fbfece0) at core.hpp:3295
> #2 0x000000010146e1d9 in
> Gecode::VarImp<Gecode::Int::BoolVarImpConf>::update (home=@0x101503f80,
> sub=@0x7fff5fbfece0) at core.hpp:3314
> #3 0x000000010146e4b4 in Gecode::Space::update (this=0x101503f80,
> sub=0x101888798) at var-imp.hpp:343
> #4 0x000000010146bae7 in Gecode::Space::_clone (this=0x101503e20,
> share=true) at gecode/kernel/core.cpp:481
> #5 0x000000010011b58b in Gecode::Space::clone (this=0x101503e20,
> share=true) at core.hpp:2465
> #6 0x000000010011c2c0 in Gecode::Search::Sequential::Path::recompute
> (this=0x101503798, d=@0x1015037b8, a_d=2, stat=@0x101503718) at path.hh:305
> #7 0x000000010011c5be in Gecode::Search::Sequential::DFS::next
> (this=0x101503718) at dfs.hh:146
> #8 0x000000010011c615 in
> Gecode::Search::WorkerToEngine<Gecode::Search::Sequential::DFS>::next
> (this=0x101503710) at support.hh:74
> #9 0x0000000100007ed2 in Gecode::DFS<Sat>::next (this=0x7fff5fbff070) at
> dfs.hpp:53 #10 0x000000010000811b in
> Gecode::Driver::ScriptBase<Gecode::Space>::run<Sat, Gecode::DFS, SatOptions>
> (o=@0x7fff5fbff1a0) at script.hpp:198
> #11 0x0000000100001a34 in main (argc=1, argv=0x7fff5fbff4f0) at
> examples/sat.cpp:256
>
> I probably made an obvious mistake, but I can not see.
> Thanks for your help,
>
> Cheers,
> Vincent
>
> Vincent Barichard Université d'Angers (LERIA)
> Tel: 02 41 73 52 06 Département Informatique
> Fax: 02 41 73 50 73 H203
>
Vincent Barichard Université d'Angers (LERIA)
Tel: 02 41 73 52 06 Département Informatique
Fax: 02 41 73 50 73 H203
More information about the users
mailing list