Hi Christian,

Thanks for the quick reply.

Bitset suggestion in the first option seems easier to implement.
But considering that each ViewArray holds around 15000+ Views, would it be
better to use Advisors performance wise?

Best regards
Yunus

On Fri, Mar 18, 2016 at 12:44 PM, Christian Schulte <cschu...@kth.se> wrote:

> Hi Yunus,
>
>
>
> There are two options here:
>
> 1.       You track inside your propagator for which assigned variable you
> have already created a propagator. One easy trick is (it depends on your
> propagator whether this is in fact possible) to remove assigned views from
> your array. Another option would be to use a bitset or something like that.
>
> 2.       You can track which views get assigned by using advisors. Please
> check MPG for the details.
>
>
>
> Best
>
> Christian
>
>
>
> --
>
> Christian Schulte, www.gecode.org/~schulte
>
> Professor of Computer Science, KTH, cschu...@kth.se
>
> Expert Researcher, SICS, cschu...@sics.se
>
>
>
> *From:* users-boun...@gecode.org [mailto:users-boun...@gecode.org] *On
> Behalf Of *Yunus Acikoz
> *Sent:* Friday, March 18, 2016 10:47
> *To:* users@gecode.org
> *Subject:* [gecode-users] Getting just assigned variable from ViewArray
> in a propagator
>
>
>
> Hi everyone,
>
>
>
> I have a tunneling constraint propagator that has 4 ViewArrays and
> scheduled to run on their assignment events:
>
>
>
>     Gecode::ViewArray<Gecode::Int::IntView> successors_;
>
>   Gecode::ViewArray<Gecode::Int::IntView> predecessors_;
>
>   Gecode::ViewArray<Gecode::Int::IntView> vehicles_;
>
>   Gecode::ViewArray<Gecode::Int::BoolView> cancels_;
>
>
>
>   successors_.subscribe(home, *this, Gecode::Int::PC_INT_VAL);
>
>   predecessors_.subscribe(home, *this, Gecode::Int::PC_INT_VAL);
>
>   vehicles_.subscribe(home, *this, Gecode::Int::PC_INT_VAL);
>
>
>
> I want to post additional constraints whenever a value gets fixed over
> those arrays.
>
>
>
> for (int i = 0; i < successors_.size(); ++i) {
>
>     if (vehicles_[i].assigned()) {
>
>         int val = vehicles_[i].val();
>
>         // post constraint...
>
>         // eg.
>
>         Gecode::element(home, vehicles_, successors_[i], val);
>
>     }
>
>     if (successors_[i].assigned()) {
>
>         int val = successors_[i].val();
>
>         // post another constraint ...
>
>     }
>
> }
>
>
>
> For example assume that we first assign the vehicle[2] to some value and
> propagate accordingly.
>
> Then if we assign vehicle[7] how can we prevent doing same action for
> vehicle[2].
>
>
>
> Does it post the same constraints for all the previously assigned
> variables, again and again.... ?
>
>
>
> Is there a way to get the recently assigned variable that cause thıs
> propagator to run?
>
> Cheers,
>
> Yunus
>
>
>
>
_______________________________________________
Gecode users mailing list
users@gecode.org
https://www.gecode.org/mailman/listinfo/gecode-users

Reply via email to