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
users@gecode.org
https://www.gecode.org/mailman/listinfo/gecode-users

Reply via email to