Bonjour la communauté JModelica. J'ai déjà réussi à compiler JModelica sur CentOS, mais j'échoue toujours sur Ubuntu 18.04. La compilation elle-même est réussie, mais l'exécution de
--------------------------------------------------------------------------- AttributeError Traceback (most recent call last) <ipython-input-4-33de447ae4ee> in <module>() ----> 1 cstr_casadi.run_demo() /opt/JModelica.org/Python/pyjmi/examples/cstr_casadi.pyc in run_demo(with_plots) 179 180 # Solve the optimal control problem --> 181 res = op.optimize(options=opt_opts) 182 183 # Extract variable profiles /opt/JModelica.org/Python/pyjmi/casadi_interface.pyc in optimize(self, algorithm, options) 446 "algorithm.") 447 return self._exec_algorithm('pyjmi.jmi_algorithm_drivers', --> 448 algorithm, options) 449 450 # Make solve synonymous with optimize /opt/JModelica.org/Python/pyjmi/common/core.pyc in _exec_algorithm(self, module, algorithm, options) 166 alg = algorithm(self, options) 167 # solve optimization problem/initialize --> 168 alg.solve() 169 # get and return result 170 return alg.get_result() /opt/JModelica.org/Python/pyjmi/jmi_algorithm_drivers.pyc in solve(self) 351 Solve the optimization problem using ipopt solver. 352 """ --> 353 self.nlp.solve_and_write_result() 354 355 def get_result(self): /opt/JModelica.org/Python/pyjmi/optimization/casadi_collocation.pyc in solve_and_write_result(self) 995 t0 = time.clock() 996 # todo: account for preprocessing time within solve_nlp separately? --> 997 self.times['sol'] = self.solve_nlp() 998 self.result_file_name = self.export_result_dymola(self.result_file_name) 999 self.times['post_processing'] = time.clock() - t0 - self.times['sol'] - self.extra_update /opt/JModelica.org/Python/pyjmi/optimization/casadi_collocation.pyc in solve_nlp(self) 610 611 # Get the result --> 612 primal_opt = N.array(self.solver_object.output(casadi.NLP_SOLVER_X)) 613 self.primal_opt = primal_opt.reshape(-1) 614 if self.order != "default": /opt/JModelica.org/Python/casadi/casadi_core.pyc in <lambda>(self, name) 30560 for _s in [Function]: 30561 __swig_getmethods__.update(getattr(_s, '__swig_getmethods__', {})) > 30562 __getattr__ = lambda self, name: _swig_getattr(self, NlpSolver, name) 30563 __repr__ = _swig_repr 30564 /opt/JModelica.org/Python/casadi/casadi_core.pyc in _swig_getattr(self, class_type, name) 78 if method: 79 return method(self) ---> 80 raise AttributeError("'%s' object has no attribute '%s'" % (class_type.__name__, name)) 81 82 AttributeError: 'NlpSolver' object has no attribute 'output'
échoue avec
from pyjmi.examples import cstr_casadi cstr_casadi.run_demo()
J'ai essayé de rétrograder plusieurs paquets, mais le problème persiste. J'ai la même erreur sur Arch Linux btw.
Je sais qu'Ubuntu 18.04 n'est pas officiellement pris en charge, mais j'espère que quelqu'un a déjà trouvé une solution à ce problème.
EDIT:
Journaux de make install
et make casadi_interface
:
3 Réponses :
Il semble que vous ayez chargé la mauvaise version de casadi. Pouvez-vous vérifier la sortie
primal_opt = N.array(self.solver_object.getOutput(casadi.NLP_SOLVER_X))
Modifier
Peut-être que le problème est lié à la version swig.
remplacer solver_object .output avec solver_object.getOutput devrait aider! par exemple.
primal_opt = N.array(self.solver_object.output(casadi.NLP_SOLVER_X))
avec
from casadi import __version__ print(__version__)
Peut-être le changset: https://trac.jmodelica.org/changeset/8074 est utile pour avoir une vue d'ensemble des fichiers et de leur emplacement.
Pouvez-vous ajouter des journaux, par exemple make casadi_interface -j4 2> make-casadi-errors.txt
J'ai ajouté des journaux de make install
et make casadi_interface
.
Peut-être pour remplacer solver_object.output
par l'aide de solver_object.getOutput
! par exemple. primal_opt = N.array (self.solver_object.output (casadi.NLP_SOLVER_X))
avec primal_opt = N.array (self.solver_object.getOutput (casadi.NLP_SOLVER_X))
Wow, cela a fonctionné! J'ai dû remplacer solver_object.output
par solver_object.getOutput
dans plusieurs fichiers et emplacements. Pourriez-vous fournir une réponse officielle pour que je puisse la marquer comme résolue?
Je réponds à ma propre question pour la marquer comme résolue. La solution vient de @Vital (voir les commentaires de la question d'origine).
Pour que JModelica fonctionne sur Ubuntu 18.04 ou Arch Linux, solver_object.output
doit être remplacé par solver_object.getOutput
dans tous les fichiers Python concernés.
J'ai créé un script d'installation Linux basé sur cette contribution à Stackoverflow et le guide de l'utilisateur JModelica original. Ce script d'installation est hébergé sur https://gitlab.com/christiankral/install_jmodelica/ . p>