gecode:Multiple Multidimensional Knapsack Problem (MMKP)

gecode:Multiple Multidimensional Knapsack Problem (MMKP) - C++ - Programmation

Marsh Posté le 24-07-2013 à 06:17:23    

salut tout le monde !
je suis nouvelle au monde de programmation par contrainte avec Gecode qui utilise le c++, je vous présente le problème :
 
Mathématiquement, notre problème de placement peut être modélisé par la fusion des deux variantes knapsack introduites : problème du multidimensionnelle et multiples sac à dos  . Le modèle obtenu est appelé Multiple Multidimensional Knapsack Problem (MMKP). Nous supposons que le
environnement d'exécution se compose de m nœuds et nous avons n composants de test qui peuvent leur être confiées. Nous essayons de trouver une solution optimale de placement des composants de test ne viole pas les ressources et les contraintes de connectivité et aussi
maximiser leurs profits de placement. Nous pouvons formuler ce problème en utilisant la Variante MMKP comme suit https://mail-attachment.googleuserc [...] Q&sadssc=1
 
Les ressources fournies par les noeuds m sont donnés par trois vecteurs: C qui contient l'unité centrale de traitement fournie, R qui fournit la mémoire vive et B qui sont disponibles contient le niveau de la batterie de chaque noeud (voir le lien suivant ) https://mail-attachment.googleuserc [...] _IoGLZOyyk
 
En outre, les ressources requises pour chaque composant de test sont illustrés sur trois vecteurs: DC qui porte l'unité centrale requise CPU, le Dr qui contient le nécessaire RAM et Db qui contient la batterie requis par chaque testeur.(voir le lien suivant )https://mail-attachment.googleuserc [...] JF-KMsY1mk
 
Voici mon code que j'ai développé pour résoudre ce problème :

Code :
  1. #include <gecode/driver.hh>
  2. #include <gecode/int.hh>
  3. #include <gecode/search.hh>
  4. #include <gecode/minimodel.hh>
  5. using namespace Gecode;
  6. class MMKP : public Script{
  7. protected:
  8. static const int n=4 ;//number of testers
  9. static const int m=5;// number of nodes
  10. IntArgs R;
  11. IntArgs C;
  12. IntArgs B;
  13. IntArgs Dr;
  14. IntArgs Dc;
  15. IntArgs Db;
  16. IntArgs g;
  17. IntVarArray a;
  18. IntVarArray k;
  19. IntVar l;
  20. public :
  21. enum {
  22.     find_Optimal_Solution, find_realizable_solution
  23.   };
  24. MMKP (const Options& opt) : a(*this,n*m, 0,1){
  25.  R=IntArgs(4,10,15,20,40);
  26.  C=IntArgs(4,20,25,30,40);
  27.  B=IntArgs(4,20,30,35,40);
  28.  Dr=IntArgs(4,5,10,15,25);
  29.  Dc=IntArgs(4,15,20,35,37);
  30.  Db=IntArgs(4,10,15,20,35);
  31.  k=IntVarArray(*this,n*m ,0,100000);
  32.  Matrix <IntVarArray> results(k, n,m);
  33.  //creation variables
  34.  //IntVarArray a(*this,n*m,0,1); // Array of n*m boolean variables
  35.  Matrix <IntVarArray> X (a,n,m);// Matrix "view" of the array a
  36.  // objectiv variable
  37.  IntVar gain (*this, 1,1000000);
  38.  //creation of constraints  
  39.   // ... over rows
  40.  for ( int j=0; j<n;j++)
  41.  {
  42.    linear(*this , X.row(j),IRT_EQ,1);
  43.  }
  44.  //... over columns
  45.   // first, get the columns, we will use an intermidiare matrix XDual
  46.  IntVarArray b(*this, m*n,0,1);
  47.  Matrix <IntVarArray> XDual (b, m, n);
  48.  for (int i=0; i<m;i++)
  49.  {
  50.   for ( int j =0; j<n ; j++)
  51.   {
  52.    XDual(i,j)=X(j,i);
  53.   }
  54.  }
  55.  for (int j = 0; j < m; j++) {
  56.   linear(*this, Dr,XDual.row(j),IRT_NQ, R[j]);
  57.  }
  58.  for (int j = 0; j < m; j++) {
  59.   linear (*this, Dc, XDual.row(j), IRT_NQ,C[j]);
  60.  }
  61.  for (int j = 0; j < m; j++) {
  62.   linear (*this, Db, XDual.row(j), IRT_NQ,B[j]);
  63.  }
  64.  switch (opt.model()) {
  65.         case find_Optimal_Solution:
  66.   g=IntArgs(4,20,30,40,50);
  67.  //Objective function
  68.  for (int i = 0; i < n; i++)
  69.  {
  70.   linear(*this, g,X.row(i), IRT_EQ, gain);
  71.  }
  72.  for ( int i=0; i<n;i++){
  73.   for ( int j =0; j<m;j++)
  74.   {
  75.    results(i,j)=X(i,j);
  76.   }
  77.  }
  78.  break;
  79.  case find_realizable_solution:
  80.   for ( int i=0; i<n;i++){
  81.   for ( int j =0; j<m;j++)
  82.   {
  83.    results(i,j)=X(i,j);
  84.   }
  85.  }
  86.         break;
  87.      // post branching
  88.         branch(*this, a, INT_VAR_SIZE_MAX(), INT_VAL_MAX());
  89.  }
  90. }
  91.  // search support
  92.      MMKP(bool share, MMKP& s) : Script(share, s){
  93.       a.update(*this, share, s.a);
  94.     }
  95.     virtual Space* copy(bool share) {
  96.       return new MMKP(share,*this);
  97.     }
  98.     // print solution
  99.     void print(std::ostream& os) const  {
  100.  for(int i = 0; i < n; i++) {
  101.   for(int j = 0; j < n; j++)
  102.            os << std::setw(4) << a[i * n + j];
  103.   os << std::endl;
  104. }
  105. }
  106. };
  107. // main function
  108. int main(int argc, char* argv[]) {
  109.   Options opt("MMKP" );
  110.   opt.model(MMKP::find_Optimal_Solution);
  111.   opt.model(MMKP::find_realizable_solution);
  112.   opt.parse(argc,argv);
  113.   Script::run<MMKP,DFS,Options>(opt);
  114.   return 0;
  115. }


Cela m'affiche des erreurs que je ne comprend pas,donc je serai très reconnaissante si vous pouvez m'aidez  
merci d'avance


---------------
when there is a will there is a way
Reply

Marsh Posté le 24-07-2013 à 06:17:23   

Reply

Sujets relatifs:

Leave a Replay

Make sure you enter the(*)required information where indicate.HTML code is not allowed