manel1989 | 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 :
- #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;
- }
|
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
|