[gecode-users] Questions about element and channel constraint for float variables

Dani G daniel.garcialorenzo at gmail.com
Sun Nov 20 20:02:17 CET 2016


Hello all,

These ares my first question, thanks for this library, I found it very
interesting and the tutorial is really great.

I'm using the last version of Gecode 5.0. In the project I'm working on I
need to use float variables (the problem include exponential calculations
that need to be precise), although I'm trying to minimize their use as much
as possible by converting Floats into Into Ints. Two questions arises:

- I couldn't find a "element" constraint for FloatVarArray, and it would
really help me. I don't know if I could easily reimplemented it using the
example of the constraint for Int variables, or there will be some problem?
Should I find a different modelling, like using a linear constraint using a
0,1 vector?

- To minimize the use of Float variables I want to round my Float
calculations using two digits and then convert them to Int using a channel
constraint. I imagine that I need to take into account the rouding if i
want to make it work. This sounds right?

IntVar time; // Variable used in other constraints
FloatVar time_float(home, TIME_MIN, TIME_MAX); // conversion to float

channel(home, time, time_float); // conversion to float for the calculations

// float calculation, this will obviously wil be any float number
FloatVar activity_float= expr(home, c1 * exp( c2 * time_float);

// Rounded version of activity multiplied by 100 to be converted into Int
FloatVar activity_float_rounded100(home, ACTIVITY_MIN, ACTIVITY_MAX);

// Rounding up, and multiplying by 100 to keep the desired precision
rel(home, activity_float_rounded100   >= 100* activity_float);
rel(home, activity_float_rounded100-1 <  100* activity_float);

IntVar activity_int(home, ACTIVITY_MIN, ACTIVITY_MAX); // rounded activity
by 100
channel(home,activity_int, activity_float_rounded100);

// now activity_int can be used in other int constraints

I bellieve that if I apply directly the channel to activity_float, the
exponential constraint will fail as channel will force activity to be
exactly equal to the Int value, am I right?


Thank you very much your work and for your thoughts

Best regards

Daniel
-------------- next part --------------
An HTML attachment was scrubbed...
URL: <http://www.gecode.org/pipermail/users/attachments/20161120/13919b84/attachment.html>


More information about the users mailing list