Programmation C++ et CPLEX

Programmation C++ et CPLEX - C++ - Programmation

Marsh Posté le 17-07-2008 à 15:17:53    

Bonjour à vous,  
 
je débute tous jsute en c++ et en Cplex. Actuellement je suis en stage et je dois implémenter mon modèle mathématique en c++ en utilisant des macros qui font appel au solveur Cplex.
 
1. création des variables binaires : j'ai une variable à 4 indices, je souhaiterais savoir comment je dois faire... j'ai pensais à créer un tableau à plusiuers dimensions mais je ne sais pas comment ça fonctionne et a quel endroit il faut le faire, si vous avez des suggestions et/ou des documents à lire, je suis prenant.
 
je vous remercie

Reply

Marsh Posté le 17-07-2008 à 15:17:53   

Reply

Marsh Posté le 17-07-2008 à 15:54:11    

un exemple de ce que tu veut faire (pas le code, le principe derrière).
CPLX doit bien avoir une doc sur l'interfaçage C/CPLX et donc sur les structures de données associées.

Reply

Marsh Posté le 17-07-2008 à 16:01:00    

ben alors, le but est de réécrire mon modèle mathématique en visual c++, donc je vais créer une classe qui s'appelle modèle mathématique, ensuite a partir de la, je ferais un appel au solveur cplec en utilisant des macros.... ma première fonction serait la création de variables binaires..... ma variable est une varaible comportant 4 indices ... donc c la ou je me demande a quel moment il faut déclarer cette variable , est ce dans le constructeur ou est ce dans la fonction création varables binaires et comment déclarer un vecteur à plusieurs dimensions !!!

Reply

Marsh Posté le 18-07-2008 à 13:16:47    

en gros je veux savoir comment passer d'un tableau a plusieurs dimension en c++ à une variable en cplex le représentant... je m'explique si ce n'est toujours pas aussi clair : j'ai une variable à 4 dimension, pour connaitre son emplacement mémoire une fois les résultats affichés, je créer un tableaux de tableux mais comment je fais pour dire a mon programme que la variable n° xxxx représente la variable X_1111 (avec les indices ijkm qui sont égaux à 1)
 
merci merci !

Reply

Marsh Posté le 18-07-2008 à 14:46:52    

c'est pas parce que ta variable à plusieurs DIMENSIONS que ça correspond à un tableau à plusieurs dimensions.

Reply

Marsh Posté le 19-07-2008 à 13:51:25    

Ah, je fais comment alors pour la déclaration de mes variables à plusieurs dimensiosn ??? merci bcp de m'aider c super simpa de votre part  :bounce:

Reply

Marsh Posté le 07-11-2009 à 14:15:37    

bonjour, je suis débutante en CLPex, est ce que vous pouvez m'orienter pour l'instalation de CPLEX et son utilisation. merci beaucoup.

Reply

Marsh Posté le 20-04-2012 à 10:29:59    

Je dois faire un générateur en C++ qui fera un lecture d'un fichier lp et apres il appelera CPLEX, pour que ce logiciel execute le fichier. Mais j'arrive pas a reussi. Quand j'appele CPLEX a la main, j'ai une solution juste. Mais quand j'utilise le générateur, seulement le valeur de la fonction objectif est juste. Les variables recevoient les valeurs bizarres.
Ci-dessous il y a le code que j'ai fais:
 
#include <ilcplex/cplex.h>
#include <cstdlib>
#include <string>
#include <iostream>
#include <fstream>  
 
 
using namespace std;
 
 
 
 
 
int main( int argc, char *argv[] ){
 
    char nomlpin[30];
    char fichier[30];
 
    char * xctype;
    CPXENVptr env;
 
    CPXLPptr lp;
    int statut;
    double * x;
    double objval;
    ofstream out;
 
//  si le nombre de parametres inseres n'est pas correct
 
    if (argc != 2)
 
    {
 
        cout << "Utilisation: GenLectExec.exe <Fichier lp>\n";
 
        return -1;
 
    }
 
 
 
    strcpy(nomlpin, argv[1]);
 
    strncpy(fichier, nomlpin, strlen(nomlpin) - 2);
    strcat(fichier, "Response.txt" );
 
 
 
//  Environnement Cplex  
 
    env = CPXopenCPLEX (&statut);
 
     
//  Faire une liason avec le fichier .lp
    lp = CPXcreateprob (env, &statut, nomlpin);
 
// Define objectif function type
 
   CPXchgobjsen(env, lp, CPX_MIN) ;
 
   
// Define Prob type : LP, MILP,...
 
   CPXchgprobtype(env, lp, CPXPROB_MILP) ;
 
//  Lecture du fichier .lp  
    statut = CPXreadcopyprob (env, lp, nomlpin, NULL);
//  NULL signfie que la fin du name du fichier du etre par exemple .lp
 
     
//  Lance les calculs
    statut = CPXmipopt  (env, lp);
 
     
//  Enresgistrer le valeur de la fonction objectif dans la variable objval  
    statut = CPXgetmipobjval (env, lp, &objval);
 
 
//  CPXgetnumcols retourne la taille du problème et enregistre les valeurs des variables CPXgetmipx dans le mémoire pointé par x.        
    x = (double *) malloc (CPXgetnumcols(env, lp) * sizeof(double));      
    statut = CPXgetmipx(env,lp,x,0,CPXgetnumcols(env,lp) -1);
     
    xctype = (char *) malloc (CPXgetnumcols(env, lp) * sizeof(char));
     
    cout << "Nombre de variables: " << CPXgetnumcols(env, lp) << endl;
    cout << "Nombre de contraintes: " << CPXgetnumrows (env, lp) << endl;
     
//  La routine retourne 1 si c'est un MIP
    cout << "Type du probleme: " << CPXgetprobtype(env, lp) << endl;  
     
    cout << "Nombre de variables du type binnaire: " << CPXgetnumbin (env, lp) << endl;
    cout << "Nombre de variables du type entier: " << CPXgetnumint (env, lp) << endl;
 
 
//  Accéde les types de gamme de variables
//  La routine retourne 0 en cas de succès  
    cout << "Type variable: " << CPXgetctype(env,lp, xctype, 0,CPXgetnumcols(env,lp)-1) << endl;  
 
//  Ouvrir un fichier txt
    out.open(fichier);
 
//  Pour savoir se la mémoire de la variable x a été alloué de maniére correct
    if (!x)
    {
        out << " Erro: Memoria Insuficiente" << endl;
    }
 
//  Ecrire les variables et la fo dans le fichier txt
    for (int i = 0; i <= CPXgetnumcols(env,lp) -1; i++)
 
    {
     out << "x" << i << ": " << x[i] << endl;
    }
    out <<  "Fonction Objectif: " << objval << endl;
     
//  Fermer le fichier txt
    out.close();
 
    return 0;
}
 
Quelq'un peut m'aider s'il tu plait?????

Reply

Marsh Posté le 20-04-2012 à 17:39:44    

Bonsoir, je pense que la déclaration de vos variables qui n'est juste c tout ,peut être que vous les avez déclarer entiers .
je voudrai que vous m'apprenez à programmer en cplex car j'en aurai  besoin pour mon pfe .merci d'avance .


---------------
aimad
Reply

Marsh Posté le 23-04-2012 à 09:20:43    

meroum a écrit :

Bonsoir, je pense que la déclaration de vos variables qui n'est juste c tout ,peut être que vous les avez déclarer entiers .
je voudrai que vous m'apprenez à programmer en cplex car j'en aurai  besoin pour mon pfe .merci d'avance .


 
Vous dites les variables qui sont dans le fichier .lp? Elles sont écrit comme Generals ou comme binnaires. Il n'y a aucune qui est entier.
En fait, je sais utilise CPLEX seulement avec fichiers .lp. Je sais pas comme programmer en utilisant une langage... Mais si vous voulez savoir ça je peux vous expliquer...

Reply

Marsh Posté le 23-04-2012 à 09:20:43   

Reply

Marsh Posté le 23-04-2012 à 15:01:47    

meroum a écrit :


je voudrai que vous m'apprenez à programmer en cplex car j'en aurai  besoin pour mon pfe .merci d'avance .


 
http://www-eio.upc.es/lceio/manuals/cplex-11/html/
 
De rien  :jap:  

Reply

Marsh Posté le 08-05-2012 à 19:45:47    

Bonsoir,j'ai un problème je n'arrive pas à executé mon problème ,je l'envoya a un fichier pour me donner le  résultat sur un autres logicielle .le problème et que le fichier source ou je met les donnée je ne le voie plus .merci si vous avez des idée .

Reply

Marsh Posté le 27-05-2012 à 20:13:58    

Bonjour,  
j'ai un prog mathématique codé sur CPLEX (C++) mais je reçois un message "Error 1016 :restrited version problem size limits.
comment libérer l'espace?
ou bien est ce qu'il ya une fonction CPLEX qui utilise le disque dur comme memoire? »  
pouvez vous m'aider

Reply

Sujets relatifs:

Leave a Replay

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