Hi Milt,

just posting a constraint does not mean it is "executed".  Running search for 
your problem (or, in fact, just calling status() on the space you post the 
constraints in) should determine that ds[0]=1.  See Tip 2.2 "Propagation is 
explicit" in Modeling and Programing with Gecode.

Cheers,
Guido

On 18 Nov 2011, at 02:28, Milton Friedman wrote:

> I've been learning and coding in Gecode for the past few weeks.  I read and 
> re-read the modeling parts of MPG, and checked the online docs for syntax.
> 
> I've tried recasting my application several times and each time I get blocked 
> by syntax I'd expect to exist that doesn't.
> 
> I hardly ever seem to have a reification-suitable situation, and when I do, 
> it's with a function that doesn't support reification.
> 
> 
> I'm used to languages that let you put data in arrays and then index into the 
> arrays to solve problems.  The Gecode examples seem to have variable arrays, 
> and constant integer indices into them, based on a fixed problem structures, 
> like Sudoku etc., but in my case the application structure that's constant is 
> the array, and the parts of it that I need to index into are determined by 
> the finite-domain variables.
> 
> 
> 
> Below is an example.  I'm trying to use an IntVarArgs to index into a vector 
> of constants (in this case booleans).
> 
> I can't figure out how to get Gecode to index directly into the C++ vector, 
> so I create a BoolVarArgs vector and copy the constants into it...seems 
> wasteful but ok.
> 
> Then I do the indexing into a vector of constants, with a single number 
> (1-item domain), and it tells me the binary result is [0..1] -- not 
> especially enlightening news about a binary.
> 
> So I must be missing something obvious about how to index in Gecode.  Any 
> thoughts?
> 
> Any help or guidance would be appreciated.
> 
> Thanks,
> 
> -Milt   
> 
> 
> 
>       //notCD is a C++ boolean vector: knows nothing about Gecode
> 
>         bool * notCD
> 
>         notCD = new bool [VecLength];
> 
>         for (int i = 0; i<VecLength; i++) {
> 
>                 notCD[i] = abs(some2D_integer_array[i][2])==1;  
> 
>         }              
> 
>         //Create nCD: BoolVarArgs vector of notCD       //only creating nCD 
> because I can't get Gecode to let me work directly with notCD
> 
>         BoolVarArgs nCD(VecLength);
> 
>         for(int i=0; i<VecLength; i++){ //expected to write nCD[i]=notCD[i]; 
> or maybe nCD[i]=expr(*this,notCD[i]); or nCD[i]=expr(*this,element(notCD,i));
> 
>                                         // but none of these forms compiled
> 
>                 if (notCD[i]){
> 
>                         nCD[i]=T;
> 
>                 }
> 
>                 else {
> 
>                         nCD[i]=F;
> 
>                 }
> 
>         }
> 
>         //I'm really just trying to index with an item of an IntVarArgs 
> vector into a C++ boolean vector
> 
>         IntVar da;
> 
>         for(int i=0; i<3; i++){
> 
>                 da = p[iterm+i];        //p is an IntVarArgs with all terms 
> assigned, and p[iTerm+0] is 192
> 
>                 ds[i] = expr(*this,element(nCD,da),ICL_DOM);
> 
>                 cout<<"da: "<<da<<", ds["<<i<<"]: "<<ds[i]<<", nCD[192]: 
> "<<nCD[192]<<"  ";
> 
>         }
> 
>         //-------------------
> 
>         //so unfortunately the output is:
> 
>         //da: 192, ds[0]: [0..1], nCD[192]: 1
> 
>         //
> 
>         //why isn't the output:
> 
>         //da: 192, ds[0]: 1, nCD[192]: 1
> 
>         //why is there indecision about ds[0]?...how do I get Gecode to 
> understand that ds[0] must be 1?
> 
> _______________________________________________
> Gecode users mailing list
> [email protected]
> https://www.gecode.org/mailman/listinfo/gecode-users

-- 
Guido Tack, http://people.cs.kuleuven.be/~guido.tack/




_______________________________________________
Gecode users mailing list
[email protected]
https://www.gecode.org/mailman/listinfo/gecode-users

Reply via email to