[gecode-users] unsigned 32bit representation, additions

Jean-Noël Monette jean-noel.monette at it.uu.se
Wed Mar 11 16:13:12 CET 2015


Hi Serg,

Kellen Dye implemented a Bit-Vector domain implementation for Gecode for 
his master thesis. You can find his thesis at

http://uu.diva-portal.org/smash/record.jsf?pid=diva2%3A761927&dswid=8488

and the source-code at

https://github.com/kellen/bitvector-masters

He did not implement the addition constraint but the paper on which he 
based his implementation gives an algorithm for the addition:

L. D. Michel and P. Van Hentenryck. *Constraint* *Satisfaction* *over* 
*Bit-Vectors*. http://link.springer.com/chapter/10.1007/978-3-642-33558-7_39

Best,

Jean-Noël


On 2015-03-11 10:17, Christian Schulte wrote:
>
> Hi Serg,
>
> For the time being there is not much that you can do about this. And 
> Gecode cannot be easily recompiled using unsigned ints (or 64 bit 
> integers for that matter). I think some people have been experimenting 
> with arbitrary precision integers as well as bit vectors but I do not 
> know how far that got. Anybody?
>
> Best
>
> Christian
>
> --
>
> Christian Schulte, www.gecode.org/~schulte
>
> Professor of Computer Science, KTH, cschulte at kth.se 
> <mailto:cschulte at kth.se>
>
> Expert Researcher, SICS, cschulte at sics.se <mailto:cschulte at sics.se>
>
> *From:*users-bounces at gecode.org [mailto:users-bounces at gecode.org] *On 
> Behalf Of *Serg Buslovsky
> *Sent:* Wednesday, March 11, 2015 6:54 AM
> *To:* users at gecode.org
> *Subject:* [gecode-users] unsigned 32bit representation, additions
>
> Hi Group,
>
> I'm thinking about the ways of implementing 32bit unsigned integer 
> representations in gecode model.
>
> So I have 32 BoolVar's per uint32 representation, which are used to 
> store corresponding bits, then I can easily define bitwise operations 
> on "integers" by posting relation constraints on the bits.
>
> The problem is with the addition.
>
> My first approach was to add an IntVar, post linear constraints with 
> powers of 2 as coefficients to reconstruct integer from bits, however 
> gecode limits IntVar into signed int bounds and it doesn't fit.
>
> The second approach was to just implement binary addition:
>
> bool lsb = true;
>
> for (int i=(INT_BITS-1); i>=0; i--) {
>
> BoolVarArgs bits;
>
> bits << bools[i] << x->bools[i];
>
> if (!lsb) {
>
> bits << result->bools[INT_BITS+i+1];
>
> }
>
> rel(*model, BOT_XOR, bits, result->bools[i]);
>
> if (lsb) {
>
> rel(*model, BOT_AND, bits, result->bools[INT_BITS+i]);
>
> lsb = false;
>
> } else {
>
> linear(*model, bits, IRT_GQ, 2, result->bools[INT_BITS+i]);
>
> }
>
> }
>
> (bools[i] - bits of the first "integer", x->bools[i] - bits of the 
> second "integer", result->bools[i] - bits of the resulting "integer", 
> result->bools[INT_BITS+i] - carry bits)
>
> That works but it turned out to be very inefficient in practice, 
> complexity of the model is growing exponentially with this approach.
>
> Any thoughts? Maybe there's a way to recompile gecode to use unsigned 
> int internally? Maybe there are ideas on better implementation of 
> addition? Maybe just some suggestion on another tool which uses 
> unsigned ints internally?
>
> Thanks,
>
> Serg
>
>
>
> _______________________________________________
> Gecode users mailing list
> users at gecode.org
> https://www.gecode.org/mailman/listinfo/gecode-users

-------------- next part --------------
An HTML attachment was scrubbed...
URL: <http://www.gecode.org/pipermail/users/attachments/20150311/ce33d46c/attachment.html>


More information about the users mailing list