Déclaration d'une variable avec trois indices avec ilocplex
sonya
-
[Dal] Messages postés 6205 Date d'inscription Statut Contributeur Dernière intervention -
[Dal] Messages postés 6205 Date d'inscription Statut Contributeur Dernière intervention -
Bonjour,
Je suis débutante avec le cplex en utilisant le langage c
Je cherche à déclarer une variable que je vais la manipuler avec trois indices.
J'ai essayé ce code :
Cependant le programme me génère cette erreur: ut of bounds index supperior to size of array
Pourriez-vous m'aider pour résoudre ce problème?
Merci d'avance
Je suis débutante avec le cplex en utilisant le langage c
Je cherche à déclarer une variable que je vais la manipuler avec trois indices.
J'ai essayé ce code :
NumVar3Matrix X(env,nb_nodes); /* initialize this matrix */ for(i=1; i<= nb_nodes; i++) { X[i] = NumVarMatrix(env, nb_nodes); for(j=1; j<= nb_nodes; j++) { X[i][j] = IloNumVarArray(env, nb_commodities); for(k=1; k<=nb_commodities; k++) { X[i][j][k] = IloNumVar(env, 0.0, 10000, ILOFLOAT); } } } avec: i in 1..nb_nodes j in 1..nb_nodes k in 1..nb_commodoties
Cependant le programme me génère cette erreur: ut of bounds index supperior to size of array
Pourriez-vous m'aider pour résoudre ce problème?
Merci d'avance
A voir également:
- Voici trois pannes que l'on peut rencontrer au démarrage d'un ordinateur pix
- Ordinateur lent au démarrage - Guide
- Voici trois pannes que l’on peut rencontrer au démarrage d’un ordinateur : - Guide
- Qu'est ce qui se lance au démarrage de l'ordinateur - Guide
- Ordinateur - Guide
- Rebooter un pc au démarrage - Guide
1 réponse
Salut,
Je ne connais pas cplex, cependant, en C, un tableau de taille "nb_nodes" est accessible par des indices allant de 0 à nb_nodes - 1
Une boucle for sur un tel tableau devrait alors s'écrire :
Pour le reste ton code est très bizarre pour moi et ne ressemble guère syntaxiquement à du C.
Dal
Je ne connais pas cplex, cependant, en C, un tableau de taille "nb_nodes" est accessible par des indices allant de 0 à nb_nodes - 1
Une boucle for sur un tel tableau devrait alors s'écrire :
for(i=0; i< nb_nodes; i++) { (...)
Pour le reste ton code est très bizarre pour moi et ne ressemble guère syntaxiquement à du C.
Dal
En fait, j'ai intégré le cplex avec visual studio et je cherche à écrire mon programme linéaire en utilisant l'ilocplex et le langage C.
Pour faire, il me faut déclarer une variable que je vais la manipuler avec trois indices. x[i][j][k]
si NumVar3Matrix était un type C définit avec typedef, et X un nom de variable, il ne me parait pas qu'il soit correct en C que la déclaration de cette variable soit suivie de paramètres entre parenthèses.
Cela ressemble plutôt à l'appel au constructeur d'un objet C++
en cherchant un peu sur le Net, on trouve cette doc d'IBM :
https://www.ibm.com/support/pages/node/397011
qui évoque un fichier d'exemple "facility.cpp example available in $CPLEXDIR\examples\src" qui est du C++ avec du code qui utilise les indices de tableaux correctement (c'est à dire en comptant à partir de 0), le C++ ne différant pas du C sur ce point.
Dal
Pourriez vous m'aider à declarer une variable de type prédefini NumVar3Matrix en C et la manipuler avec langage c aussi.
Merci d'avance.
Voir : https://www.ibm.com/support/knowledgecenter/SSSA5P_12.7.0/ilog.odms.studio.help/pdf/usrcplex.pdf (pages 60 et suivantes) mais la doc sur la façon d'utiliser l'API C est très spartiate.
En page 66, on confirme par ailleurs dans "Referencing ranges of objects" que "Consistent with standard C programming practices, in CPLEX an array containing k
items will contain these items in locations 0 (zero) through k-1".
Quand à "NumVar3Matrix" si c'est un type prédéfinit par cplex, il n'est pas mentionné dans cette doc... et cela n'en serait pas un, si on se fie à l'exemple dont j'ai posté le lien ci-dessus, qui le définit ainsi :
c'est à dire un type définit par l'utilisateur (donc une sorte d'alias) sur un template C++.
pourquoi ne le fais-tu pas en C++ cela a l'air bien mieux documenté ?
si je me fie à l'exemple, et sans connaître du tout cplex, ni être en mesure de tester quoi que ce soit, cela donnerait cela en corrigeant simplement les bornes des tableaux :
Dal
J'ai déja consulté ce document et j'ai essayé de comprendre comment utiliser l'API c mais je n'arrive pas.
Il me faut travailler avec le langage c , c'est tout un projet de mémoire dont la base est codée en C.
Je vais essayer de changer les bornes et tester.