IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

C++ Discussion :

string ? vector ? C++ Complex


Sujet :

C++

  1. #1
    Débutant(e)
    Inscrit en
    Mars 2006
    Messages
    109
    Détails du profil
    Informations forums :
    Inscription : Mars 2006
    Messages : 109
    Points : 64
    Points
    64
    Par défaut string ? vector ? C++ Complex
    Bpnjour à tous,

    Je souhaiterais utiliser le solveur Cplex (programmation mathématique) via C++ visual.

    Je souhaite créer des variables binaires. Ma variable est composé de plusieurs indices, on pourrait envisager de voir ça comme étant un tableau à 4 dimensions.

    Aprés que le solveur ait résolu mon programme linéaire, il va m'afficher mes résultats. Le problème c'est qu'il ne me donnera pas le résultat correspondant à ma variable X[0][1][0][0] par exemple. cette variable peut etre assimilé à une case du tableau à plusieurs dimensions. le Cplex quant à lui va me rendre le résultat de la xxxème variable par exemple : X_2354 ce qui correspond a la valeur X[0][1][0][0] de mon tableau. Ce que je souhaiterais savoir c'est comment justement essayer de faire le liens entre le résultat qu'affiche le soveur et une case de mon tableau.

  2. #2
    Expert confirmé
    Homme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Décembre 2003
    Messages
    3 549
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Essonne (Île de France)

    Informations professionnelles :
    Activité : Ingénieur développement logiciels

    Informations forums :
    Inscription : Décembre 2003
    Messages : 3 549
    Points : 4 625
    Points
    4 625
    Par défaut
    c'est pas plutôt X[1][2][4][3] ?
    Boost ftw

  3. #3
    Débutant(e)
    Inscrit en
    Mars 2006
    Messages
    109
    Détails du profil
    Informations forums :
    Inscription : Mars 2006
    Messages : 109
    Points : 64
    Points
    64
    Par défaut
    Ben ça dépend ce que tu entend par là....

    j'ai pensé à autre chose :

    je déclare : mon tableau à pluieurs dimensions, peut être dans le constrcteur ?? je ne sais pas.

    ensuite : j'identifie chaque variable (i.e : chaque case correspondant à mon tableau de plusieurs dimensions) par un caractère (un nom si vous voulez) ce qui va me permettre jsutement une fois les résultats affichés d'identifier chaque variable par leur nom.

    qu'en pensez vous de cetet écriture :

    char variable[i][j][k][l] = {'X','0'} ????

    ce que j'aurais souhaiter c'est faire une boucle afin d'attribuer un nom pour chauqe variable a chaque changement d'indice. et j'aurais aimer aussi faire varier le 0 devant X a chaque changement d'indice aussi dans mon tableau par exemple pour variable[0][0][0][0] = X0
    variable [0][0][0][1] = X1
    .
    .
    .
    .variable[1][0][7][2] = X245

    serait il possible de faire ça ??????

  4. #4
    Expert confirmé
    Homme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Décembre 2003
    Messages
    3 549
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Essonne (Île de France)

    Informations professionnelles :
    Activité : Ingénieur développement logiciels

    Informations forums :
    Inscription : Décembre 2003
    Messages : 3 549
    Points : 4 625
    Points
    4 625
    Par défaut
    Pourquoi tu fais pas une table associative chaîne -> entier ?
    Boost ftw

  5. #5
    Membre averti
    Profil pro
    Inscrit en
    Janvier 2007
    Messages
    301
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Janvier 2007
    Messages : 301
    Points : 345
    Points
    345
    Par défaut
    Si tu utilises Cplex par le biais de la dll, tu récupères la valeur des variables de ton modèle de la manière suivante:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    	vector<double> x;
    	x.resize(CPXgetnumcols(m_cpxEnv, m_cpxLp));
    	status = CPXgetmipx (m_cpxEnv, m_cpxLp, &x[0], 0, CPXgetnumcols(m_cpxEnv, m_cpxLp)-1);
    L'ordre des variables dans le vecteur x correspond à l'ordre dans lequel tu as inséré ces même variables dans ton modèle (en faisant un truc du genre: status = CPXnewcols (m_cpxEnv, m_cpxLp, nbVars, &f[0], &lb[0], &ub[0], &t[0], NULL); ). Donc si on suppose que tu as N variables insérées avant tes variables à 5 indices et qu'on suppose également que dans variable[i][j][k][l], i varie de 0 à I-1, j de 0 à J-1, ... pour accéder à la variable v = variable[i][j][k][l], il te suffit de faire x[i*(J-1)*(K-1)*(L-1)+j*(K-1)*(L-1)+k*(L-1)+l].
    Sinon pour associer ton modèle métier à ton modèle mathématique, dans chaque classe métier impliquée dans le modèle, tu ajoutes un attribut de type pointeur sur un double et lorsque tu construit ton modèle mathématique, tu initialise ces attributs en fonctions des variables du modèles (c'est à dire en fonction de la position dans le vecteur x précédent). Je sais pas trop si je suis très clair...

  6. #6
    Expert éminent sénior
    Avatar de koala01
    Homme Profil pro
    aucun
    Inscrit en
    Octobre 2004
    Messages
    11 614
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 52
    Localisation : Belgique

    Informations professionnelles :
    Activité : aucun

    Informations forums :
    Inscription : Octobre 2004
    Messages : 11 614
    Points : 30 626
    Points
    30 626
    Par défaut
    Salut,

    Il y a quand même quelque chose qui me turlupine...

    Es-tu sur que ce dont tu as besoin, ce soit un tableau à quatre dimensions

    En effet, quelles que soient les valeurs que tu envisage comme taille de dimension, cela implique que ton tableau variable[w][x][y][z] contiendra w*x*y*z éléments...

    Es tu sur que ce n'est pas plutôt x éléments, voire x*y éléments représentés par les valeur w, y et z (ou w et z)

    L'expérience m'a montré qu'il est en effet très rare d'avoir à utiliser des tableaux à plus de trois dimensions (pour la raison bien simple que tout notre système ne s'applique jamais que sur au maximum la hauteur, la largeur et la profondeur )

    En outre, même si, tu as effectivement vraiment besoin des quatre dimensions, ne crois tu pas qu'il serait plus simple de le transformer en un tableau à une seule dimension sous la forme de variable[w*x*y*z]
    A méditer: La solution la plus simple est toujours la moins compliquée
    Ce qui se conçoit bien s'énonce clairement, et les mots pour le dire vous viennent aisément. Nicolas Boileau
    Compiler Gcc sous windows avec MinGW
    Coder efficacement en C++ : dans les bacs le 17 février 2014
    mon tout nouveau blog

  7. #7
    yan
    yan est déconnecté
    Rédacteur
    Avatar de yan
    Homme Profil pro
    Ingénieur expert
    Inscrit en
    Mars 2004
    Messages
    10 033
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 42
    Localisation : France, Ille et Vilaine (Bretagne)

    Informations professionnelles :
    Activité : Ingénieur expert
    Secteur : High Tech - Multimédia et Internet

    Informations forums :
    Inscription : Mars 2004
    Messages : 10 033
    Points : 13 968
    Points
    13 968
    Par défaut
    Citation Envoyé par CedricMocquillon Voir le message
    [j][k][l], il te suffit de faire x[i*(J-1)*(K-1)*(L-1)+j*(K-1)*(L-1)+k*(L-1)+l].
    pour quoi -1???!!!!

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    x[i*(J*K*L)+j*(K*L)+k*(L)+l]

  8. #8
    yan
    yan est déconnecté
    Rédacteur
    Avatar de yan
    Homme Profil pro
    Ingénieur expert
    Inscrit en
    Mars 2004
    Messages
    10 033
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 42
    Localisation : France, Ille et Vilaine (Bretagne)

    Informations professionnelles :
    Activité : Ingénieur expert
    Secteur : High Tech - Multimédia et Internet

    Informations forums :
    Inscription : Mars 2004
    Messages : 10 033
    Points : 13 968
    Points
    13 968
    Par défaut
    Citation Envoyé par koala01 Voir le message
    L'expérience m'a montré qu'il est en effet très rare d'avoir à utiliser des tableaux à plus de trois dimensions (pour la raison bien simple que tout notre système ne s'applique jamais que sur au maximum la hauteur, la largeur et la profondeur )
    oui et non,
    exampe :
    altitude + orientation(2D) + distance
    Ça fait 4D et c'est pas non plus hors système.
    Les Coordonnées homogènes et le quaternion sont aussi 4D

  9. #9
    Membre averti
    Profil pro
    Inscrit en
    Janvier 2007
    Messages
    301
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Janvier 2007
    Messages : 301
    Points : 345
    Points
    345
    Par défaut
    +2 pour Mongaulois
    Si on considère la variable d_{c,f,t,p} représentant la demande du client c au fournisseur f à la période t en produit p, on est déjà à 4 indices. Lorsque l'on modélise un problème sous la forme d'un modèle mathématique linéaire, on est souvent dans le cas de variables avec beaucoup d'indices... surtout qu'on est souvent obligé d'utiliser des variables supplémentaires (souvent binaires) pour pouvoir linéariser le problème.

  10. #10
    Expert éminent sénior
    Avatar de koala01
    Homme Profil pro
    aucun
    Inscrit en
    Octobre 2004
    Messages
    11 614
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 52
    Localisation : Belgique

    Informations professionnelles :
    Activité : aucun

    Informations forums :
    Inscription : Octobre 2004
    Messages : 11 614
    Points : 30 626
    Points
    30 626
    Par défaut
    Citation Envoyé par CedricMocquillon Voir le message
    +2 pour Mongaulois
    Si on considère la variable d_{c,f,t,p} représentant la demande du client c au fournisseur f à la période t en produit p, on est déjà à 4 indices. Lorsque l'on modélise un problème sous la forme d'un modèle mathématique linéaire, on est souvent dans le cas de variables avec beaucoup d'indices... surtout qu'on est souvent obligé d'utiliser des variables supplémentaires (souvent binaires) pour pouvoir linéariser le problème.
    Personnellement, j'aurais plutôt tendance à:
    Soit créer un tableau pour chaque indice (un pour le cllient, un pour le fournisseur, un pour la période et un pour le produit) qui feraient référence à une lliste unique de commande, soit à:
    • trier les commandes par
      1. client
      2. fournisseur
      3. période
      4. produit
    • utiliser le concept de ruptures, quitte, effectivement, à créer un indice "alternatif" sur les éléments qui m'intéressent pour m'en faciliter l'accès

    De cette manière, et sachant que les éléments sur lesquels peuvent porter la recherche sont effectivement susceptibles d'évoluer avec le temps, cela me permettrait d'éviter d'avoir à modifier la structure générale ou pire... à réécrire l'ensemble d'un fichier dans lequel les informations seraient sauvegardées.
    A méditer: La solution la plus simple est toujours la moins compliquée
    Ce qui se conçoit bien s'énonce clairement, et les mots pour le dire vous viennent aisément. Nicolas Boileau
    Compiler Gcc sous windows avec MinGW
    Coder efficacement en C++ : dans les bacs le 17 février 2014
    mon tout nouveau blog

Discussions similaires

  1. map< string, map<string, vector<float> > >
    Par dauphin11 dans le forum Langage
    Réponses: 8
    Dernier message: 21/11/2011, 20h46
  2. Réponses: 2
    Dernier message: 01/05/2008, 16h13
  3. determiner la dimention en kb d'un vector<string>
    Par philippe V dans le forum SL & STL
    Réponses: 7
    Dernier message: 23/03/2005, 23h58
  4. [STL] vector<string> et appel de fonctions.
    Par guejo dans le forum MFC
    Réponses: 4
    Dernier message: 08/10/2004, 17h36
  5. [Collections] Conversion de Vector en tableau de String
    Par java_math dans le forum Collection et Stream
    Réponses: 5
    Dernier message: 06/06/2004, 12h55

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo