[gecode-users] Getting just assigned variable from ViewArray in a propagator

Christian Schulte cschulte at kth.se
Fri Mar 18 11:44:28 CET 2016


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, cschulte at kth.se

Expert Researcher, SICS, cschulte at sics.se

 

From: users-bounces at gecode.org [mailto:users-bounces at gecode.org] On Behalf Of Yunus Acikoz
Sent: Friday, March 18, 2016 10:47
To: users at 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
 
-------------- next part --------------
An HTML attachment was scrubbed...
URL: <http://www.gecode.org/pipermail/users/attachments/20160318/3487bc6b/attachment-0001.html>
-------------- next part --------------
A non-text attachment was scrubbed...
Name: smime.p7s
Type: application/pkcs7-signature
Size: 4623 bytes
Desc: not available
URL: <http://www.gecode.org/pipermail/users/attachments/20160318/3487bc6b/attachment-0001.bin>


More information about the users mailing list