【问题标题】:JModelica on Ubuntu 18.04Ubuntu 18.04 上的 JModelica
【发布时间】:2019-03-18 21:06:08
【问题描述】:

你好 JModelica 社区。我已经设法在 CentOS 上编译 JModelica,但在 Ubuntu 18.04 上仍然失败。编译本身是成功的,但是正在运行

from pyjmi.examples import cstr_casadi
cstr_casadi.run_demo()

失败

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

我尝试降级几个软件包,但问题仍然存在。顺便说一句,我在 Arch Linux 上遇到了同样的错误。

我知道 Ubuntu 18.04 不受官方支持,但我希望有人已经找到解决此问题的方法。

编辑: 来自make installmake casadi_interface 的日志:

https://pastebin.com/ADRyE7XV

https://pastebin.com/dL4SCWdb

【问题讨论】:

    标签: python ubuntu-18.04 jmodelica


    【解决方案1】:

    我正在回答我自己的问题以将其标记为已解决。解决方案来自@Vital(参见原始问题的 cmets)。

    为了让 JModelica 在 Ubuntu 18.04 或 Arch Linux 上运行,solver_object.output 需要在所有受影响的 Python 文件中替换为 solver_object.getOutput

    【讨论】:

      【解决方案2】:

      您似乎加载了错误的 casadi 版本。 你能检查一下输出吗

      from casadi import __version__
      print(__version__)
      

      编辑

      可能问题与 swig 版本有关。

      将solver_object.output 替换为solver_object.getOutput 应该会有所帮助! 例如

      primal_opt = N.array(self.solver_object.output(casadi.NLP_SOLVER_X)) 
      

      primal_opt = N.array(self.solver_object.getOutput(casadi.NLP_SOLVER_X))
      

      也许是 changset:https://trac.jmodelica.org/changeset/8074 有助于概览文件和位置。

      【讨论】:

      • 你能添加一些日志吗? make casadi_interface -j4 2&gt; make-casadi-errors.txt
      • 我添加了来自make installmake casadi_interface 的日志。
      • 也许用solver_object.getOutput 替换solver_object.output 帮助!例如primal_opt = N.array(self.solver_object.output(casadi.NLP_SOLVER_X))primal_opt = N.array(self.solver_object.getOutput(casadi.NLP_SOLVER_X))
      • 哇这真的有效!我不得不在几个文件和位置用solver_object.getOutput 替换solver_object.output。您能否提供一个官方答案,以便我将其标记为已解决?
      【解决方案3】:

      我根据 Stackoverflow 上的贡献和原始 JModelica 用户指南创建了一个 Linux 安装脚本。此安装脚本托管在 https://gitlab.com/christiankral/install_jmodelica/

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2021-12-01
        • 2019-04-03
        • 2019-10-20
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多