# Re: FD: Arithmetic Constraints

From: Thom Fruehwirth <fruehwir_at_informatik.uni-muenchen.de>
Date: Thu 25 Jan 2001 04:26:08 PM GMT
Message-ID: <3A7053A0.A9F5EFDD@informatik.uni-muenchen.de>
```rui@omega.di.uminho.pt wrote:
>
> I was trying to express a constraint like C #= abs(A) in fd. After a few
> attempts it seemed that none of the usual arithmetic constraints, appart
> from the basic operations (+, -, * and /) can be easily represented.
>
> Is this true? Or am I just being a clueless newbie?
> Is the way around to write those constraints from scratch as user defined
> ones?
>
> --Rui Mendes

>From the definition of abs(i)=a
if (i < 0) a = -i else a = i;
it follows that (sorry, latex)
\$(i<0 \land a= -i) \lor (\neg i<0 \land a= i)\$
\$a \geq 0 \land a \geq i \land i \geq -a\$
that you can use as propagator for the abs-constraint.

In finite domains, you can also write your own propagator in the constraint
handling rules library of Eclipse, something like:

I::ListDomain, A#=abs(I) ==>
setof(V, (member(W,ListDomain), V is abs(W)), AL), A::AL.

A::ListDomain, A#=abs(I) ==>
setof(V, (member(W,ListDomain),(V is W;V is -W), IL), I::IL.

Thom Fruehwirth
--
http://www.pst.informatik.uni-muenchen.de/~fruehwir/
```
Received on Thu Jan 25 16:39:33 2001

This archive was generated by hypermail 2.1.8 : Wed 16 Nov 2005 06:07:07 PM GMT GMT