You've probably swapped rows and columns of the matrix, please have a look at 
the documentation. The error says that the size of the coefficient array is 
different from the size of the variable array.

Cheers,
Guido

-- 
Guido Tack


On 28/08/2013, at 7:11, manel askri <[email protected]> wrote:

>  hi everyone !
> 
> I have problem with Linear function when i compile , the compiler tells me 
> that :
> exeption Int::linear :size of arguments mismatch 
> i think that the problem is with the linear function : my code is this : 
> #include <gecode/driver.hh>
> #include <gecode/int.hh>
> #include <gecode/search.hh>
> #include <gecode/minimodel.hh>
> 
> using namespace Gecode;
> 
> class MMKP : public Script{
> 
> protected:
>       static const int n=4 ;//number of testers
>       static const int m=5;// number of nodes
>       IntArgs R;
>       IntArgs C;
>       IntArgs B;
>       IntArgs Dr;
>       IntArgs Dc;
>       IntArgs Db;
>       IntArgs g;
> 
>       IntVarArray a;
>       IntVarArray k;
>       IntVar l;
> public :
>       enum {
>     find_Optimal_Solution, find_realizable_solution
>   };
>       MMKP (const Options& opt) : a(*this,n*m, 0,1){
> 
>               R=IntArgs(4,10,15,20,40);
>               C=IntArgs(4,20,25,30,40);
>               B=IntArgs(4,20,30,35,40);
> 
>               Dr=IntArgs(4,5,10,15,25);
>               Dc=IntArgs(4,15,20,35,37);
>               Db=IntArgs(4,10,15,20,35);
> 
> 
>               k=IntVarArray(*this,n*m ,0,100000); 
>               Matrix <IntVarArray> results(k, n,m);
> 
>               //creation variables
> 
>               //IntVarArray a(*this,n*m,0,1); // Array of n*m boolean 
> variables
>               Matrix <IntVarArray> X (a,n,m);// Matrix "view" of the array a
> 
>               // objectiv variable
>               IntVar gain (*this, 1,1000000);
> 
> 
>               //creation of constraints 
>                       // ... over rows
>               for ( int j=0; j<n;j++)
>               {
> 
>                               linear(*this , X.row(j),IRT_EQ,1);
>                       
>               }
> 
>               //... over columns
>                       // first, get the columns, we will use an intermidiare 
> matrix XDual
> 
>               IntVarArray b(*this, m*n,0,1);
>               Matrix <IntVarArray> XDual (b, m, n);
>               for (int i=0; i<m;i++)
>               {
>                       for ( int j =0; j<n ; j++)
>                       {
>                               XDual(i,j)=X(j,i);
>                       }
>               }
> 
>               for (int j = 0; j < m; j++) {
> 
>                       linear(*this, Dr,XDual.row(j),IRT_NQ, R[j]);
>               }
> 
>               for (int j = 0; j < m; j++) {
>                       linear (*this, Dc, XDual.row(j), IRT_NQ,C[j]);
> 
>               }
> 
>               for (int j = 0; j < m; j++) {
>                       linear (*this, Db, XDual.row(j), IRT_NQ,B[j]);
> 
>               }
>               switch (opt.model()) {
>         case find_Optimal_Solution:
> 
>                       g=IntArgs(4,20,30,40,50);
>               //Objective function
> 
>               for (int i = 0; i < n; i++)
>               {
>                       linear(*this, g,X.row(i), IRT_EQ, gain);
> 
>               }
>               for ( int i=0; i<n;i++){
>                       for ( int j =0; j<m;j++)
>                       {
>                               results(i,j)=X(i,j);
>                       }
>               }
> 
>               break;
> 
>               case find_realizable_solution:
>                       for ( int i=0; i<n;i++){
>                       for ( int j =0; j<m;j++)
>                       {
>                               results(i,j)=X(i,j);
>                       }
>               }
>         break;
> 
>                   // post branching
>         branch(*this, a, INT_VAR_SIZE_MAX(), INT_VAL_MAX());
>               }
>       }
>               // search support
>      MMKP(bool share, MMKP& s) : Script(share, s){
>       a.update(*this, share, s.a);
>     }
> 
>     virtual Space* copy(bool share) {
>       return new MMKP(share,*this);
>     }
> 
>           // print solution
>     void print(std::ostream& os) const  {
>               for(int i = 0; i < n; i++) {
>                for(int j = 0; j < n; j++)
>            os << std::setw(4) << a[i * n + j];
>                os << std::endl;
>       }
> }
>       };
> 
>       // main function
> int main(int argc, char* argv[]) {
>   Options opt("MMKP");
>   opt.model(MMKP::find_Optimal_Solution);
>   opt.model(MMKP::find_realizable_solution);
> 
>   opt.parse(argc,argv);
>   Script::run<MMKP,DFS,Options>(opt);
>   return 0;
> }
> 
> so thank you very much for helping me 
> _______________________________________________
> Gecode users mailing list
> [email protected]
> https://www.gecode.org/mailman/listinfo/gecode-users
_______________________________________________
Gecode users mailing list
[email protected]
https://www.gecode.org/mailman/listinfo/gecode-users

Reply via email to