問題タブ [jmodelica]
For questions regarding programming in ECMAScript (JavaScript/JS) and its various dialects/implementations (excluding ActionScript). Note JavaScript is NOT the same as Java! Please include all relevant tags on your question; e.g., [node.js], [jquery], [json], [reactjs], [angular], [ember.js], [vue.js], [typescript], [svelte], etc.
modelica - シミュレーション中に JModelica を一時停止し、増分入力を渡す
Modelica コミュニティの皆様、こんにちは。
JModelica で 2 つのモデルを並行して実行したいのですが、モデル間で変数を渡す方法がわかりません。1 つのモデルは Python モデルで、もう 1 つは EnergyPlusToFMU モデルです。
JModelica ドキュメントの例には、モデルのシミュレーション前に定義された完全なシミュレーション期間の入力が含まれています。FMU と協調シミュレーションの重要な機能である、入力のために一時停止するモデルを構成する方法がわかりません。
JModelica でこれを実装する方法を示す例またはコードを教えてもらえますか?
シミュレート コマンドをループに入れますか? もしそうなら、前のタイムステップでデータを失うことなくウォームアップ期間と初期化を処理するにはどうすればよいですか?
お時間をいただきありがとうございます。
ジャスティン
annotations - Modelica モデルからの注釈の削除
私は Modelica ライブラリを開発しており、ソース コード リストを含むドキュメントを作成する必要があります。注釈なしで Modelica モデルのソースを含めることができるようにしたいと思います。
手動で編集することもできますが、より自動化された戦略を探しています。最も便利で簡単な方法は、何らかのツールを使用して.mo
注釈なしでファイルを保存し、それらをドキュメントに含めることだと思います (私は\lstinputlisting
LaTeX で使用しています)。
これを行うことは可能ですか?Dymola、OpenModelica、JModelica にアクセスできます。Dymolaは、自動的に生成されるドキュメント ([ファイル] > [エクスポート] > [HTML...]) にリストを含めることができるため、明らかにそのようなリストを作成できます。Dymola とOpenModelicaを使用したスクリプト作成を検討していますが、これを行う方法も見つかりませんでした。
JModelicaは良い選択肢のように思えますが、私は Python を使った経験がありません。これが可能で、誰かが私にいくつかの指針を与えるなら、私は喜んでそれを自分で調べます. 仕事をするかもしれない関数への言及を見つけましたが、prettyprint
どこから始めればよいかわかりません。最新のドキュメントでその機能への参照さえ見つかりません。
また、Dymola/OpenModelica を使用して (UI を介して、またはスクリプトを使用して) それを行う方法を見つける方が便利です。私は何かを逃しましたか?
python - PyFMI を使用した感度分析 - for ループの FMU
主な目標
地域暖房ネットワークの感度分析。
アプローチ
AixLib および BuildingSystem ライブラリを使用したシステムの Modelica モデル (Dymola 内)
モデルを FMU コシミュレーションとしてエクスポート
SALib (感度分析 Python ライブラリ) を使用してサンプルを定義します (パラメーター スイープ)
PyFMI を使用して、個々のサンプルすべてに対して Python の for ループでモデルを実行します (複数のプロセッサでシミュレーションを実行するために、JobLib を使用して for ループを並列化します)。
分散ベースの感度分析を実行する SALib ( http://salib.readthedocs.io/en/latest/basics.html#an-example )
最初の一歩
石神関数のシンプルなモデリカモデル (時間に依存しない)。この関数は、感度分析方法をテストするためによく使用されます ( https://www.sfu.ca/~ssurjano/ishigami.html )。
Python コード (PyFMI とパラメーター スイープを使用した FMU の読み込みを含む) は正常に動作します。
問題
一定量のシミュレーションの後、エラーが発生します。エラー出力は常に同じに見えるとは限りません。時々私たちは得る
FMUException: バイナリのロード中にエラーが発生しました。DLL を読み込めませんでした: Eine DLL-Initialisierungsroutine ist fehlgeschlagen.
翻訳: DLL 初期化ルーチンが失敗しました。
そして時々私たちは得る:
FMUException: バイナリのロード中にエラーが発生しました。DLL をロードできませんでした: Für diesen Befehl ist nicht genügend Speicher verfügbar.
翻訳:このコマンドに使用できる十分なメモリがありません。
このエラーは、約 650 回のシミュレーション実行後に発生します。これは、シミュレーションが次々と再実行される小さなループ ブロックで実行されるか、またはすべてのシミュレーションで 1 つの for ループが実行されるかに依存しません。Python コンソール/プロセスを再起動すると、新しいシミュレーションを再度実行できます。
作業環境:
Windows 10、Python 2.7、pip (JModelica ではない) を使用してインストールされた PyFMI、Jupyther ノートブック (Mozilla Firefox) での Python コーディング
Python と PyFMI の基本的な知識しかなく、このエラーに本当に苦労しています。
付属品
以下に見つけることができます
Dymola からコシミュレーション FMU をエクスポートするために使用される Modelica モデル (CVode を使用)
py ファイルとしての Python コード
Python コードの散布図を出力します。
ファイルを直接ダウンロードできる JModelica フォーラムにも投稿しました (FMU、Jupyter ノートブックなど): http://www.jmodelica.org/27925
モデリカモデル
Python コード
アップデート
さらにいくつかのテストを行ったところ、次のことがわかりました。
FMU が Dymola と JModelica のどちらからエクスポートされたかによって、動作が異なります。
Dymola からエクスポートされた FMU を使用する:
load_fmu
forループから行を取り出すとうまくいくようですload_fmu
forループにない場合でも、クラッシュすることがあります- コマンドが正常に動作するように見える
model.reset()
前に新しい行を追加するmodel.set(...)
- ある場合とない場合でシミュレートすると結果が異なる
model.reset()
-> なぜ?? model.instantiate()
の代わりにmodel.reset()
-> は機能しません。タスク マネージャーのメモリ使用量は最大で約 350 MB になり、その後FMUException: モデルのインスタンス化に失敗しました。詳細については、ログを参照してください。
log_level=4 のログ ファイル:
JModelica からエクスポートされた FMU を使用する:
- が for ループ内にある場合でも正常に動作
load_fmu
します (ただし低速) - この経験は、5.4.2 章 ( http://www.jmodelica.org/api-docs/usersguide/2.1/ch05s04.html#d0e1854 )の JModelica ドキュメント内で与えられた例に対応していません
load_fmu
。 -ループ - コマンド
model.reset()
ormodel.instatiate()
は for ループ内で必要です (Dymola FMU とは対照的に) -> なぜ??
私の質問:
FMU モデルを異なるパラメーターで何度もシミュレートするループを実行する正しい理由は何ですか?
model.reset()
を使用する場合と使用しない場合の違いは何model.instatiate()
ですか?
付属品
model.reset()
これは、for ループがある場合とない場合
の違いを示すプロットです。
JModelica からエクスポートされた FMU (ライセンスは必要ありません) は、http ://www.jmodelica.org/27925#comment-6668 からダウンロードできます。