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

Reply via email to