[gecode-users] Position of IntVar in IntVarArray within a propagate function
Peter Vanhee
peter.vanhee at gmail.com
Tue Apr 13 18:52:04 CEST 2010
Of course, I missed the most obvious solution :) This will do the trick.
Thanks!
Peter
On 13 Apr 2010, at 18:50, Mikael Zayenz Lagerkvist wrote:
> When you define your propagator, just add two int-fields pos0 and pos1 and instantiate the propagators with the appropriate info. Remember to update the fields when the propagator is copied.
>
> /Mikael
>
> --
> Mikael Zayenz Lagerkvist, http://www.ict.kth.se/~zayenz
>
> On 13 apr 2010, at 18.03, Peter Vanhee <peter.vanhee at gmail.com> wrote:
>
>> Hey all,
>>
>> I am working on a binary propagator which needs to know the position of the two variables
>> it receives within the domain of the problem (coded with an IntVarArray).
>>
>> I am not sure whether this is possible (and if it should be possible!) to access this information, as I believe
>> a binary propagator should be able to propagate without knowing the context.
>>
>> Still, in my particular problem I don't see any other solution.
>>
>> Here a code snippet:
>>
>> // in the model
>> IntVarArray domains;
>>
>> // in the propagator
>> ExecStatus
>> BinaryPropagator::propagate(Space& home, const ModEventDelta& med) {
>>
>> if (x0.assigned()) {
>> int val = x0.val();
>>
>> // need to know index of x0 within "domains" to access info that depends on position in domain + value on that position
>> // does x0 has some reference to this? or home?
>> int idx = ?
>> }
>> else {
>> // same here but with x1
>> }
>> }
>>
>> A simple but rather dumb solution would be to encode the position within the values using
>> some mathematical trick, but this will create unnecessary holes within the domain.
>>
>> Thanks for any help on this!
>>
>> Peter
>>
>>
>> _______________________________________________
>> Gecode users mailing list
>> users at gecode.org
>> https://www.gecode.org/mailman/listinfo/gecode-users
More information about the users
mailing list