[gecode-users] Reflection support for FloatVars questions
Guido Tack
tack at ps.uni-sb.de
Sat Aug 23 23:53:25 CEST 2008
Filip Konvička wrote:
> I looked a bit at your reflection HOWTO at
>
> http://www.gecode.org/gecode-doc-latest/PageReflection.html#SecReflAddSupport
>
> Well, it seems that it should be possible to add support for
> FloatVars,
> but still I'd welcome some comments/advices :-)
Sure!
> One thing is that we don't have just generic propagators and
> branchings,
> we also have generic variables and views. All are templates :-) One
> thing I did already was making the user explicitly instantiate some
> classes using a pre-defined macro once they want to use FloatVars
> with a
> certain "domain type" (we need ViewVarImpTraits and VarViewTraits
> specializations for the appropriate types). So I can probably use a
> similar approach to register all kinds of reflection &
> (un)serialization
> stuff.
Yes, right. What you'll mainly have to implement for variables is the
function FloatVarImp<...>::spec. It will have to create a
Reflection::VarSpec, whose first argument is the variable type
identifier (vti), a symbol. You have to make sure that this vti is
unique for each FloatVarImp instance.
> Another thing is the reflection spec (Gecode::Reflection::ActorSpec).
> There seems to be support for signed integer constants and for
> strings,
> so I'll try to serialize interval domains and constants using some
> standard conversions to/from std::string (like boost::lexical_cast). I
> suppose that adding support for types like 'double' and 'float' to
> ActorSpec is probably a bad idea (given the platform differences in
> representing floats...right?)
Hm, I don't know. An ActorSpec just must be able to represent what
the system uses, it doesn't have to be platform-independent. The idea
is that an ActorSpec just lets you look inside the propagator. If you
want to communicate the specs, e.g. over the network, you'll have to
make sure that a platform-independent representation is used. E.g.,
we can use boost serialization to turn ActorSpecs into strings. The
serialization classes should allow platform-independent transfer of
e.g. doubles.
So, I guess we should add support for double in ActorSpec.
> Yet another thing is that my branching templates are parametrized not
> just by the view type but also by some variable- and value-selecting
> classes. This is not strictly necessary, but I did not see a reason
> not
> to do so before I got here :-) So I intend to use 'mangle' to do the
> magic, and I suppose that it should be possible when I add 'type()' to
> the appropriate classes (or is there something more to it?)
No, that's all there is to it ;-) Just add a type method, that's how
we do it, too.
> PS: There is an error in the howto, the line
>
> static Gecode::Symbol ati(void) const {
>
> should probably be
>
> static Gecode::Support::Symbol ati(void) {
Thanks! I fixed it in the svn.
Cheers,
Guido
More information about the gecode-users
mailing list