|
|
|
|
Bonjour,
J'ai implémenté un algorithme assez fastidieux en Java.
Cet algo doit entre-autres résoudre des programmes linéaires (LP) de manière assez fréquente (plusieurs centaines de fois, voire plusieirs milliers), utilisant Cplex.
Cependant ces LP sont de taille très limitée, seulement quelques dizaines de contraintes et de variables.
Dés lors, comment se fait'il que j'aie une erreur de type "out of memory"?
Je m'attends à ce que la résolution prenne du temps, certes, mais pas à ce qu'elle plante par manque de mémoire ...
De formation mathématique plus qu'informatique, je ne suis très loin d'être un exert en Java. Peut être que je crée plein de d'objets que je n'efface pas ou un machin du genre ?
Par exemple, si un objet X existe déjà dans une méthode, et que je fais X = new Objet(); dans cette même méthode , qu'advient'il du X précédent dans la mémoire ?
Merci d'avance et bon we à tout le monde !
Michael.
Configuration: Windows XP Internet Explorer 6.0
C'est effectivement ça. Le problème de java c'est que les gens se reposent sur le garbage collector et ne prennent pas l'habitude de désallouer la mémoire.
Iloexpr expr = ....; // j'utilise mon expr //... // quand j'ai fini expr.end(); Afin que tu t'y retrouves : - en général on fait une classe (que je vais appeler solveur) qui a pour attribut de classe un IloEnv, un IloModel, un IloCplex et des range pour les variables et les contraintes. - tout objet Ilo* crée dans le constructeur de ton solveur (à savoir IloEnv, IloModel, IloCplex, les variables, les contraintes) doivent tous être désalloués dans le destructeur du solveur. - tout objet Ilo* crée temporairement dans une méthode doit être désalloué dans cette méthode. Bonne chance |
Bon, apperement la methode .end(); n'est pas définie pour les objets suivants:
|
Ca sent le bug :) Vérifie déjà que tu passes bien toujours le même problème à cplex. Tu as une méthode qui permet d'éxporter ton objet cplex au format lp
|
Hello,
|