Hi Amina,

years back I wrote the attached std::set range iterator. you can use it with any of the IntView shrink function members like narrow etc. something like

////////////
  // setup iterator
GC_StlSetRangeIterator supportIter(&support);
  // prune the domain to supported values
GECODE_ME_CHECK(x0.narrow_r(home, supportIter, false));
////////////

the iterator implementation is obviously not the nices nor best source code possible but might be a starting point.. as I said, wrote it years ago and didnt touched it since that time.

Hope it helps.
Best,
Martin



Am 19.06.2013 20:00, schrieb Christian Schulte:
Read Chapter 25 in MPG and then you will have to implement a Gecode-style
iterator that iterates over the values of set<int>.



Best

Christian



--

Christian Schulte, www.ict.kth.se/~cschulte/



From: users-boun...@gecode.org [mailto:users-boun...@gecode.org] On Behalf
Of Mailing List Email
Sent: Wednesday, June 19, 2013 7:49 PM
To: Amina Kemmar
Cc: users@gecode.org
Subject: Re: [gecode-users] Reducing a view domain during propagation



Sorry, that's bounds consistency.

On 19 Jun 2013 19:23, "Mailing List Email" <mailingli...@gmail.com> wrote:

Try x1.le(max(s)), x1.ge(min(s)) for domain consistency.

On 19 Jun 2013 19:17, "Amina Kemmar" <kemmar.am...@gmail.com> wrote:

Hi,

In my propagate function that  I implemented, I want to reduce the domain of
an IntView x1 to a fix set of values given by the strucure set<int> s, how
can I do this?

Thank you for your help.
Regards.


_______________________________________________
Gecode users mailing list
users@gecode.org
https://www.gecode.org/mailman/listinfo/gecode-users




_______________________________________________
Gecode users mailing list
users@gecode.org
https://www.gecode.org/mailman/listinfo/gecode-users


--
Dr. Martin Mann, Postdoc
Bioinformatics - Inst. of Computer Science
Albert-Ludwigs-University Freiburg
Tel: ++49-761-203-8254
Fax: ++49-761-203-7462
http://www.bioinf.uni-freiburg.de/~mmann/

/*
 *  Main authors:
 *     Martin Mann http://www.bioinf.uni-freiburg.de/~mmann/
 *
 *  Contributing authors:
 *     Sebastian Will http://www.bioinf.uni-freiburg.de/~will/
 *
 *  Copyright:
 *     Martin Mann, 2007
 *
 *  This file is part of the CPSP-tools package:
 *     http://www.bioinf.uni-freiburg.de/sw/cpsp/
 *
 *  See the file "LICENSE" for information on usage and
 *  redistribution of this file, and for a
 *     DISCLAIMER OF ALL WARRANTIES.
 *
 */

#include "GC_StlSetRangeIterator.h"
        
        GC_StlSetRangeIterator::GC_StlSetRangeIterator() :
                data(NULL), noFurtherRange(true)
        {
                getNextRange();
        }
                
        GC_StlSetRangeIterator::GC_StlSetRangeIterator(const std::set<int>* 
data_) :
                data(data_), noFurtherRange(false)
        {
                if (data != NULL) 
                        actElem = data->begin();
                getNextRange();
        }
        
        GC_StlSetRangeIterator::~GC_StlSetRangeIterator()
        {
        }
        
        void
        GC_StlSetRangeIterator::getNextRange() {
                if (data==NULL || actElem == data->end()) {
                        noFurtherRange = true;
                        return;
                }
                        // find next range
                nextMin = *actElem;
                nextMax = nextMin;
                        // build up new upper bound until end of set reached or 
gap in 
                        // sequence
                while ( (++actElem != data->end()) && (*actElem == 
(nextMax+1))) {
                        nextMax++;
                }
        }
/*
 *  Main authors:
 *     Martin Mann http://www.bioinf.uni-freiburg.de/~mmann/
 *
 *  Contributing authors:
 *     Sebastian Will http://www.bioinf.uni-freiburg.de/~will/
 *
 *  Copyright:
 *     Martin Mann, 2007
 *
 *  This file is part of the CPSP-tools package:
 *     http://www.bioinf.uni-freiburg.de/sw/cpsp/
 *
 *  See the file "LICENSE" for information on usage and
 *  redistribution of this file, and for a
 *     DISCLAIMER OF ALL WARRANTIES.
 *
 */

#ifndef GC_STLSETRANGEITERATOR_HH_
#define GC_STLSETRANGEITERATOR_HH_


#include <set>
#include <iostream>
        
                /**
                 * Provides a constant Gecode RangeIterator of a std::set<int> 
that 
                 * calculates the ranges on demand.
                 */
        class GC_StlSetRangeIterator
        {
        private:
                const std::set<int>* data;
                std::set<int>::const_iterator actElem;
                
                bool noFurtherRange;
                
                int nextMin, nextMax;
                
                        //! searchs for the next range and sets the inner 
members
                void getNextRange();
        public:
                GC_StlSetRangeIterator();
                GC_StlSetRangeIterator(const std::set<int>* data_);
                virtual ~GC_StlSetRangeIterator();
                
                void init(const std::set<int>* const data_) {
                        data = data_;
                        noFurtherRange = false;
                        if (data != NULL) 
                                actElem = data->begin();
                        getNextRange();
                }
                
                bool operator()(void) const { return !noFurtherRange; }
                void operator++(void) { getNextRange(); }
                
                int min(void) const { return nextMin; }
                int max(void) const { return nextMax; }
                unsigned int width(void) { return nextMax-nextMin+1; }
                
                
        };
        

#endif /*GC_STLSETRANGEITERATOR_HH_*/
_______________________________________________
Gecode users mailing list
users@gecode.org
https://www.gecode.org/mailman/listinfo/gecode-users

Reply via email to