There are in fact several big fat warnings in MPG saying that views are not for modeling! They are there for a reason!
Christian -- Christian Schulte, www.ict.kth.se/~cschulte/ From: users-boun...@gecode.org [mailto:users-boun...@gecode.org] On Behalf Of Max Ostrowski Sent: Thursday, August 23, 2012 2:05 PM To: Guido Tack Cc: users@gecode.org Subject: Re: [gecode-users] Propagating to Fixpoint Great, this really solves the problem. Have not thought of this. Thank you very very much. In my example everything works as expected and the fixpoint is always the same. Are you sure that it can still happen that the fixpoint of the same set of constraints is different, if i use a different order? Then i have to stick to my fallback method. Nevertheless, big thanks for solving my problem. Everything works now and is a hundred times faster :) Best, Max On 08/23/2012 01:44 PM, Guido Tack wrote: Without looking at the details: Do you check the return value of IntView::lq? The view functions are not meant to be used in models. If lq returns failure, you have to check that yourself, or the space won't be failed. Cheers, Guido -- Guido Tack On 23/08/2012, at 13:20, Max Ostrowski <ostro...@cs.uni-potsdam.de> wrote: Actually its quite complicated. I'm currently debugging and have 60 constraints written on paper that have this effect. Two of them are actually not reified constraints but directly using IntView::lq(constant) I can give you a description where it happens in my system, but it will be a mess for you to write simplified code that reproduces this. Actually given two spaces original1 and original2 that are equal, variables are constraint like this: posx(6)=[0..185] posx(5)=[0..190] posx(4)=[0..142] posx(3)=[0..158] posx(2)=[0..113] posx(1)=[0..157] all reified constraints are posted with free boolean variables, using linear(*this, intArgs, intVarArgs, r,0,b_[boolvar],ICL_DEF); Now i set the boolean variables accordingly, always doing propagation (calling status()) after each single posting To original1 false ((-1 $* posx(3))+posx(1))$<=0 To original1 false ( 10+(-1 $* posx(6))+posx(5))$>0 To original1 false ( 58+(-1 $* posx(5))+posx(4))$>0 To original1 true posx(6)<=69 // this is no reified constraint, but just posted IntView(posx(6)).lq(69) To original1 false ( 43+(-1 $* posx(6))+posx(1))$>0 To original1 false ((-1 $* posx(5))+posx(2))$<=0 To original1 true ((-1 $* posx(1))+posx(3))$<=0 To original1 true ((-1 $* posx(4))+posx(3))$<=0 To original1 false ( 42+(-1 $* posx(5))+posx(3))$>0 To original1 false ( 42+(-1 $* posx(6))+posx(3))$>0 To original1 true ( -42+(-1 $* posx(3))+posx(1))$<0 To original1 true ( -15+(-1 $* posx(6))+posx(1))$<0 To original1 true ( 58+(-1 $* posx(1))+posx(4))$>0 To original1 true ( 42+(-1 $* posx(1))+posx(3))$>0 To original1 false ((-1 $* posx(1))+posx(2))$<=0 To original1 true ((-1 $* posx(6))+posx(1))$<=0 To original1 true ((-1 $* posx(5))+posx(1))$<=0 To original1 true ( -10+(-1 $* posx(5))+posx(1))$<0 To original1 true ((-1 $* posx(2))+posx(1))$<=0 To original1 false ( 43+(-1 $* posx(2))+posx(1))$>0 To original1 true ( -28+(-1 $* posx(1))+posx(6))$>0 To original1 false ( 28+(-1 $* posx(6))+posx(1))$>0 To original1 false ( -43+(-1 $* posx(1))+posx(2))$<0 To original1 true ( -58+(-1 $* posx(4))+posx(1))$<0 To original1 true posx(1)<=29 // this is no reified constraint, but just posted IntView(posx(1)).lq(29) To original1 false ((-1 $* posx(1))+posx(4))$<=0 // lets call this constraint X Now this space is failed. Something similar with the second space, but posting nr. 5 is different. To original2 false ((-1 $* posx(3))+posx(1))$<=0 To original2 false ( 10+(-1 $* posx(6))+posx(5))$>0 To original2 false ( 58+(-1 $* posx(5))+posx(4))$>0 To original2 false ((-1 $* posx(1))+posx(4))$<=0 // this is constraint X, it is now posted on this position, no longer as the last constraint anymore To original2 true posx(6)<=69 // this is no reified constraint, but just posted IntView(posx(6)).lq(69) To original2 false ( 43+(-1 $* posx(6))+posx(1))$>0 To original2 false ((-1 $* posx(5))+posx(2))$<=0 To original2 true ((-1 $* posx(1))+posx(3))$<=0 To original2 true ((-1 $* posx(4))+posx(3))$<=0 To original2 false ( 42+(-1 $* posx(5))+posx(3))$>0 To original2 false ( 42+(-1 $* posx(6))+posx(3))$>0 To original2 true ( -42+(-1 $* posx(3))+posx(1))$<0 To original2 true ( -15+(-1 $* posx(6))+posx(1))$<0 To original2 true ( 58+(-1 $* posx(1))+posx(4))$>0 To original2 true ( 42+(-1 $* posx(1))+posx(3))$>0 To original2 false ((-1 $* posx(1))+posx(2))$<=0 To original2 true ((-1 $* posx(6))+posx(1))$<=0 To original2 true ((-1 $* posx(5))+posx(1))$<=0 To original2 true ( -10+(-1 $* posx(5))+posx(1))$<0 To original2 true ((-1 $* posx(2))+posx(1))$<=0 To original2 false ( 43+(-1 $* posx(2))+posx(1))$>0 To original2 true ( -28+(-1 $* posx(1))+posx(6))$>0 To original2 false ( 28+(-1 $* posx(6))+posx(1))$>0 To original2 false ( -43+(-1 $* posx(1))+posx(2))$<0 To original2 true ( -58+(-1 $* posx(4))+posx(1))$<0 To original2 true posx(1)<=29 // this is no reified constraint, but just posted IntView(posx(1)).lq(29) This Space is not failed I know this is quite a huge blob of data and you probably wont have the time to reconstruct it. I will just have to adjust my code that this can happen. BTW: Can you confirm that this is due to the use of IntView::lq ? I never experienced this without them. Best, Max On 08/23/2012 12:40 PM, Guido Tack wrote: I guess under certain conditions the code that posts the constraints (not the actual propagator) can be stronger than ICL_DEF, in which case this can happen. If it's not too complicated, could you send us a concrete example? Cheers, Guido _______________________________________________ Gecode users mailing list users@gecode.org https://www.gecode.org/mailman/listinfo/gecode-users
_______________________________________________ Gecode users mailing list users@gecode.org https://www.gecode.org/mailman/listinfo/gecode-users