gecode:Multiple Multidimensional Knapsack Problem (MMKP)
gecode:Multiple Multidimensional Knapsack Problem (MMKP) - C++ - Programmation
MarshPosté 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 :
#include <gecode/driver.hh>
#include <gecode/int.hh>
#include <gecode/search.hh>
#include <gecode/minimodel.hh>
using namespace Gecode;
class MMKP : public Script{
protected:
staticconstint n=4 ;//number of testers
staticconstint 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) {
returnnew 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
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 :
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