Hello,I tested the new Gecode/J 2.2.0. I am very grateful for your work, but it did not work for me as I expected. I modified the constraints as you showed, but it did not prove the required equality.
I copied your code into my sample program to test, but it did not help. I got the following result with the equality of the two variable: Variable #1: {0..1,3,5} Variable #2: [0..5] Summary: runtime: 6 solutions: 1 propagations: 4 failures: 0 clones: 0 commits: 0 peak memory: 5KB SS_SOLVEDI attached the my test code. If I changed to post method call (line 58-59) with the rel constraint (line 60), the result become the expected: Gecode was able to prove the equality. I also tried with a Boolean Exp BExpr expression = new BExpr(new Expr(new Expr(space.variable2).minus(space.variable1)), IRT_EQ, 0,IntConLevel.ICL_DOM);
post(space, expression);//rel(space, space.variable1, IRT_EQ, space.variable2, IntConLevel.ICL_DOM);
I used Java 1.6 in a Windows XP 32 bit system, in Eclipse environment.If you could give me a hint what may I have done wrong, I would be very glad. Thank you for your help,
Zoltán Ujhelyi
ExprTest.java
Description: Binary data
On 2008.08.23., at 8:56, Guido Tack wrote:
Hi! Please let me know if this is more or less what you wanted to use:BExpr be = new BExpr(new Expr(new Expr(space.var2).minus(space.var1)), IRT_EQ, 0, ICL_DOM);The ICL argument is now part of the BExpr, so it means that the linear constraint inside is propagated with ICL_DOM. I hope that's what you need. It will be available in Gecode/J 2.2.0 (very probably next week).Cheers, Guido Ujhelyi Zoltan wrote:Hello, thank you for your reply. I understand the problem stated here, but I would like to ask whether there is a solution to add a constraint like that to a Boolean Expression with the domain consistent propagation (ICL_DOM). I did not found any possibilities for that looking in the Gecode/J API, but it would help a lot for our project. Thank you, Ujhelyi Zoltán On 2008.08.11., at 11:34, Guido Tack wrote:Could you please post to the mailing list? Thanks. Guido Am 11.08.2008 um 11:22 schrieb Ujhelyi Zoltan:Hello, thank you for your reply. I understand the problem stated here, but I would like to ask whether there is a solution to add a constraint like that to a Boolen Expression with the domain consistent propagation (ICL_DOM). I did not found any possibilities for that looking in the Gecode/J API, but it would help a lot for our project. Thank you, Zoltán Ujhelyi On 2008.08.11., at 9:03, Guido Tack wrote:Hi. As you've already found out, you have to use domain consistent propagation (ICL_DOM) to get the result you want. You should be able to use post(space, new Expr(space.variable1), IRT_EQ, new Expr(space.variable2), ICL_DOM) to get the desired result. I'm not 100% sure, but I think your solution that uses e=variable1- variable2, e=0 doesn't work because only the e=0 is propagated to domain consistency, while e=variable1-variable2 still only achieves bounds consistency. Cheers, Guido Ujhelyi Zoltan wrote:Hello again, I have been experimenting with the questions raised in my previous mail.I created a small Gecode space to be able to test the problem in a smaller scale, where I did use two variables (variable1, variable2,both IntVars with the domain {0,5}) and three constraints: variable1 equals variable2, and variable2 cannot have the values 2 and 4. In all of my tests the latter two constraints are described like that: post(space, new BExpr(space.variable1, IRT_NQ, 2)); post(space, new BExpr(space.variable1, IRT_NQ, 4));For the third constraint I had several tries. When I was using therel() clause to write the constraint, I got the expected result: Variable #1: {0..1,3,5} Variable #2: {0..1,3,5} But when using a similar construct I would like to use in the static verifier, I got no result for the second variable, it can has all values from it's domain. post(space, new BExpr(space.variable1, IRT_EQ, space.variable2)); Reading about different propagators, I have been able to get the expected result with the use of the ICL_DOM propagator, but only if I was posting the constraint directly, like that: post(space, new Expr(space.variable1), IRT_EQ, new Expr(space.variable2),org.gecode.GecodeEnumConstants.ICL_DOM); But if I tried to translate the a BExprs to that form, I did not succeed: Expr expression = new Expr(new Expr(space.variable2).minus(space.variable1)); post(space, new Expr(expression), IRT_EQ, 0, org.gecode.GecodeEnumConstants.ICL_DOM);Can you tell me a way how to enable this strong ICL_DOM propagatorsmeanwhile using the BExpr form, if it is possible? It would help our project a lot, it would simplify it's code. Thank you for your help, Zoltán Ujhelyi On 2008.08.09., at 18:30, Ujhelyi Zoltan wrote:Hello all,we are currently trying to build a static checker system on top of Gecode/J 2.1.1. (in an Eclipse environment), and we have found aninteresting case. In order to allow us greater flexibility we try to use the ExpressionAPI (it allows us to build constraints in a hierarchical manner).I was testing the implementation, and found an interesting final result: there were to IntVars, which were supposed to be the same, did not have the same final ranges: one of them had {2,4}, but the other had {2,3,4}. I tried to trace back the code to look whether theconstraints were wrong or not, and found the following expressionbuilding term: BExpr expression = new BExpr(new Expr(variable1),relation, new Expr(variable2));Tracing the variables variable1 was a new variable, it hadn't been constrained yet, while variable2's domain had been limited to thevalues 2 and 4 (and they were the variables mentioned before in this letter), while the relation had the value IRT_EQ. I tried a post of the expression right after it's construction to see whether it helps or not: org.gecode.Gecode.post(space, expression); It did not solve the problem, but when I replaced the post method to the following rel call, the constraint handling was working as I expected it before. rel(space, variable1, IntRelType.IRT_EQ, variable2); I would like to know, whether this phenomenon is the intentional (maybe I do not understand something under the hood), or not. And if you could tell me a way to avoid it, I would be very glad. Thank you very much in advance for your help, Zoltán Ujhelyi _______________________________________________ Gecode users mailing list [EMAIL PROTECTED] https://www.gecode.org/mailman/listinfo/gecode-users_______________________________________________ Gecode users mailing list [EMAIL PROTECTED] https://www.gecode.org/mailman/listinfo/gecode-users_______________________________________________ Gecode users mailing list [EMAIL PROTECTED] https://www.gecode.org/mailman/listinfo/gecode-users
_______________________________________________ Gecode users mailing list [EMAIL PROTECTED] https://www.gecode.org/mailman/listinfo/gecode-users