#JModelicaって
##ユーザガイドによると
- モデリング言語Modelicaの元、異なる分野の複雑な物理シミュレーションを実施
- Optimicaの拡張をサポートし最適化問題を扱うことができる
- コンパイラ構築フレームJastAddベースのコンパイラを使用
- ユーザーインターフェイスはPython
- FMI(Function Mock-up Interface)のExchange Moldel, Co-simulationをサポート
##わかりやすくいうと
- Modelica言語のモデルをFMUs(Function Mock-up Units)としてコンパイルできる
- FMUsをインポートして計算実行できる
#JModelicaの基本情報
ソフト名 | JModelica |
---|---|
バージョン | 1.17 |
開発元 | ルンド大学 (現在はModelon ABが開発・保守) |
ライセンス | GPL v3 ※1 |
URL | http://www.jmodelica.org/ |
platform | Linux(32/64bit) Windows(32/64bit) |
※1…ランタイムライブラリはCPL v1.0 (JModelicaでコンパイルされたFMUsはCPL v1.0準拠) |
#インストール
基本のユーザーガイド通り実施すればよい(丸投げ)
##Windows
http://www.jmodelica.org/page/27667
##Ubuntu 12.04
http://www.jmodelica.org/page/27667
##Ubuntu 15.04
http://www.jmodelica.org/27663
Ubuntuはいいけど今は2016年だし、Anacondaがいいし、という人向けに
以下では、Ubuntu 16.04へのAnaconda,JModelicaのインストールについて解説
#Anaconda環境を整える
Anacondaで仮想環境を用意する。
まずはpyenvをインストールする
git clone https://github.com/yyuu/pyenv.git ~/.pyenv
echo 'export PYENV_ROOT="$HOME/.pyenv"' >> ~/.bashrc
echo 'export PATH="$PYENV_ROOT/bin:$PATH"' >> ~/.bashrc
echo 'eval "$(pyenv init -)"' >> ~/.bashrc
source ~/.bashrc
次にAnacondaのインストール、caeという名前の仮想環境を作成する。
wget -P $(pyenv root)/cache https://repo.continuum.io/archive/Anaconda2-4.1.0-Linux-x86_64.sh
pyenv install anaconda2-4.1.0
pyenv global anaconda2-4.1.0
pyenv rehash
conda update -y conda
通常、上記1行目は不要のはず。pyenv install
内でcurlがTLSの暗号化サイズにエラーを出して悩ましいとき、
先にwget
でダウンロードした後インストールする。
#Ubuntu16.04(64bit)にJModelicaをインストールする下準備
##必要なパッケージのインストール
JModelicaが必要とするパッケージをUbuntu 16.04にインストール。
ターミナルにて下記を入力
sudo apt install -y g++ subversion gfortran cmake swig ant openjdk-8-jdk zlib1g-dev libboost-dev automake autoconf pkg-config
##必要なPythonパッケージのインストール
JModelicaが必要とするPythonパッケージを先に作成したPython環境にインストール。
jpypeとjccはAnaconda Cloudからインストール。
conda install -y anaconda
conda install -y -c omnia jpype1=0.6.0
conda install -y -c ssc jcc=2.21
##Ipoptのインストール
Ubuntuのパッケージとして提供されているらしいが、
Ubuntu12.04の頃はパッケージに不備があり?うまく動作しなかったらしい。
今回もソースからコンパイルする。configure時のprefixは各自の環境で変更。
mkdir ~/Ipopt
cd ~/Ipopt
wget http://www.coin-or.org/download/source/Ipopt/Ipopt-3.12.6.tgz
tar xzf Ipopt-3.12.6.tgz
cd Ipopt-3.12.6/ThirdParty/Blas
./get.Blas
cd ../Lapack
./get.Lapack
cd ../Mumps
./get.Mumps
cd ../Metis
./get.Metis
cd ../../
mkdir build
cd build
../configure --prefix=/home/ubuntu/Ipopt
make
make install
#Ubuntu16.04(64bit)にJModelicaをインストール
configure時のprefixやwith-ipoptのパスは各自の環境で変更
configureファイルによるとPYTHON_HOMEの環境変数があると
PYTHON_INCLUDEやPYTHON_LIBがAnaconda環境に合わないパスが設定されてしますので注意。
export JAVA_HOME=/usr/lib/jvm/java-8-openjdk-amd64
export LD_LIBRARY_PATH=$JAVA_HOME/jre/lib/amd64:$JAVA_HOME/jre/lib/amd64/server
export PYTHON_INCLUDE=/home/ubuntu/.pyenv/versions/anaconda2-4.1.0/include/python2.7
export PYTHON_LIB=/home/ubuntu/.pyenv/versions/anaconda2-4.1.0/lib/libpython2.7.so
mkdir -p ~/JModelica
cd ~/JModelica
svn co https://svn.jmodelica.org/trunk JModelica.org
cd JModelica.org
mkdir build
cd build
../configure --prefix=/home/ubuntu/JModelica --with-ipopt=/home/ubuntu/Ipopt
make
make install
make casadi_interface
#動作テスト
JModelicaの使用に必要なパスの通ったipythonを起動させる
/home/ubuntu/JModelica/bin/jm_ipython.sh
プロット表示のためXの環境が必要。以降、ipythonのターミナルで動作テスト。
テスト1
from pyjmi.examples import VDP_sim
VDP_sim.run_demo()
結果
何を計算したのだろうか?
テスト2
from pyjmi.examples import cstr
cstr.run_demo()
結果
何かを最適化しているっぽい。
テスト3
from pyjmi.examples import cstr_casadi
cstr_casadi.run_demo()
結果
RuntimeError: The assertion "handle!=0" on line 171 of file "/home/ubuntu/JModelica/JModelica.org/ThirdParty/CasADi/CasADi/casadi/core/function/plugin_interface.hpp" failed.
PluginInterface::loadPlugin: Cannot load shared library:
Tried libcasadi_nlpsolver_ipopt.so:
Error code: libcasadi_nlpsolver_ipopt.so: cannot open shared object file: No such file or directory
Tried /home/ubuntu/JModelica/ThirdParty/CasADi/lib/libcasadi_nlpsolver_ipopt.so:
Error code: /home/ubuntu/JModelica/ThirdParty/CasADi/lib/libcasadi_nlpsolver_ipopt.so: cannot open shared object file: No such file or directory
確かにlibcasadi_nlpsolver_ipopt.soはいない。まいっか。
#おまけ
jupyter notebookでJModelicaを使えるようにする
JModelicaのインストールパスが/home/ubuntu/JModelicaである場合の例を示す。
インストールパスの部分は、各自の環境に合わせて変更すること
sed 's/ipython/jupyter notebook --no-browser/g' /home/ubuntu/JModelica/bin/jm_ipython.sh >/home/ubuntu/JModelica/bin/jm_jupyter_notebook.sh
chmod +x /home/ubuntu/JModelica/bin/jm_jupyter_notebook.sh
jupyter notebookを起動する。
/home/ubuntu/JModelica/bin/jm_jupyter_notebook.sh
ブラウザを立ち上げ、http://localhost:8888/ にアクセスする。