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?????