3
votes

JModelica sur Ubuntu 18.04

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 :

https://pastebin.com/ADRyE7XV

https://pastebin.com / dL4SCWdb


0 commentaires

3 Réponses :


0
votes

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.


4 commentaires

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?



1
votes

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.


0 commentaires

0
votes

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/ .


0 commentaires